invoke idle callback timeout algorithm

invoke idle callback timeout algorithm

仕様書

IdleRequestCallback

[60] コールバック関数は、 Web IDL ではコールバック関数のデータ型 IdleRequestCallback >>1 と呼ばれています。

[61] コールバック関数は、引数として IdleDeadline を1つ受け取ります >>1。

[62] コールバック関数の返し値は使われません >>1。

実行期限

[21] コールバック関数は、短い時間で実行完了することが期待されています。

[22] 引数の IdleDeadline オブジェクトの timeRemaining メソッドにより、 アイドル期間の残り時間が得られます。

[23] とはいっても、コールバック関数の実行自体は通常の方法で行われるものですから、 残り時間が 0 になってもそれが理由で実行が中断されることはありません。

処理

[3] イベントループと締切に関するアイドルコールバック群呼び出しアルゴリズム (invoke idle callbacks algorithm) は、 次のようにしなければなりません >>4。

  1. [5] 文書群を、イベントループの文書群の文書のうち、 文書の完全に活性が真で、 文書のWindowの走らせられるアイドルコールバック群のリストが空でないもののリストに設定します。
  2. [9] 文書群が空なら、
    1. [10] ここで停止します。
  3. [6] 今を、現在時刻に設定します。
  4. [7] 今 < 締切なら、
    1. [8] 文書を、文書群のいずれかの文書に設定します。
    2. [11] 項目を、文書のWindowの走らせられるアイドルコールバック群のリストを pop した結果に設定します。
    3. [12] 文書のWindowの走らせられるアイドルコールバック群のリストが空なら、
      1. [13] 文書を文書群から削除します。
    4. [14] アイドル締切を、新しい IdleDeadline に設定します。
      締切
      締切
      didTimeout
      偽
    5. [15] コールバック関数の実行をします。
      呼び出し可能
      項目のコールバック
      引数リスト
      (アイドル締切)
      this
      例外が投げられたら、例外を報告します。
    6. [16] 文書群が空でなければ、
      1. [17] タスクをキューに追加するべきです。
        処理
        1. [18] イベントループと締切について、 アイドルコールバック群呼び出しアルゴリズムを実行します。
        タスク源

[19] 次のタスクの追加がSHOULDであってMUSTでないのは、 他により優先度の高いタスクが現れた時などに利用者エージェントの判断でアイドル期間を切り上げて通常の処理を行うためとされています >>4。

[20] 再帰的な実行の他には、アイドル期間の開始により実行されます。

[64] ハンドルと窓についてのアイドルコールバックタイムアウト呼び出しアルゴリズム (invoke idle callback timeout algorithm) は、 次のようにします >>63。

  1. [65] 項目を、窓のアイドル要求コールバック群のリストからハンドルがハンドルの項目を取得し、削除した結果に設定します。
  2. [66] 項目が null なら、
    1. [67] 項目を、窓の走らせられるアイドルコールバック群のリストからハンドルがハンドルの項目を取得し、削除した結果に設定します。
  3. [68] 項目が null 以外なら、
    1. [70] アイドル締切を、新しい IdleDeadline に設定します。
      締切
      現在時刻
      didTimeout
      真
    2. [69] コールバック関数の実行をします。
      呼び出し可能
      項目のコールバック
      引数リスト
      (アイドル締切)
      this
      例外が投げられたら、例外を報告します。

[2] requestIdleCallback から呼び出されます。

[24] Fix didTimeout definition by rmcilroy · Pull Request #62 · w3c/requestidlecallback () <https://github.com/w3c/requestidlecallback/pull/62/files>