(57)【要約】ディスプレイデバイス（２０）に表示されるビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能なコンピューティングデバイス（１５）を含むシステムが提供される。ビデオコンテンツは、少なくとも１つのアプリケーションウィンドウ（３５）を含む。デスクトップコンポジタ（９０）は、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作可能である。高解像度タイマ（９２）は、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作可能である。【選択図】図１
2020502553.tif 000002
【特許請求の範囲】
【請求項１】
ディスプレイデバイス（２０）に表示されるビデオコンテンツであって、少なくとも１つのアプリケーションウィンドウ（３５）を含むビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能なコンピューティングデバイス（１０）と、
前記少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、前記ビデオフレームを前記ディスプレイデバイスに配信するためにバッファフリップを開始するように動作可能なデスクトップコンポジタ（９０）と、
ディスプレイのリフレッシュの間に前記デスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作可能な高解像度タイマ（９２）と、を備える、
システム。
【請求項２】
前記ディスプレイデバイスは、動的リフレッシュレートで動作可能である、
請求項１のシステム。
【請求項３】
前記コンピューティングデバイスは、オペレーティングシステム（８０）を含み、前記デスクトップコンポジタは、前記オペレーティングシステムの一部である、
請求項１のシステム。
【請求項４】
前記高解像度タイマは、ビデオドライバ（８５）の一部である、
請求項１のシステム。
【請求項５】
ビデオドライバ（８５）を備え、前記高解像度タイマは、前記ビデオドライバの一部である、
請求項１のシステム。
【請求項６】
前記ディスプレイデバイス（２０）は、ＶＳＹＮＣタイミングが有効な場合に動作し、前記高解像度タイマは、前記ＶＳＹＮＣタイミングとは無関係に前記デスクトップコンポジタを起動させ、前記コマンドを実行させるように動作可能である、
請求項１のシステム。
【請求項７】
前記高解像度タイマは、次のリフレッシュの前に、バッファがレンダリングに利用可能であることを前記デスクトップコンポジタに報告するように動作可能である、
請求項１のシステム。
【請求項８】
前記高解像度タイマは、前記ビデオコンテンツに基づいて動的に調整可能な周波数で動作するように構成されている、
請求項１のシステム。
【請求項９】
ディスプレイデバイス（２０）に表示されるビデオコンテンツであって、少なくとも１つのアプリケーションウィンドウ（３５）を含むビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュすることと、
前記少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、前記ビデオフレームを前記ディスプレイデバイスに配信するようにデスクトップコンポジタ（９０）を動作させることと、
ディスプレイのリフレッシュの間に前記デスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように高解像度タイマ（９２）を動作させることと、を含む、
方法。
【請求項１０】
前記ディスプレイデバイスを動的リフレッシュレートで動作させる、
請求項９の方法。
【請求項１１】
前記デスクトップコンポジタは、オペレーティングシステム（８０）の一部である、
請求項９の方法。
【請求項１２】
前記高解像度タイマは、前記オペレーティングシステムの一部である、
請求項１１の方法。
【請求項１３】
前記高解像度タイマは、ビデオドライバ（８５）の一部である、
請求項９の方法。
【請求項１４】
前記ディスプレイデバイスを、ＶＳＹＮＣタイミングが有効な場合に動作させ、前記高解像度タイマは、前記ＶＳＹＮＣタイミングとは無関係に前記デスクトップコンポジタを起動させ、前記コマンドを実行させる、
請求項９の方法。
【請求項１５】
次のリフレッシュの前に、バッファがレンダリングに利用可能であることを前記デスクトップコンポジタに報告するように前記高解像度タイマを動作させることを含む、
請求項９の方法。
【請求項１６】
前記ビデオコンテンツに基づいて動的に調整可能な周波数で前記高解像度タイマを動作させることを含む、
請求項９の方法。
【請求項１７】
ディスプレイデバイス（２０）を有し、前記ディスプレイデバイスに表示されるビデオコンテンツであって、少なくとも１つのアプリケーションウィンドウ（３５）を含むビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能な第１コンピューティングシステム（１５）を含むシステムにおける方法であって、
前記ディスプレイデバイスに表示されるビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュすることと、
前記少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、前記ビデオフレームを前記ディスプレイデバイスに配信するためにバッファフリップを開始するようにデスクトップコンポジタ（９０）を動作させることと、
ディスプレイのリフレッシュの間に前記デスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように高解像度タイマ（９２）を動作させることと、を含む、
方法。
【請求項１８】
前記ディスプレイデバイスを動的リフレッシュレートで動作させる、
請求項１７の方法。
【請求項１９】
前記デスクトップコンポジタは、オペレーティングシステム（８０）の一部である、
請求項１７の方法。
【請求項２０】
前記高解像度タイマは、前記オペレーティングシステムの一部である、
請求項１９の方法。
【請求項２１】
前記高解像度タイマは、ビデオドライバ（８５）の一部である、
請求項１７の方法。
【請求項２２】
前記ディスプレイデバイスを、ＶＳＹＮＣタイミングが有効な場合に動作させ、前記高解像度タイマは、前記ＶＳＹＮＣタイミングとは無関係に前記デスクトップコンポジタを起動させ、前記コマンドを実行させる、
請求項１７の方法。
【請求項２３】
次のリフレッシュの前に、バッファがレンダリングに利用可能であることを前記デスクトップコンポジタに報告するように前記高解像度タイマを動作させることを含む、
請求項１７の方法。
【請求項２４】
方法を実行するためのコンピュータ可読命令を含むコンピュータ可読記憶媒体であって、
前記方法は、
ディスプレイデバイス（２０）に表示されるビデオコンテンツであって、少なくとも１つのアプリケーションウィンドウ（３５）を含むビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュすることと、
前記少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、前記ビデオフレームを前記ディスプレイデバイスに配信するためのバッファフリップを開始するようにデスクトップコンポジタ（９０）を動作させることと、
ディスプレイのリフレッシュの間に前記デスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように高解像度タイマ（９２）を動作させることと、を含む、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１０月３１日に出願された米国特許出願第１５／３３８，４９２号の利益を主張し、この内容は、本明細書に十分に記載されているかのように、言及したことによって本明細書に組み込まれる。
【０００２】
本発明は、概して、コンピューティングシステム及びソフトウェアに関し、より具体的には、グラフィカルコンテンツを表示するためのコンピューティングシステム及びソフトウェアに関する。
【背景技術】
【０００３】
最近の殆どのコンピュータオペレーティングシステムは、フルスクリーンモード（若しくは、フルスクリーンエクスクルーシブモード）又はウィンドウモードでアプリケーションを表示する機能を含む。従来のいくつかのコンピュータモニタは、固定リフレッシュレートを有し、他のコンピュータモニタは、動的にリフレッシュすることができる。従来のコンピュータシステムでは、モニタに表示されるコンテンツは、先ず、グラフィックス処理ユニット（ＧＰＵ）等のレンダリングハードウェアによってレンダリング又は生成され、次に、通常、システムメモリ又はＧＰＵメモリ／キャッシュ内のアドレス位置である２つのバッファの一方に記憶される。従来の多くのシステムは、いわゆるダブルバッファリングスキームで２つのバッファを使用している。通常フロントバッファと呼ばれる１つのバッファは、現在モニタに表示されているレンダリングされたコンテンツを保持する。通常バックバッファと呼ばれる他のバッファは、次の適切な時間に表示されるのを待機しているレンダリングされたコンテンツを保持する。オペレーティングシステムがバックバッファのコンテンツを表示すべきと判断すると、フリップが実行され、表示がバックバッファのコンテンツに切り替わる。
【０００４】
ウィンドウモードでは、レンダリングプロセスは、開かれている各アプリケーションのコンテンツを、デスクトップ、タスクバー、及び、メニューの非占有部分と共にレンダリングし、その後、これらの個々のグラフィック部分を合成面に合成し、次いで、ディスプレイ上にフレームを次々と表示する。この後者のプロセスは、デスクトップコンポジション（合成）として知られており、通常デスクトップコンポジタと呼ばれるオペレーティングシステムのプロセスによって実行される。デスクトップコンポジタは、通常、モニタのリフレッシュレートに関連する固定間隔で起動し、複数のアプリケーションウィンドウを、スキャンされてモニタに表示される単一の画面に合成するシステムプロセスである。
【０００５】
従来のオペレーティングシステムは、異なるコンテンツを有する２つのレンダリングされたフレームの部分がディスプレイに表示される「ティアリング」として知られる現象を回避するために、垂直同期又はＶＳＹＮＣと呼ばれるプロセスをよく使用する。ＶＳＹＮＣが有効な場合、各バッファフリップは、各リフレッシュ後にのみ発生することができる。これにより、フレームのレンダリングレートは、モニタのリフレッシュレートで実質的に制限される。また、ＶＳＹＮＣは、デスクトップコンポジタが起動するときの固定間隔も設定する。
【０００６】
フルスクリーンエクスクルーシブモードで実行中の現在のアプリケーションは、アプリケーションがレンダリングを完了してから動的リフレッシュレートテクノロジを使用してモニタにコンテンツが表示されるまでのレイテンシが非常に短い（１ミリ秒未満）。これは、アプリケーションがバックバッファへのフリップを直接制御し、レンダリングが完了すると直ちにフリップを開始するためである。ただし、デスクトップコンポジションの余分なステップを有するウィンドウアプリケーションの場合、レイテンシが非常に長く、通常の６０Ｈｚディスプレイでは３３．３ミリ秒にも達する可能性がある。この遅延には、レンダリングハードウェアが前後のバッファをフリップできるまでに（１）デスクトップコンポジタスレッドが起動するのを待つのに費やされた時間、及び、（２）ＶＳＹＮＣ境界線（次の固定リフレッシュ）を待つのに費やされた時間が含まれる。これは、顕著な視覚的なスタッタリングをもたらす。このレイテンシを最小限に抑える又は少なくとも減らすことができれば、ウィンドウアプリケーションは、フルスクリーンエクスクルーシブモードアプリケーションのパフォーマンスに近いパフォーマンスを発揮し、動的リフレッシュレートモニタによって、低レイテンシでスタッタリングのないビジュアルエクスペリエンスを実現することができる。
【０００７】
Ｗｉｎｄｏｗｓ（登録商標）１０では、従来のフルスクリーンエクスクルーシブモードが有する低レイテンシという利点と、迅速なタスク切り替えの利便性とを有する、エミュレートされたフルスクリーンエクスクルーシブモードが導入されている。ただし、この実装は、全てのウィンドウアプリケーションを網羅しているわけではなく、ＧＰＵが２つの全く異なるサーフェスフォーマット（デスクトップコンポジタサーフェスとアプリケーションサーフェス）をシームレスに切り替えることができるかどうかに基づく制限も受ける。
【０００８】
別の従来技術では、ユーザは、レイテンシを少なくするために、フルスクリーンエクスクルーシブモードでの直接実行を選択することができる。しかし、特に、異なるモニタで実行されているアプリケーションの使用をユーザが切り替える可能性があるマルチディスプレイ構成では、アプリケーション間でフォーカスが切り替わるときのタスク切り替え時間が長いという欠点がある。もう１つの欠点は、アプリケーションによってはフルスクリーンエクスクルーシブモードで実行するオプションが全く存在しないことである。さらに、デスクトップコンポジタは、音量や明るさの調整等の便利なコンテンツを画面に重ねることができない。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、上述した短所の１つ以上の影響を克服又は軽減することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、ディスプレイデバイスに表示されるビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能なコンピューティングデバイスを含むシステムが提供される。ビデオコンテンツは、少なくとも１つのアプリケーションウィンドウを含む。デスクトップコンポジタは、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作することができる。高解像度タイマは、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作することができる。
【００１１】
本発明の別の態様によれば、ディスプレイデバイスに表示されるビデオコンテンツをレンダリングすることと、当該ディスプレイデバイスを周期的にリフレッシュすることと、を含む方法が提供される。ビデオコンテンツは、少なくとも１つのアプリケーションウィンドウを含む。デスクトップコンポジタは、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作する。高解像度タイマは、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作する。
【００１２】
本発明の別の態様によれば、ディスプレイデバイスを有し、ディスプレイデバイスに表示されるビデオコンテンツであって、少なくとも１つのアプリケーションウィンドウを含むビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能なコンピューティングシステムを含むシステムにおける方法であって、ディスプレイデバイスに表示されるビデオコンテンツをレンダリングすることと、当該ディスプレイデバイスを周期的にリフレッシュすることと、を含む。デスクトップコンポジタは、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作する。高解像度タイマは、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作する。
【００１３】
本発明の他の態様によれば、非一時的なコンピュータ可読記憶媒体は、方法を実行するためのコンピュータ可読命令を有する。この方法は、ディスプレイデバイスに表示されるビデオコンテンツをレンダリングすることと、当該ディスプレイデバイスを周期的にリフレッシュすることと、を含む。ビデオコンテンツは、少なくとも１つのアプリケーションウィンドウを含む。デスクトップコンポジタは、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作する。高解像度タイマは、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作する。
【００１４】
本発明の上述した利点及び他の利点は、以下の詳細な説明を読み、図面を参照することによって明らかになるであろう。
【図面の簡単な説明】
【００１５】
【図１】コンピュータとディスプレイ又はモニタとを含むコンピューティングシステムの例示的な実施形態を示す図である。
【図２】例示的なコンピューティングシステムのブロック図である。
【図３】図１と同様の図であるが、ディスプレイ上の単一のウィンドウモードのアプリケーションを示す図である。
【図４】例示的な従来のビデオレンダリング及びバッファフリップ方法を示すアクティビティ図である。
【図５】図４と同様のアクティビティ図であるが、簡略化された例示的な従来のビデオレンダリング及びバッファフリップ方法を示す図である。
【図６】図５と同様のアクティビティ図であるが、新たなビデオレンダリング及びバッファフリップ方法の例示的な実施形態を示す図である。
【図７】図５と同様のアクティビティ図であるが、別の簡略化された例示的な従来のビデオレンダリング及びバッファフリップ方法を示す図である。
【図８】図７と同様のアクティビティ図であるが、新たなビデオレンダリング及びバッファフリップ方法の別の例示的な実施形態を示す図である。
【図９】図７と同様のアクティビティ図であるが、簡略化された例示的な従来のビデオレンダリング及びバッファフリップ方法のさらなる態様を示す図である。
【図１０】図８と同様のアクティビティ図であるが、新たなビデオレンダリング及びバッファフリップ方法の例示的な実施形態のさらなる態様を示す図である。
【図１１】フリップレイテンシを短縮してビデオコンテンツをレンダリングする例示的な方法を示すフローチャートである。
【図１２】動的タイマ周波数が有効又は無効の場合の例示的なレンダリングを示すフローチャートである。
【発明を実施するための形態】
【００１６】
ウィンドウモードのアプリケーションにおいてビデオをレンダリングするように動作可能なコンピューティングシステムの様々な実施形態が開示される。１つのバリエーションでは、ディスプレイデバイスに表示されるビデオコンテンツをレンダリングし、当該ディスプレイデバイスを周期的にリフレッシュするように動作可能である。ビデオコンテンツは、少なくとも１つのアプリケーションウィンドウを含む。デスクトップコンポジタは、オペレーティングシステムのプロセスであってもよく、少なくとも１つのアプリケーションウィンドウを含む合成面であるビデオフレームを構成するためのコマンドを起動して実行し、ビデオフレームをディスプレイデバイスに配信するためにバッファフリップを開始するように動作可能である。高解像度タイマは、ディスプレイのリフレッシュの間にデスクトップコンポジタを起動させ、複数のインスタンスのコマンドを実行させるように動作可能である。従来のシステムでは、デスクトップコンポジタが、各リフレッシュサイクルの後に一度だけ起動して実行されるので、バッファフリップに遅延が生じる。以下に、さらなる詳細を説明する。
【００１７】
以下に説明する図面では、同一の要素が複数の図に現れる場合、参照番号が通常繰り返して用いられる。ここで、図面、特に図１を参照する。図１には、コンピュータ１５と、コンピュータ１５に接続されたディスプレイ又はモニタ２０と、を含むコンピューティングシステム１０の例示的な実施形態の図が示されている。他の実施形態では、コンピュータ１５とディスプレイ２０とは、単一のケースに統合されてもよい。ディスプレイ２０は、ＬＣＤ、ＯＬＥＤ、プラズ又は他の技術等の様々な技術のうち何れかであってもよい。ディスプレイ２０は、以下により詳細に説明するように、有利に動的リフレッシュを行うことができる。コンピュータシステム１０は、説明を簡単にするために示されていないマウス及びキーボード等の様々な入力デバイスを含むことができる。
【００１８】
コンピュータ１５は、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）、ＩＯ等の１つ以上のオペレーティングシステムを利用することができる。実際、本明細書に記載の技術は、多くの点でプラットフォームに依存しないことがある。この例示的な実施形態では、オペレーティングシステムソフトウェアは、デスクトップ２５と、開いている２つの例示的なウィンドウアプリケーション３０，３５と、いくつかのアイコン４５を含むいくつかのタスクバー４０と、を含む表面２２又はコンテンツをディスプレイ２０に表示する。アプリケーション３０，３５の数は、勿論、３つ以上であってもよく、実際には、１から不特定数の間であってもよい。以下により詳細に説明するように、デスクトップ２５と、開かれたウィンドウアプリケーション３０，３５との組み合わせは、動的にリフレッシュされる合成面２２を構成する。
【００１９】
コンピューティングシステム１０のさらなる詳細は、ブロック図である図２も参照することによって理解することができる。コンピューティングデバイス１０は、上述したディスプレイ２０と、１つ以上のプロセッサ５０と、ストレージデバイス５５と、媒体６０と、メモリ６５と、を含むことができる。プロセッサ５０は、ビデオ処理専用の集積回路、マイクロプロセッサ、グラフィックス処理装置（ＧＰＵ）、マイクロプロセッサとグラフィックスプロセッサ機能とを組み合わせたアクセラレーテッド処理装置（ＡＰＵ）、特定用途向け集積回路、又は、他のデバイスであってもよい。例示的なＡＰＵは、圧縮、解凍、事前若しくは事後に課された処理タスク、又は、その他のための固定機能コアを含むことができる。実際には、プロセッサ５０は、並列又は他の方法で動作するこのような集積回路の複数の例から構成されてもよい。ストレージデバイス５５は、コンピュータ可読媒体であり、任意の種類のハードディスク、光ストレージディスク、ソリッドステートストレージデバイス、ＲＯＭ、ＲＡＭ、又は、コンピュータ可読媒体を記憶するための実質的に他の任意のシステムとすることができる。媒体６０は、衛星チューナ、ケーブルセットトップボックス、光ディスクプレーヤ、インターネットストリーミング、リムーバブルストレージデバイス又はハードドライブによって供給される媒体を含むことができる。これらは、ビデオコンテンツをプロセッサ５０、したがって図１に示すディスプレイ２０に配信するために使用することの可能な媒体の種類のほんの数例を表しているに過ぎない。メモリ６５は、１つ以上の個別のメモリデバイス（例えば、ＤＲＡＭ、ＳＲＡＭ、ＶＲＡＭ若しくはフラッシュのチップ、ボード若しくはモジュール、若しくは、オンボードキャッシュ、又は、これらの組み合わせ等）とすることができる。メモリ６５は、様々なものの中でも、複数のバッファ（バッファ１、バッファ２、…、バッファｍ）に細分することができる。複数のバッファ（バッファ１、バッファ２、…、バッファｍ）は、以下により詳細に説明するように、ビデオフレームを表示するためのダブル、トリプル又は他のバッファリングに使用することができるアドレス指定可能なメモリ位置である。
【００２０】
また、コンピューティングデバイス１０は、オペレーティングシステム８０と、ビデオドライバソフトウェア８５と、デスクトップコンポジタ９０と、高解像度タイマ９２と、を含み、複数のアプリケーション（ＡＰＰ  １、ＡＰＰ  ２、…、ＡＰＰ  ｎと略され、ドライバ、ソフトウェアアプリケーション又は他の種類のアプリケーションとすることができる）を含むことができる。例えば、ＡＰＰ  １は、開かれると、図１に示すウィンドウアプリケーション３０に対応することができ、ＡＰＰ  ２は、開かれると、図１に示すウィンドウアプリケーション３５に対応することができる。オペレーティングシステム８０と、ビデオドライバソフトウェア８５と、高解像度タイマ９２と、デスクトップコンポジタ９０と、アプリケーションＡＰＰ  １、…、ＡＰＰ  ｎとは、ストレージデバイス５５に記憶されてもよい。上述したように、オペレーティングシステムソフトウェア８０は、多種多様な異なるオペレーティングシステムのうち何れかであってもよい。同様に、ビデオドライバソフトウェア８５は、様々な異なる種類のオペレーティングシステムプラットフォームに適していてもよい。
【００２１】
デスクトップコンポジタ９０（ＤＷＭプロセスとも呼ばれる）は、図示したようにオペレーティングシステム８０の一部であってよく、システムプロセスとして機能することができる。バッファ、バッファ１、バッファ２、…、バッファｍのうち１つ以上（ダブルバッファリングの場合には２つ）のバッファは、レンダリングされたアプリケーションコンテンツを記憶するために、アプリケーションＡＰＰ  １、ＡＰＰ  ２、…、ＡＰＰ  ｎの各々によって割り当てられてもよい。また、バッファ、バッファ１、バッファ２、…、バッファｍのうち１つ以上のバッファ（ダブルバッファリングの場合には２つ）は、合成されレンダリングされたコンテンツを記憶するために、デスクトップコンポジタ９０によって割り当てられてもよい。
【００２２】
以下により詳細に説明するように、高解像度タイマ９２は、例えば、図１に示すデスクトップ２５と開かれたアプリケーション３０，３５とから構成されたコンポジションであるデスクトップ面２２を生成する方法を、デスクトップのコンポジションの生成に必要な様々な動作と、ディスプレイ２０上のデスクトップ合成面２２の実際の表示との間のレイテンシを減らすという技術的目標に沿って、デスクトップコンポジタ９０が変更するように設計されている。高解像度タイマ９２は、ビデオドライバソフトウェア８５、オペレーティングシステムソフトウェア８０又はファームウェアとして、おそらくストレージデバイス５５又は他の場所に実装されてもよい。高解像度タイマ９２は、ファームウェアとして実装される場合、所望の機能を実施するために、ビデオドライバソフトウェア８５を介して有利に動作することとなる。
【００２３】
デスクトップコンポジタ９０を使用してビデオをレンダリングする例示的な従来の技術は、図２、図３及び図４を参照することによって理解することができる。図３は、デスクトップ２５及びウィンドウアプリケーション３５のみ（すなわち、デスクトップ２５及びウィンドウアプリケーション３５からなるデスクトップ面２２）を最初に表示するコンピューティングシステム１０の図である。図４は、図３に示すデスクトップ面２２の表示に関連する様々なハードウェア及びソフトウェアの動作を示すタイミング図のようなアクティビティ図である。図４は、上から下の順序で、ハードウェアキューストリーム１００と、デスクトップコンポジタ（ＤＷＭ）プロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、を示している。ハードウェアキューストリーム１００は、コンテンツのハードウェアレンダリングを表している。レンダリングされたコンテンツは、図３のウィンドウアプリケーション３５のレンダリングされたコンテンツ、及び、図３の合成面２２のレンダリングされたコンテンツ等のレンダリングされた合成コンテンツ等のアプリケーション生成コンテンツとすることができる。レンダリングは、実際にビデオフレームを書き込んでいるハードウェアによって実行される。これは、図２に示すプロセッサ５０とすることができ、又は、ＧＰＵがコンピューティングシステム１０に実装されている場合には個別のＧＰＵ、両者の協働又は他のデバイスとすることができる。ＤＷＭプロセスストリーム１０５は、図２に示され、以下にさらに詳細に説明する様々な機能を実行するオペレーティングシステムソフトウェア８０内のＤＷＭプロセス（すなわち、デスクトップコンポジタ９０）の周期的な起動を示している。アプリケーション生成コンテンツストリーム１１０は、特定のアプリケーションによって生成された新たなコンテンツ（例えば、コンテンツ（Ａ））を示している。これは、例えば、図３に示すウィンドウアプリケーション３５のために更新されたビデオ情報であってもよく、このビデオ情報は、ディスプレイ２０上でレンダリングされることになる。保留フリップストリーム１１５は、デスクトップコンポジタ９０が２つのＤＷＭ割り当てバッファ間（例えば、バッファ１からバッファ２へ（そして、最終的にディスプレイ２０への配信のために））でバッファフリップを開始するときを示しており、図示されている遅延１２５，１３０等のように、バッファ１とバッファ２との間のフリップにおいて遅延が存在する場所を示している。これらの遅延１２５，１３０は、以下により詳細に説明する。最後に、オンスクリーンストリーム１２０は、ディスプレイ２０に現在実際に何が表示されているのかを示している。例えば、最初に、バッファ１のコンテンツがディスプレイ２０に表示されており、バッファ１には、プロセッサ５０又は搭載されている任意のプロセッサによってレンダリングされ配信されたデスクトップ面２２が記憶されていてもよい。
【００２４】
さらに図４を参照すると、周期的リフレッシュライン（リフレッシュ１、リフレッシュ２、リフレッシュ３、リフレッシュ４、リフレッシュ５及びリフレッシュ６）が示されていることに留意されたい。これらは、ディスプレイ２０の個々のリフレッシュを表している。従来のシステムでは、図４に示すように、リフレッシュ１及びリフレッシュ２等は、ＶＳＹＮＣと呼ばれる従来の垂直同期コードによって設定された特定の固定時点で発生する。ＶＳＹＮＣが有効になっていると、フレームレンダリングレートは、モニタのリフレッシュレートで実質的に制限される。ＤＷＭプロセスストリーム１０５に示すように、ＤＷＭプロセスの起動／実行インスタンスは、各リフレッシュの直後（すなわち、リフレッシュ１、リフレッシュ２等の直後）に発生する。例えば、リフレッシュ１の後に、ＤＷＭプロセス起動／実行インスタンス１３５が発生する。この時点で、アプリケーションは、コンテンツ（Ａ）を生成しており、これは、図３に示すアプリケーション３５の単に更新されたフレームであってもよい。オンスクリーンストリーム１２０によって示されているように、図３に示すデスクトップ面２２であるバッファ１のコンテンツが表示されている。以下に説明する理由により、リフレッシュ１の後の保留フリップストリーム１１５に示すように、保留バッファフリップが存在しない。ＤＷＭプロセス起動／実行インスタンス１３５は、利用可能なレンダリングされたコンテンツを探し、レンダリングされたコンテンツが利用可能である場合には、利用可能なコンテンツのアドレス位置をビデオドライバ８５に知らせる（これは、バッファｍの場合がある）。その後、ＤＷＭプロセス起動／実行インスタンス１３５が閉じる。次に、ビデオドライバ８５が新たなバッファアドレス（例えば、バッファｍ）をプロセッサ５０（又は、搭載されている場合にはＧＰＵ）にプログラムし、プロセッサは、次のリフレッシュを開始する。レンダリングされたコンテンツが検出されない場合、ＤＷＭプロセス起動／実行インスタンス１３５は、閉じて次のリフレッシュを待つ。リフレッシュ２の後であってリフレッシュ３の前に、次のＤＷＭプロセス起動／実行インスタンス１４０が発生し、この期間中にアプリケーション生成コンテンツ（Ａ）が完了し、更新されたコンテンツ（Ａ）は、ハードウェアキューストリーム１００に示すようにレンダリングを完了する。このレンダリングされたコンテンツ（Ａ）は、アプリケーションによって割り当てられたバッファ（例えば、バッファｍ）に記憶される。しかし、ＤＷＭプロセス起動／実行インスタンス１４０は、コンテンツ（Ａ）のレンダリングが完了する前に既に開閉されているので、最初に遅延が生じる。遅延には、構成における遅延、ハードウェアの遅延及び保留フリップによる遅延という３つの潜在的な原因がある。これらの原因は相加的であり、以下にさらに説明する。例えば、ＤＷＭバッファ１からバッファ２へのフリップが発生するように、この時点で図２に示すデスクトップコンポジタ９０を使用してＤＷＭコンポジションを開始することができれば有利であろう。しかしながら、ＤＷＭプロセスインスタンス１４０が既に発生しており、次のインスタンスがリフレッシュ３まで発生しないので、合成プロセスが発生しない。したがって、オンスクリーンコンテンツは、依然としてバッファ１である。リフレッシュ３に続いて、次のＤＷＭプロセス起動／実行インスタンス１４５が発生する。この時点で、レンダリングされた（Ａ）コンテンツは、アプリケーションによって割り当てられたバッファであるバッファｍにロードされており、ハードウェアキューストリーム１００が示すように、レンダリングハードウェアは、全く新たなコンテンツ又は単に更新されたフレームであるアプリケーション生成コンテンツ（Ｂ）のレンダリングを開始している。しかし、ハードウェアキューストリーム１００内のレンダリングＡ点の終わりに発生した可能性があるＤＷＭコンポジションプロセスは、少なくともＤＷＭプロセスの起動／実行インスタンス１４５が発生するリフレッシュ３まで遅延されていることに留意されたい。リフレッシュ３の直後にハードウェア遅延がなかった場合、ハードウェアキュー１００に示すＤＷＭコンポジションプロセス１５０が直ちに起こり得る。しかし、図４は、コンテンツ（Ｂ）のレンダリングに関連する複雑さ又は他の様々な要因によって引き起こされる可能性がある典型的な例示的なハードウェア遅延を示している。したがって、この示された例では、ＤＷＭコンポジションプロセス１５０は、リフレッシュ４の少し前まで完了しない。ＤＷＭプロセス起動／実行インスタンス１４５は、アプリケーションコンテンツ（Ａ）の利用可能性を検出し、矢印１５２で表すように、ハードウェアキュー１００に反映されるようにＤＷＭコンポジションプロセス１５０を実行するようにレンダリングハードウェアを促す。ＤＷＭコンポジションプロセス１５０は、デスクトップ２５と、ウィンドウアプリケーション３５のコンテンツ（アプリケーションによって割り当てられたバッファであるバッファｍに現在記憶されている）と、を取得することと、これらの２つから合成されたデスクトップ面２２を合成することと、合成されたデスクトップ面２２を、他のＤＷＭ割り当てバッファであるバッファ２に記憶することと、を含む。ＤＷＭコンポジションプロセス１５０の終了時に、図３に示すデスクトップ面２２のコンテンツがバッファ２に書き込まれる。しかしながら、バッファ１からバッファ２へのフリップは、次のリフレッシュ（すなわち、リフレッシュ４）まで起こり得ない。このようにして、フリップ遅延１２５が生じる。リフレッシュ４より前では、画面上のコンテンツが依然としてバッファ１であるが、アプリケーションは、アプリケーション生成コンテンツ（Ｃ）を生成し、ハードウェアキュー１００は、アプリケーション生成コンテンツ（Ｃ）がレンダリングされたことを表していることに留意されたい。リフレッシュ４では、バッファ２へのフリップが起こり、これにより、オンスクリーンディスプレイストリーム１２０は、バッファのコンテンツがディスプレイ２０上に存在することを反映している。リフレッシュ２とリフレッシュ４との間のタイムラインを振り返ると、レイテンシには３つの可能な要素（すなわち、ハードウェアキュー１００におけるコンテンツ（Ａ）のレンダリングから次のリフレッシュであるリフレッシュ３までの間の合成の遅延、リフレッシュ３からＤＷＭコンポジションプロセス１５０の終了までの間の典型的なハードウェア遅延、ＤＷＭコンポジションプロセス１５０の終了から次のリフレッシュであるリフレッシュ４までの間のフリップ遅延１２５）が存在することが明らかである。
【００２５】
さらに図４を参照すると、リフレッシュ４からリフレッシュ５までの間では、アプリケーション生成コンテンツがコンテンツ（Ｃ）のままであり、ハードウェアキュー１００に示すように、（Ｃ）のレンダリングが続いている。リフレッシュ５の後に、ＤＷＭプロセス起動／実行インスタンス１５５は、アプリケーションコンテンツ（Ｂ）の利用可能性（すなわち、レンダリング（Ｂ）が完了したこと）を検出し、矢印１５２によって示すように、ハードウェアキュー１００に反映されるように次のＤＷＭコンポジションプロセス１６０を実行するようにレンダリングハードウェアに促す。次のＤＷＭコンポジションプロセス１６０の終わりに、合成されたコンテンツフレームがバッファ１に書き込まれる。しかしながら、バッファ２からバッファ１へのコンテンツのフリップは、ＶＳＹＮＣによって課されたリフレッシュポイントのために、次のリフレッシュポイントであるリフレッシュ６まで起こり得ない。したがって、上述したフリップ遅延１３０が生じる。
【００２６】
開示された実施形態は、部分的には、図４に示され説明されたいくつかの遅延の原因を排除することを目的としている。開示された実施形態による例示的な新たな技術を説明する前に、図３を再び使用して簡略化されたプロセスフローを最初に説明することが有用となり得る。ただし、図４と同様のアクティビティ図であるが、コンテンツ（Ａ）のレンダリングと、４回のリフレッシュサイクルのみと、が含まれるように簡略化された図５を合わせて用いる。従来のプロセスに関する説明に続いて、図６と、図２に示し簡単に上述した高解像度タイマ９２を利用して同じコンテンツをレンダリングする例示的な新たなプロセスと、に言及する。
【００２７】
図５は、図４と同様に、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、を示す図である。例示目的のために、フレームレンダリングレートは、ディスプレイのリフレッシュレートより速いと想定している。同様に、例示目的のために、オンスクリーンディスプレイストリーム１２０は、最初に、バッファ１のコンテンツ（単に、現在のデスクトップ面２２が図３のディスプレイ２０上にあるものであれば何でもよい）を反映すると想定している。さらに、リフレッシュ１において、図２に示すオペレーティングシステム８０を介してアプリケーション生成コンテンツ（Ａ）が生成を開始し、ＤＷＭプロセス起動／実行インスタンス１７０が発生すると想定している。また、リフレッシュ１では、ハードウェアキューストリーム１００に示すように、レンダリングハードウェアは、コンテンツ（Ａ）のレンダリングを開始する。ハードウェアキューストリーム１００に示すように、コンテンツ（Ａ）のレンダリング（レンダリング（Ａ））は、リフレッシュ１とリフレッシュ２との間で完了する。しかしながら、リフレッシュ２が固定時点で発生するので、ＤＷＭコンポジションプロセス１５０は、リフレッシュ２まで待たなければならず、合成における遅延が生じる。次に、リフレッシュ２では、次のＤＷＭプロセス起動／実行インスタンス１７５が発生する。ＤＷＭプロセス起動／実行インスタンス１７５は、利用可能なレンダリングされたコンテンツ（Ａ）を検出し、矢印１７７で反映されているようにＤＷＭコンポジションプロセス１５０を促す。ＤＷＭコンポジションプロセス１５０が進行し、その結果、レンダリングされた合成デスクトップ２２がバッファ２に記憶されてもよい。ＤＷＭコンポジションプロセス１５０の終わりには、バッファ１からバッファ２へのフリップが起こり得ないが、リフレッシュ３まで待たなければならないので、フリップ遅延１８０が生じる。最後に、リフレッシュ３において、ＤＷＭプロセス１８５の次のインスタンスが発生し、オンスクリーンディスプレイストリーム１２０に示すように、バッファ１からバッファ２へのフリップが発生する。したがって、レンダリング（Ａ）の開始から合成デスクトップ面２２としての（Ａ）の表示に進むためには、２つのフレーム（すなわち、リフレッシュ１からリフレッシュ２まで、及び、リフレッシュ２からリフレッシュ３まで）が必要である。当然のことながら、遅延は、合成の遅延とフリップ遅延１８０との組み合わせによるものである。
【００２８】
例示的な新たな技術は、図２、図３及び図６を参照することによって理解することができる。図６は、図５と同様に、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、を示す図である。図５に示す想定と同様に、４つのリフレッシュサイクル（リフレッシュ１、リフレッシュ２、リフレッシュ３及びリフレッシュ４）のみが示されており、最初に、バッファ１のコンテンツが図３に示すディスプレイ２０に示されていると想定している。この比較においても、フレームレンダリングレートは、ディスプレイのリフレッシュレートよりも速い。リフレッシュ１の後に、ハードウェアキューストリーム１００に示すように、アプリケーション生成コンテンツ（Ａ）がレンダリングハードウェアに配信され、コンテンツ（Ａ）のレンダリング（レンダリング（Ａ））が開始する。図５に示す従来技術のようにリフレッシュ毎にＤＷＭプロセス起動／実行単一インスタンスを使用する代わりに、ＤＷＭプロセスストリーム１０５では、複数のＤＷＭプロセス起動／実行インスタンスが存在することを反映しており、そのうち２つが１９０，１９５とラベル付けされている。複数のＤＷＭプロセス起動／実行インスタンス１９０，１９５は、図２に示す高解像度タイマ９２によって制御される。高解像度タイマ９２を用いて、ＤＷＭコンポジションプロセスが、ディスプレイ２０に通常課されるＶＳＹＮＣタイミングから切り離される。後述するように、高解像度タイマ９２は、レイテンシに影響される様々なタイプのコンテンツの検出に応じて自動的に有効にすることができ、又は、ユーザ入力によって手動で有効にすることができる。さらに、リフレッシュ毎のＤＷＭプロセス起動／実行インスタンス１９０，１９５の数は、ユーザ選択、オペレーティングシステム選択又はこれら以外で設定されてもよい。実際、高解像度タイマ周波数（すなわち、高解像度タイマ９２が、リフレッシュ間にＤＷＭプロセスの起動／実行インスタンスを引き起こす周波数）は、高解像度タイマ９２の実行に関連する計算オーバーヘッドを管理するために、コンテンツに基づいて動的に変更することができる。高解像度タイマ９２は、オペレーティングシステムソフトウェア８０、ビデオドライバソフトウェア８５又は他の場所に実装することができる。高解像度タイマ９２は、ビデオドライバソフトウェア８５に対して、現在の表示（すなわち、例えばバッファ１又はバッファ２のうち何れのバッファが現在表示されているのか）をチェックするように周期的に促すことによって、各ＤＷＭプロセスインスタンス１９０，１９５を周期的に引き起こす。次に、ビデオドライバソフトウェア８５は、要求されたチェックを実行し、チェックの結果（すなわち、バッファ１又はバッファ２のうち何れのバッファが現在表示されているか）をオペレーティングシステム８０に報告する。この報告は、次のＤＷＭ起動／実行インスタンスを開始するようにオペレーティングシステム８０に促す。ＤＷＭプロセス起動／実行インスタンス（例えば、インスタンス１９０，１９５）毎に、ＤＷＭプロセスは、アプリケーションによって割り当てられたバッファ（例えば、バッファｍ）のコンテンツをポーリングし、レンダリングハードウェアがＤＷＭコンポジションプロセスを開始すべきかどうかを決定する。例えば、（Ａ）のレンダリング（レンダリング（Ａ））が完了していないときにＤＷＭプロセス起動／実行インスタンス１９０が発生した場合、その時点でのＤＷＭコンポジションは適切ではない。しかし、ＤＷＭプロセス起動／実行インスタンス１９５では、（Ａ）のレンダリング（レンダリング（Ａ））が完了し、そのレンダリングされたコンテンツ（Ａ）が、アプリケーションによって割り当てられたバッファであるバッファｍに記憶される。その時点で、ＤＷＭプロセス起動／実行インスタンス１９５は、矢印２０３で示唆され、ハードウェアキューストリーム１００に反映されているように、ＤＷＭコンポジションプロセス２００を開始するようにレンダリングハードウェアに促す。これは、本明細書に開示された従来技術よりも早いリフレッシュ２の前に行われることに留意されたい。ＤＷＭコンポジションプロセス２００の間、デスクトップコンポジタは、アプリケーションによって割り当てられたバッファであるバッファｍと、デスクトップ面２２の他の部分のコンテンツと、を含む合成面２２を構成し、その合成面２２をバッファ２に記憶する。ここで、バッファ１からバッファ２へのフリップは、保留フリップストリーム１１５で示されるように保留されており、リフレッシュ２まで起こらないので、フリップ遅延２０５をもたらす。しかし、リフレッシュ１とリフレッシュ２との間には、複数のＤＷＭプロセス起動／実行インスタンス１９０，１９５等が存在するので、ＤＷＭコンポジションステップ２００は、図５に示す従来の技術よりもはるかに早く実行され得る。その結果、比較的短いフリップ遅延２０５と、最終的なバッファ２へのフリップと、がリフレッシュ２で発生する可能性がある。したがって、バッファ２にフリップしてバッファ２のコンテンツをスクリーンに表示するためのレンダリング（Ａ）の始めからＤＷＭコンポジション２００までのプロセスは、図５に示す従来技術における２つのフレームとは対照的に、単一のフレームで起こり得る。なお、開示された実施形態と共にＦｒｅｅＳｙｎｃが使用され得ることに留意されたい。
【００２９】
フレームをレンダリングする従来の技術と代替の新たな例示的な技術との間の同様の比較であるが、毎秒毎のレンダリングフレーム速度がモニタのリフレッシュ速度より低い場合については、図２、図３、図７及び図８を参照することによって理解することができる。図７は、図５と同様のアクティビティ図であり、図８は、図６と同様のアクティビティ図である。ここで、図７は、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、４つのリフレッシュサイクル（リフレッシュ１、リフレッシュ２、リフレッシュ３、リフレッシュ４）と、を示している。やはり、ディスプレイ２０上のデスクトップ面２２は、最初に、図２に示すバッファ１のコンテンツであると想定する。リフレッシュ１の直後に、アプリケーション生成コンテンツストリーム１１０及びハードウェアキューストリーム１００は、コンテンツ（Ａ）がレンダリングハードウェアに配信され、（Ａ）のレンダリング（レンダリング（Ａ））が始まることを反映する。ＤＷＭプロセス起動／実行インスタンス２０５が発生する。リフレッシュ２では、次のＤＷＭプロセス起動／実行インスタンス２１０が発生するが、レンダリングフレームレートがリフレッシュレート（すなわち、リフレッシュ１からリフレッシュ２までの期間）より遅いので、コンテンツ（Ａ）のレンダリング（レンダリング（Ａ））は、ハードウェアキューストリーム１００に反映されているように、未完了である。レンダリング（Ａ）は、リフレッシュ２の後であってリフレッシュ３の前に完了するが、その完了は、ＤＷＭプロセス起動／実行インスタンス２１０の終了後に行われる。したがって、レンダリングされたコンテンツであるレンダリング（Ａ）がＤＷＭコンポジション又はその他に継続して移動することは、少なくともリフレッシュ３まで遅延される。リフレッシュ３では、次のＤＷＭプロセス起動／実行インスタンス２１５が発生し、レンダリング（Ａ）プロセスからのレンダリングされたコンテンツが検出され、レンダリングハードウェアは、矢印２２３で示唆されるように、ＤＷＭコンポジションプロセス２２０を開始するように促される。ＤＷＭコンポジションプロセス２２０の間、レンダリングされたコンテンツ（Ａ）と、デスクトップ面の残りの部分と、から構成された合成デスクトップ２２がバッファ２に書き込まれる。ＤＷＭコンポジションステップ２２０の完了に続いて、合成デスクトップ面２２をディスプレイ２０に実際に配信するためのバッファ２へのフリップがリフレッシュ４まで待たなければならず、大幅なフリップ遅延２２５を生じさせる。最後にリフレッシュ４において、バッファ２へのフリップは、オンスクリーンストリーム１２０上に表されるように、更新されたデスクトップ面２２（更新されたコンテンツ（Ａ）を含む）をモニタ２０に配信するために発生し得る。なお、レンダリング（Ａ）完了に引き続く、ハードウェアキュー１００においてレンダリング（Ａ）の完了を追跡することに関連する総遅延は、１フレームを超えており、２フレームにもなり得ることに留意されたい。さらに、デスクトップ面２２の一部として、３つのフルフレーム（すなわち、リフレッシュ１からリフレッシュ４まで）が、レンダリング（Ａ）の開始と（Ａ）の実際の表示との間に発生している。
【００３０】
対照的に、図８に示すように、高解像度タイマ９２（図２参照）を利用して複数のＤＷＭプロセス起動／実行インスタンスを生成する新たな例示的な技術が示されている。図８は、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、を示している。ただし、図３に示すモニタ２０に対する動的リフレッシュレートの利用は、リフレッシュ（リフレッシュ１、リフレッシュ２、リフレッシュ３及びリフレッシュ４）が、一定の間隔ではなくＤＷＭコンポジションプロセス時の動的リフレッシュレートによって決まる間隔で発生するのを意味することに留意されたい。繰り返すが、最初にバッファ１のコンテンツが表示されている。リフレッシュ１の後に、アプリケーション生成コンテンツ（Ａ）が、図２に示すオペレーティングシステム８０によって呼び出され、これにより、ハードウェアキュー１００は、レンダリング（Ａ）も開始することを示している。図２に示す高解像度タイマ９２は、複数のＤＷＭプロセス起動／実行インスタンスを生成し、そのうち２つのインスタンスが２３０，２３５とラベル付けされている。従来の環境では、垂直の破線で示されている従来のＶＳＹＮＣリフレッシュポイントが発生する場所でリフレッシュ２が発生することに留意されたい。しかし、動的リフレッシュが実装されているので、リフレッシュ２が後で発生し、これにより、リフレッシュ１とリフレッシュ２との間のリフレッシュ速度は、ＶＳＹＮＣで提供されるよりも遅くなる。このようにして、いくつかの数のＤＷＭプロセス起動／実行インスタンス（この場合、ＤＷＭプロセス起動／実行インスタンス２３５）の後に（Ａ）のレンダリング（レンダリング（Ａ））が完了し、このことは、ＤＷＭプロセス起動／実行インスタンス２３５によって検出される。ＤＷＭプロセス起動／実行インスタンス２３５は、矢印２４３によって示唆され、ハードウェアキューストリーム１００に反映されているように、ＤＷＭコンポジションプロセス２４０を開始するようにレンダリングハードウェアに信号を送る。ＤＷＭコンポジションプロセス２４０の間、レンダリングハードウェアは、レンダリングされたコンテンツ（Ａ）とデスクトップ面２２の他の部分（図３参照）とを含む合成面をレンダリングし、その合成デスクトップ面２２をバッファ２に書き込む。ＤＷＭコンポジションプロセス２４０の終わりに、ユーザ設定可能で潜在的に非常に短いフリップ遅延２４５が発生した直後に、リフレッシュ２及びバッファ１からバッファ２へのフリップが続いてもよい。フリップ遅延２４５の長さは、高解像度タイマ９２によって設定されてもよく、様々な値をとってもよい。例示的な実施形態では、０．５から２０ミリ秒を含む。このように、合成表面２２（コンテンツ（Ａ）を含む）を配信するために３つのフルフレームを必要とする代わりに、動的リフレッシュ及びより頻繁なＤＷＭプロセス起動／実行インスタンスステップ２３０，２３５等を利用する新たな技術によって、コンテンツ（Ａ）を、動的にリフレッシュされた単一のフレームに配信することができる。高解像度タイマ９２の周波数は、静的であってもよいし動的であってもよいことに留意されたい。例えば、複数のＤＷＭプロセスの起動／実行インスタンスの実行に関連する計算オーバーヘッドを減らすために、高解像度タイマの周波数を、コンテンツに基づいて動的に調整することができる。例えば、ゲームアプリケーションは、高いフレームレートを生成するかもしれない。このような高フレームレートコンテンツのレンダリング中に、高解像度タイマ９２の周波数は、ある周波数ω１に動的に設定されてもよい。しかしながら、ゲームアプリケーションのフレームレートが低い場合がある。一例では、アプリケーションの開始後にイントロスクリーンが表示される最初の数秒が存在し得る。このような低フレームレート演算密度（computational intensity）の期間中、高解像度タイマ９２は、ω２＜ω１である別の周波数ω２に変更することができる。この動的な周波数の切り替えは、毎秒毎に複数回、コンテンツに応じて複数の周波数で発生する可能性がある。
【００３１】
本明細書に記載された従来のレンダリング技術に対する、開示された例示的な実施形態に関連する他の利点は、図９及び図１０を参照することによって理解することができる。この例示的な実施形態では、改良されたレンダリングプロセスは、フリップが発生し、したがって、２つのバッファのうち１つが新たなコンテンツのレンダリングを開始するために解放されたことを、図２に示すデスクトップコンポジタ９０に知らせる時点が早められる。図９は、図５と同様のアクティビティ図であり、従来のレンダリングプロセスを示す図である。図９は、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、４つのリフレッシュサイクル（リフレッシュ１、リフレッシュ２、リフレッシュ３及びリフレッシュ４）と、を示している。リフレッシュ１において、第１ＤＷＭプロセス起動／実行インスタンス２５０が発生し、ハードウェアキューストリーム１００に反映されているように、オペレーティングシステムによってアプリケーション生成コンテンツ（Ａ）がレンダリングハードウェアに送信され、更新コンテンツ（Ａ）を、アプリケーションによって割り当てられたバッファｍにレンダリングするプロセスが始まる。この時点で、ディスプレイ２０は、デスクトップコンポジタ９０によって割り当てられたバッファの１つであるバッファ１のコンテンツを示していると想定している。バッファｍへのコンテンツ（Ａ）のレンダリングは、リフレッシュ２の前に完了する。バッファｍへのコンテンツ（Ａ）のレンダリングの終わりに、アプリケーション生成コンテンツ（Ｂ）は、別のアプリケーションによって割り当てられたバッファ（バッファｎ）へのレンダリングが予定されている。しかしながら、これは、以下でより詳細に説明するように、後になるまで起こり得ない。次に、リフレッシュ２において、次のＤＷＭプロセス起動／実行インスタンス２５５が発生する。ＤＷＭプロセス起動／実行インスタンス２５５は、バッファｍ内の利用可能なレンダリングされたコンテンツ（Ａ）を検出し、矢印２６２で示唆され、ハードウェアキューストリーム１００に反映されるように、ＤＷＭコンポジションプロセス２６０を開始するようにレンダリングハードウェアに促す。ＤＷＭコンポジションプロセス２６０は、レンダリングされたコンテンツ（Ａ）を含む合成面２２（図３参照）を生成する。ＤＷＭコンポジションプロセス２６０の終了に続いて、バッファ１からバッファ２へのフリップは、次のリフレッシュであるリフレッシュ３を待つ必要があり、これにより、保留フリップストリーム１１５に示されるフリップ遅延２６５を生じさせる。リフレッシュ３において、バッファ２へのフリップが発生し、これにより、オンスクリーンディスプレイストリーム１２０に反映されるように、バッファ２のコンテンツ（すなわち、レンダリング（Ａ）の生成物）が図３に示すディスプレイ２０に配信される。従来技術では、この時点で、ＤＷＭプロセスインスタンス２７０は、表示されている現在のバッファ（この場合、バッファ２）を報告する。オペレーティングシステム８０がこの現在のバッファ表示についての報告を受信し、他のバッファであるバッファ１が、この場合にはコンテンツ（Ｂ）を含む次の合成コンテンツをレンダリングするために利用可能であることをオペレーティングシステム８０に認識させるのは、この時点のみである。
【００３２】
新たなプロセスの例示的な実施形態が図１０に示され、図２及び図３と関連して説明される。図９と同様に、図１０は、ハードウェアキューストリーム１００と、ＤＷＭプロセスストリーム１０５と、アプリケーション生成コンテンツストリーム１１０と、保留フリップストリーム１１５と、オンスクリーンディスプレイストリーム１２０と、に４つのリフレッシュサイクル（リフレッシュ１、リフレッシュ２、リフレッシュ３及びリフレッシュ４）と、を示している。リフレッシュ１において、バッファ１のコンテンツが表示され、アプリケーション生成コンテンツ（Ａ）がレンダリングハードウェアに送信され、ハードウェアキューストリーム１００を介して反映されるように、アプリケーションによって割り当てられたバッファｍへのレンダリング（Ａ）のレンダリングプロセスが開始される。図２に示す高解像度タイマ９２を介して、複数の周期的なＤＷＭプロセス起動／実行インスタンス２７５，２８０等が、リフレッシュ１の後であってリフレッシュ２の前に発生する。上述したように、高解像度タイマ９２は、現在の表示（すなわち、何れのＤＷＭ割り当てバッファ（例えば、バッファ１又はバッファ２）が現在表示されているか）をチェックするように、ビデオドライバソフトウェア８５に周期的に促す。次に、ビデオドライバソフトウェア８５は、要求されたチェックを実行し、その結果（すなわち、バッファ１又はバッファ２の何れが現在表示されているかをチェックした結果）をオペレーティングシステム８０に報告する。この報告は、次のＤＷＭ起動／実行インスタンスを開始するようにオペレーティングシステム８０に促す。バッファｍへのレンダリング（Ａ）プロセスの終了は、次に利用可能なＤＷＭプロセス起動／実行インスタンス（この場合、インスタンス２８０）によって検出される。ＤＷＭプロセス起動／実行インスタンス２８０は、矢印２８７で示唆されるように、ＤＷＭコンポジションプロセス２８５を開始するようにレンダリングハードウェアに信号を送る。ＤＷＭコンポジションプロセスの間に、バッファｍのコンテンツは、デスクトップ面２２の残りの部分（図３参照）と合成され、バッファ２に書き込まれる。また、この時点において、ビデオドライバソフトウェア８５は、高解像度タイマ９２によって促されるように、現在表示されているバッファが依然としてバッファ１であることをオペレーティングシステムソフトウェア８０に報告する。したがって、各ＤＷＭプロセス起動／実行インスタンス２７５，２８０等の始めに、報告が（現在のＤＷＭプロセス起動／実行インスタンスによって）図２に示すオペレーティングシステムソフトウェア８０のデスクトップコンポジタ９０に送信され、現在表示されているバッファがバッファ１であり、ＤＷＭコンポジションステップ２８５の後に現在表示されているバッファの報告を含むことが報告される。この同じ報告は、リフレッシュ２の前にＤＷＭ起動／実行の各インスタンス２７５，２８０等で繰り返される。リフレッシュ２では、バッファ１からバッファ２へのフリップが行われ、モニタ２０に配信される。リフレッシュ２の直後に発生する次のＤＷＭプロセス起動／実行インスタンス２９０では、現在表示されているバッファがバッファ２であり、したがって、バッファ１が新たな合成に利用可能であることを示す報告が行われてもよい。この例示的な技術における次の利用可能なバッファの報告は、リフレッシュ３で発生する、図９に示す現在表示されているバッファの報告よりもはるかに早く行われることに留意されたい。これも、ハードウェアの遅延によるレイテンシの短縮に役立つ。
【００３３】
コンピューティングデバイス１０の動作のための例示的な処理フローは、図２、図３、図８及び図１１を参照することによって理解することができる。図１１は例示的な処理フローのフローチャートである。ステップ３００で開始した後、コンピューティングデバイス１０は、ステップ３０５でフルスクリーンエクスクルーシブモードが有効になっているかどうかを検出する。フルスクリーンエクスクルーシブモードが検出された場合、プロセスはステップ３１０に進み、高解像度タイマを無効にしてフルスクリーンエクスクルーシブモードでレンダリングする。プロセスはステップ３０５に戻る。しかし、ステップ３０５でフルスクリーンエクスクルーシブモードが検出されない場合、プロセスはステップ３２０に進み、レイテンシの影響を受けやすいコンテンツを検出する。これは、様々な方法で実行することができる。例示的な実施形態では、図２に示すプロセッサ５０は、ビデオドライバソフトウェア８５と連携して、フルスクリーンモード又はウィンドウモードの何れかにおいて、ゲーム等のアプリケーション３５の起動を検出する。これは、ウィンドウサイズ並びに前景及び背景の文字が検出され、ウィンドウがフルスクリーンであるかどうかを判別するためにデスクトップサイズが比較されるランタイム検出を必要とすることができる。この検出ステップは、レイテンシの影響を受けやすいアプリケーションが実行されている状況で高解像度タイマ９２のみを有効にし、高解像度タイマ９２及びより頻繁なデスクトップＤＷＭプロセスの起動及び有効化ステップに関連する余分なオーバーヘッドを回避するのに有利である。ステップ３２３でレイテンシの影響を受けやすいコンテンツが検出されない場合、プロセスはステップ３２５に進み、高解像度タイマ９２を無効にしてウィンドウモードのレンダリングを行う。このウィンドウモードは、アプリケーションがフルスクリーンでレンダリングされるモードを含むことができる。次に、ステップ３３０において、プロセスはステップ３０５に戻る。しかし、ステップ３２３でレイテンシの影響を受けやすいコンテンツが検出された場合、プロセスはステップ３４０に進み、高解像度タイマ９２を有効にしてコンテンツをレンダリングする。このように、例えば図８に示すように、これは、高解像度タイマ９２が複数のＤＷＭプロセス起動／実行インスタンス２３０，２３５等を引き起こすことを伴う可能性がある。次に、ステップ３４５において、ＤＷＭコンポジションプロセスが実行される。これは、例えば、図８に示したＤＷＭコンポジション処理２４０に対応する。次に、ステップ３５０において、動的リフレッシュ及びバッファフリップが実行される。これは、例えば、動的リフレッシュ、リフレッシュ２、及び、バッファ１からバッファ２へのバッファフリップに対応する。次に、ステップ３５５において、図２に示す高解像度タイマ９２は、図２に示すデスクトップコンポジタ９０に対して、２つのバッファのうち１つが現在利用可能であることを報告する。これは、例えば図１０のリフレッシュ２に示す現在表示されているバッファのレポートに対応する。この時点で、プロセスはステップ３３０に進み、最終的にステップ３０５に戻ることができる。勿論、このループは毎秒何度も発生する可能性がある。
【００３４】
図１１におけるステップ３４０のいくつかのさらなる例示的な詳細は、フローチャートである図１２を参照することによって理解することができる。図８の説明において上述したように、高解像度タイマ９２の周波数は、静的であってもよいし動的であってもよい。したがって、ステップ３４０において、ステップ３６０にて高解像度タイマの動的周波数が有効にされていない場合、ステップ３６５において、コンテンツは、高解像度タイマ９２を用いて静的周波数でレンダリングされ、その後、ステップ３６０にループバックする。高解像度タイマ周波数は、ユーザ入力によって、又は、レイテンシの影響を受けやすいコンテンツが検出された場合に、自動的に設定されてもよい。しかし、ステップ３６０において、高解像度タイマの動的周波数が有効にされている場合、ステップ３７０において、コンテンツは、コンテンツに基づく動的周波数で高解像度タイマ９２を用いてレンダリングされ、その後、ステップ３６０にループバックする。必要に応じて、コンテンツの計算集約的な側面に基づいて、周波数を毎秒複数回上下に調整してもよい。
【００３５】
本発明は、様々な変形形態及び代替形態を受け入れることができるが、具体的な実施形態が例として図面に示されており、本明細書で詳細に説明されている。しかしながら、本発明は、開示された特定の形態に限定されることを意図していないことを理解すべきである。むしろ、本発明は、添付の特許請求の範囲によって定義される本発明の趣旨及び範囲に含まれる全ての変更形態、等価物及び代替形態を網羅するものである。
【図１】
2020502553.tif 000003
【図２】
2020502553.tif 000004
【図３】
2020502553.tif 000005
【図４】
2020502553.tif 000006
【図５】
2020502553.tif 000007
【図６】
2020502553.tif 000008
【図７】
2020502553.tif 000009
【図８】
2020502553.tif 000010
【図９】
2020502553.tif 000011
【図１０】
2020502553.tif 000012
【図１１】
2020502553.tif 000013
【図１２】
2020502553.tif 000014
【国際調査報告】
2020502553.tif 000015
2020502553.tif 000016
2020502553.tif 000017
2020502553.tif 000018
2020502553.tif 000019
2020502553.tif 000020
2020502553.tif 000021
2020502553.tif 000022
2020502553.tif 000023
2020502553.tif 000024
2020502553.tif 000025
2020502553.tif 000026
2020502553.tif 000027