Typical Time Scale

一度 DirectX を利用したアプリケーションについて典型的なタイムスケールについて考えた方がいいかもしれませんね.以下 Preliminary なものですがざっと列挙してみました.あんまりまじめに裏付けをとっていないので,二次利用するときはちゃんと資料をあたってください.いくつかリファレンスは付けておきました.

Windows タスクスイッチ
割り込みによるものは typical に 10 msec, 15 msec, 55 msec, 1 msec などなど.Windows のタスクスイッチはタイマー割り込みを利用している*1.タイマー割り込みによるタスクスイッチの最大レイテンシは timeBeginPeriod で変化する.timeBeginPeriod が設定する割り込み周期はシステムグローバルなリソースで,別アプリケーションが変更しうる.「Windows Media Player 起動していたら FPS が上がった例*2」,「D3DPRESENT_INTERVAL_DEFAULT はタイマ割り込み間隔をデフォルトのままにするのに対し D3DPRESENT_INTERVAL_ONE はタイマ割り込み間隔を変える*3」など参照のこと.
描画(1) Present() からビデオ信号まで
フルスクリーンでデフォルト設定だと最大 3 フレーム分,つまり 3/fps sec ぐらいは遅延するかも(id:NyaRuRu:20050124#p2).ということは Upper limit 50 msec @ 60FPS ぐらい?
描画(2) ビデオ信号から画面への反映完了まで
液晶だと公称値で数 msec から 16 msec, 25 msec, 50 msec などなど.とは言ってもこれ「変化を始めてからの時間」のことだろうから,いったんバッファにためて調整を行うような仕組み(3次元N/Rのような)があると絶対的なレイテンシはもっと大きいかも.CRT にしても画面全体が同時に描き換わるわけではないため,左上と右下の画素では 60FPS で 15 msec 以上時間のずれが発生する*4
サウンド
数 msec 〜 100 msec 以上*5.PCI にささっているデバイスと USB と IEEE 1394 での違いもチェック.

*1:http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx

*2:[]http://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=40&vew=472[]

*3:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/d3d/constants/D3DPRESENT.asp

*4:http://www.radiumsoftware.com/0308.html#030825

*5:http://pc.watch.impress.co.jp/docs/2004/0204/nishikawa.htm