天天看点

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");