這兩天在論壇裡看到有人在問WinCE6.0下繪圖較慢的問題。現象很奇怪,同一個程式在WinCE5.0下運作得很好,但到某些WinCE6.0的平台上卻很慢,而在另外一些6.0的平台上似乎又沒有問題。看起來,應該跟硬體平台或者系統有關系。在我們的平台上也存在類似的問題,界面有點慢。這是為什麼呢?又應該如何解決?是24位色導緻系統變慢?使用DirectDraw能否有效的提高速度?為了尋找答案,今天利用TCPMP在我們的平台上做了一個詳細的檢測,希望能從中找到一些線索。
測試的方法如下,采用同一個MP4檔案,分别在16位色和24位的系統上進行BenchMark,ZOOM都標明為100%,渲染方式分别為GDI、Direct、DDraw-RGB和DDraw-YUY2。
先看看16位色下的四組資料。
16位色GDI渲染時的報告結果:
1 Average Speed 268.84%
2 Video Frames 1933
3 Audio Samples 3504097
4 Amount of Data 11401 KB
5
6 Bench. Time 0:28.760
7 Bench. Frame Rate 67.21
8 Bench. Sample Rate 121835
9 Bench. Data Rate 3.2 Mbit/s
10
11 Original Time 1:17.319
12 Original Frame Rate 25.00
13 Original Sample Rate 44100
14 Original Data Rate 1.2 Mbit/s
15
16 URL \NAND\123.avi
17 Size 11675460
18 Platform PLATFORM_TYPE
19 OS Version 6.00
20 OEM Info PLATFORM_OEM
21 Clock speed 480 Mhz
22 Video output GDI 解碼 800x480 16bits Lookup
23 Video zoom 320x240 -> 320x240
24 Audio output Wave Output 44100Hz 16Bits 2Ch.
16位色Direct渲染時的報告結果:
1 Average Speed 299.64%
3 Audio Samples 3504350
6 Bench. Time 0:25.803
7 Bench. Frame Rate 74.91
8 Bench. Sample Rate 135813
9 Bench. Data Rate 3.6 Mbit/s
22 Video output Direct 800x480 16bits Lookup
16位色DDraw-RGB渲染時的報告結果:
1 Average Speed 297.27%
3 Audio Samples 3504501
6 Bench. Time 0:26.009
7 Bench. Frame Rate 74.32
8 Bench. Sample Rate 134739
22 Video output DirectDraw 800x480 16bits Lookup
16位色DDraw-YUY2渲染時的報告結果:
1 Average Speed 363.65%
3 Audio Samples 3512737
6 Bench. Time 0:21.261
7 Bench. Frame Rate 90.91
8 Bench. Sample Rate 165215
9 Bench. Data Rate 4.4 Mbit/s
從上面可以看出,在16位色的WinCE6.0系統上,使用GDI渲染最慢,Direct和DDraw-RGB相差不多,都比GDI要好一點,DDraw-YUY2效果最好。
24位色下的四組資料如下。
24位色GDI渲染時的報告結果:
1 Average Speed 186.47%
3 Audio Samples 3501248
6 Bench. Time 0:41.464
7 Bench. Frame Rate 46.62
8 Bench. Sample Rate 84440
9 Bench. Data Rate 2.3 Mbit/s
22 Video output GDI 解碼 800x480 32bits Lookup
24位色Direct渲染時的報告結果:
1 Average Speed 298.94%
3 Audio Samples 3507276
6 Bench. Time 0:25.864
7 Bench. Frame Rate 74.73
8 Bench. Sample Rate 135607
22 Video output Direct 800x480 32bits Lookup
24位色DDraw-RGB渲染時的報告結果:
1 Average Speed 295.10%
3 Audio Samples 3504242
6 Bench. Time 0:26.200
7 Bench. Frame Rate 73.78
8 Bench. Sample Rate 133749
22 Video output DirectDraw 800x480 32bits Lookup
24位色DDraw-YUY2渲染時的報告結果:
1 Average Speed 358.64%
3 Audio Samples 3513320
6 Bench. Time 0:21.558
7 Bench. Frame Rate 89.66
8 Bench. Sample Rate 162971
9 Bench. Data Rate 4.3 Mbit/s
21 Clock speed 482 Mhz
可以看到,在24位色模式下,GDI依然是最慢的,Direct和DDraw-RGB還是不相上下,但比使用GDI高了很多,DDraw-YUY2依舊傲視群雄,幾乎是GDI的2倍。
再看16位色和24位色,雖然同是使用GDI渲染,但24位色的系統顯然慢了很多。而位色深度似乎對Direct和DDraw影響很小,幾組值都相差無幾。
最後再看看DDraw内部的差别,使用RGB和YUY2顯然效果大不一樣,幾乎提高了20%。這可能主要是因為使用YUY2解碼時不需要做顔色轉換,進而省了很多時間。對于界面開發來說,我們大概可以使用Direct或者DDraw-RGB來提高繪制的效率。具體采用哪一種看具體情況,簡單友善易實作是宗旨。
以上列舉的這些應該可以說明一些問題,但不能以偏概全,最後的答案還得繼續尋找。
為啥WinCE6.0有時那麼慢?