Windows 10是美國(guó)微軟公司研發(fā)的跨平臺(tái)及設(shè)備應(yīng)用的操作系統(tǒng)。是微軟發(fā)布的最后一個(gè)獨(dú)立Windows版本。Windows 10共有7個(gè)發(fā)行版本,分別面向不同用戶和設(shè)備。2014年10月1日,微軟在舊金山召開(kāi)新品發(fā)布會(huì),對(duì)外展示了新一代Windows操作系統(tǒng),將它命名為“Windows 10”,新系統(tǒng)的名稱跳過(guò)了這個(gè)數(shù)字“9”。截止至2018年3月7日,Windows 10正式版已更新至秋季創(chuàng)意者10.0.16299.309版本,預(yù)覽版已更新至春季創(chuàng)意者10.0.17120版本 如果你是一個(gè)Windows內(nèi)幕和一個(gè)游戲玩家,你可能是并不陌生,在Windows 10的Xbox控制器困境;在構(gòu)建14291,只需連接一個(gè)控制器可以降低操作系統(tǒng)。建立14295迅速修復(fù)了,但隨后推出,使得它不可能使用很長(zhǎng)一段時(shí)間的問(wèn)題。快進(jìn)到今天 - 建設(shè)14316 - 而且還是看不到修復(fù)。什么是Windows業(yè)內(nèi)人士中的Xbox測(cè)試賽季呢。
我們開(kāi)始解決問(wèn)題,我們知道控制器的作品,那就是,我們可以發(fā)揮通過(guò)Xbox流功能的Xbox游戲。但是很短的時(shí)間量之后,一切都開(kāi)始減緩和音頻開(kāi)始噼啪作響。讓我們火起來(lái)的Windows性能記錄器(WPR)和微量元素是怎么回事時(shí),事情開(kāi)始吸吮。
我們將啟用CPU使用率(無(wú)圖)和桌面組合活性譜,點(diǎn)擊開(kāi)始,火起來(lái)輻射4,和剛剛上場(chǎng)一分鐘左右。
正如預(yù)期的那樣,現(xiàn)在情況非常緩慢。讓我們停下來(lái),讓系統(tǒng)恢復(fù)一下,拯救我們的痕跡。
打開(kāi)在Wi??ndows性能分析器(WPA)的跟蹤,我們看到CPU活動(dòng)的一個(gè)非常有趣的線性發(fā)展在我們的計(jì)算圖形集縮略圖,但是讓我們專注于用戶界面呆滯第一。
打開(kāi)視頻圖形集并拖動(dòng)DWM邊框細(xì)節(jié)繪制到我們的分析面積計(jì)算幀速率隨著時(shí)間的推移一個(gè)美麗的可視化。這證實(shí)了桌面窗口管理器(DWM)以每秒約60幀,直到事情發(fā)生,導(dǎo)致它下跌愉快地渲染我全屏的Xbox流媒體窗口。
讓我們?cè)贑PU占用率曲線帶來(lái)一些副作用并排分析。
OK,至此在CPU占用率曲線肯定確認(rèn)東西是占用進(jìn)程,我們的坦克幀速率。
擴(kuò)展堆棧揭示我們做了很多對(duì)控制器的輸入處理工作,每份報(bào)告(例如按下按鈕)。等待,我們正在顯示的每一次我們做一些控制器上的界限?并獲得通過(guò)的GetDC(其重定向到ZwUserGetDC)每一次新的設(shè)備上下文句柄這樣做呢?嗯哦,我們可能會(huì)發(fā)現(xiàn)我們的問(wèn)題。
讓我們?cè)谕悼碊esktopInputDisplay ::使用調(diào)試器里面的getBounds什么,F(xiàn)在,因?yàn)镈WM負(fù)責(zé)繪制我們機(jī)器上所有的UI,我們需要附加一個(gè)調(diào)試器,是可控的外部。否則,我們就自己掛起來(lái),失去了我們的機(jī)器的控制權(quán)。
這樣的運(yùn)行。時(shí)間從筆記本電腦連接。
而我們?cè)凇,F(xiàn)在,讓我們反匯編這個(gè)函數(shù)。
這個(gè)功能是非常小的。閱讀反匯編列表和理解匯編指令超出了這個(gè)帖子的目的,所以我會(huì)總結(jié)一下我們正在考慮與一些C偽代碼:
我做了一些研究,并...為什么這個(gè)代碼是在這里,而不是一些初始化的一部分,其他地方還不清楚。
它基本上是告訴Windows來(lái)達(dá)到到內(nèi)核空間,喚醒了顯示驅(qū)動(dòng)程序,并告訴它準(zhǔn)備在桌面上繪制操作。然后,駕駛員跳下床,看著桌面,在內(nèi)部設(shè)置了一些東西,并給了我們一個(gè)道理引用這個(gè)工作以后。但是,在一個(gè)袋子污垢舉動(dòng),我們只要求在桌面上的測(cè)量和沒(méi)有清理走。
無(wú)禮!
無(wú)論如何,我們這里有兩個(gè)問(wèn)題:
的GetDC是昂貴的被調(diào)用在亞毫秒間隔的輸入處理程序的上下文來(lái)調(diào)用。我要去猜,我們正在某處與我們重復(fù)調(diào)用堵塞的隊(duì)列。
我們不是清理句柄的GetDC返回。我不相信這是直接關(guān)系到我們的問(wèn)題,但它確實(shí)意味著,如果你強(qiáng)硬通過(guò)lagginess,你會(huì)最終與內(nèi)存外的一個(gè)錯(cuò)誤崩潰DWM。
再次代碼來(lái)看,很明顯的失敗不被視為關(guān)鍵。如果壞事有兩種GetDC的或GetDeviceCaps發(fā)生,我們始終陷入返回硬編碼值。所以,我們只是砍出的GetDC調(diào)用,讓它做所有的時(shí)間。
這是我們這個(gè)補(bǔ)丁之前。
而這里的后。因?yàn)樵瓉?lái)的調(diào)用指令是6字節(jié)長(zhǎng),我用了近跳轉(zhuǎn)指令(2字節(jié))跳過(guò)剩下的4個(gè)字節(jié)。 (我們可以僅覆蓋了整個(gè)指令有6個(gè)無(wú)使用說(shuō)明書(shū)但更關(guān)鍵的一拳。)
讓我們給它一個(gè)旋轉(zhuǎn)。
而且我們的清晰;我沒(méi)有打任何突然口吃并核實(shí)事情看起來(lái)在Windows性能分析器好得多。
這種創(chuàng)可貼應(yīng)持有直到微軟修復(fù)該問(wèn)題在即將到來(lái)的飛行。如果你想你的機(jī)器上應(yīng)用此修復(fù)程序沒(méi)有所有的手動(dòng)步驟上面,做到以下幾點(diǎn):
確保您使用的是Windows 10 14316.rs1_release.160402-2217的64位副本
為Windows安裝調(diào)試工具
打開(kāi)工具被安裝到文件夾中提升的命令提示符
仔細(xì)發(fā)出以下命令:“.symfix; EB ism32k DesktopInputDisplay :: +的getBounds 29 EB 04; .detach;”國(guó)開(kāi)行-pn dwm.exe -c
Windows 10系統(tǒng)成為了智能手機(jī)、PC、平板、Xbox One、物聯(lián)網(wǎng)和其他各種辦公設(shè)備的心臟,使設(shè)備之間提供無(wú)縫的操作體驗(yàn)。
|