[14] [CODE(DOMi)@en[IdleDeadline]] [[オブジェクト]]の
[DFN[[CODE(DOMm)@en[timeRemaining]]]] [[メソッド]]は、
[[アイドル期間]]の残り時間を返すものです。

* 仕様書

[REFS[
- [1] '''[CITE@en[Cooperative Scheduling of Background Tasks]] ([TIME[2016-12-21 17:01:17 +09:00]]) <https://w3c.github.io/requestidlecallback/#the-timeremaining-method>'''
- [12] [CITE@en[Cooperative Scheduling of Background Tasks]] ([TIME[2016-12-21 17:01:17 +09:00]]) <https://w3c.github.io/requestidlecallback/#h-privacy-and-security>
]REFS]

* 引数

[10] [CODE(DOMi)@en[IdleDeadline]] [[オブジェクト]]の
[CODE(DOMm)@en[timeRemaining]] [[メソッド]]は、
[[引数]]を持ちません。

* 返し値

[11] 残り時間を表す [CODE(DOMi)@en[DOMHighResTimeStamp]] の値を返します。

* 処理

[16] [CODE[IdleDeadline]] は、 [DFN[[F[[RUBYB[[[時刻][timeRemaining]]]@en[time]]]]]]を持ちます。
値は作成時に設定されます。締切の[[絶対時刻]]を表します。 [SRC[>>1]]

[2] [CODE(DOMi)@en[IdleDeadline]] [[インターフェイス]]の
[CODE(DOMm)@en[timeRemaining]] [[メソッド]]は、
次のようにしなければ[MUST[なりません]] [SRC[>>1]]。

[FIG(steps)[
= [3] [VAR[今]]を、[[現在高分解能時刻]]に設定します。
= [4] [VAR[締切]]を、[[文脈オブジェクト]]の[F[時刻][timeRemaining]]に設定します。
= [5] [VAR[残り時間]]を、[VAR[締切]] - [VAR[今]]に設定します。
= [6] [VAR[残り時間]]が[[負]]なら、
== [7] [VAR[残り時間]]を、 [N[0]] に設定します。
= [9] [VAR[残り時間]]を返します。
]FIG]

[8] [VAR[残り時間]]を 5 [[μs]] [[精度]]の値とする[SHOULD[べきです]] [SRC[>>1]]。

;; [13] この[[メソッド]]に限らず [CODE[DOMHighResTimeStamp]] は 5 [[μs]]
[[精度]]が好ましいとされています。
[[アイドル]]時間は統計的に [[fingerprinting vector]] となり得るため、
[CODE(DOMm)@en[requestAnimationFrame]] など他の手段でも既にある程度推定可能とはいえ、
[[情報量]]を増やさないため、同じ[[精度]]の値とすることが好ましいと考えられています
[SRC[>>12]]。


[15] [CITE@en[Address comments]]
([[rmcilroy]]著, [TIME[2017-07-27 19:43:23 +09:00]])
<https://github.com/w3c/requestidlecallback/commit/994f6a8e002035ee78c5c8cdab0f595b885e4837>

[17] [CITE@en[Address feedback on timeRemaining method. by rmcilroy · Pull Request #58 · w3c/requestidlecallback]]
([TIME[2017-08-19 21:29:34 +09:00]])
<https://github.com/w3c/requestidlecallback/pull/58>