読者です 読者をやめる 読者になる 読者になる

Perforator による Desktop Window Manager (DWM) のプロファイリング (2)

DirectX Vista

さて,DWM 使用時には,各ウィンドウのクライアント領域への描画は DWM の管理するサーフェイスにリダイレクトされます*1.このことは,DWM 有効下の環境でウィンドウを増やしたり,リサイズしたりしたときの DWM の Estimated video memory usage を観察することで確認できます.
Explorer を次のように (外枠が) 512×512 になるようリサイズします.

512×512×32bppで,このウィンドウを表示するために消費されるビデオメモリは,1 MB 前後になるものと予想されます.Explorer のウィンドウ数を 1,2,4,8,32 と増やしながら,DWM の Estimated video memory usage を調べてみました.
テスト環境は,Windows Vista RC1 英語版 (build 5600) です.

Explorer枚数 Estimated video memory (MB) 増分 (MB) 1枚あたり (MB)
0 38.10
1 39.03 0.94 0.94
2 39.98 1.88 0.94
4 41.87 3.78 0.94
16 53.20 15.10 0.94
32 68.32 30.22 0.94

このように,実際 Estimated video memory usage の増分が Explorer の枚数に比例し,その値は 1 枚あたり約 1 MB と,予想通りの値であることが分かりました.
また,ウィンドウのサイズを変更することでも Estimated video memory usage の値は変化します.以下のように,各 Explorer のウィンドウサイズを変化させてみました.


その結果,Estimated video memory usage は 68.3 MB から 42.5 MB に減少し,1 枚あたりの消費ビデオメモリ量も 0.94 MB から 0.14 MB に変化しました.



まあこうやって数字を見てみると,快適さのためにどれぐらいリソースが必要になるかというのが実感できておもしろいかと思います.
当たり前の話ですが,大きなウィンドウの方が使用するビデオメモリ量は多いですし,小さなウィンドウでも枚数が増えればトータルでのビデオメモリ量は大きくなっていました.
また,DirectX プログラミングの経験がある方には何となく実装の予想が付くでしょうが,マルチデバイス環境ではデバイスの数だけ使用ビデオメモリ量が増えることにも注意が必要かもしれません.
まあ,数字が見えるようになったらなったでミスリードされる可能性もあるわけで,一概に見えることがいいこととは限らないという現実もありますが.

*1:[http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx:title=Redirecting GDI, DirectX, and WPF applications]