天天看點

CEF 視窗最小化後黑屏

基于前面的教程,應該可以完整搭建自定義的基于CEF的浏覽器外殼程式。突然明白了破解為什麼形象的稱為脫殼了。哈哈。

維護自定義的浏覽器不是那麼容易,有很多細節需要處理,也會遇到各種各樣的問題。今天講一個我遇到的問題 :浏覽器最大化加載H5,然後最小化,過一段時間再最大化,之前的頁面資訊丢失。不是每次都能重制。

網上搜了很久,沒有相關的描述。後來在一個技術交流群裡,有個人建議關閉GPU加速。我操作了一下,貌似有效果,感覺最重要的是“開啟第一幀”,不過還需要進一步測試,修改内容如下:

/**
	* 2020.7.14 嘗試禁用GPU加速,解決最小化黑屏問題
	*/
	command_line->AppendSwitchWithValue("disable-gpu", "1");
	command_line->AppendSwitchWithValue("disable-gpu-compositing", "1");
	command_line->AppendSwitchWithValue("enable-begin-frame-scheduling", "1");
	command_line->AppendSwitchWithValue("disable-gpu-vsync", "1");
	command_line->AppendSwitchWithValue("disable-gpu", "1");
	command_line->AppendSwitchWithValue("disable-direct-write", "1");
           

經過簡單測試,沒有發現上述問題。但是引出下一個問題,應用程式最小化後,記憶體會飙升,很誇張,光一個應用記憶體會用到9G多。

CEF 視窗最小化後黑屏

大概看了一下修改的參數,相關的隻有準備第一幀相關。後來經過多次嘗試發現是【disable-gpu-vsync】這個導緻的。我也不太明白這個參數的含義,找到一個連接配接http://yiiyee.cn/blog/2015/02/06/vsync/介紹很詳細。最關鍵的資訊是

CEF 視窗最小化後黑屏

然後修改參數,記憶體就下來了。具體原因不詳。

CEF 視窗最小化後黑屏

經過進一步測試 ,可能和GPU硬體加速沒有關系,最重要的兩個參數是:

command_line->AppendSwitchWithValue("enable-begin-frame-scheduling", "1");

        command_line->AppendSwitchWithValue("disable-gpu-vsync", "0");