GS

被sgao忘记的东西都在这里。
posts - 19, comments - 3, trackbacks - 0, articles - 8
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[原创]嵌入CEF遇到的问题及解决方案

Posted on 2017-06-12 21:31  sgao  阅读(4290)  评论(0编辑  收藏

这几天程序嵌入谷歌浏览器,各种坑,不容易,记录之。。。希望到此为止

1. 开了多进程模式之后,渲染进程RenderProcess断点没有进入。

  只有在单进程模式(CefSingleProcess为true)下调试,渲染进程的断点才会进入。如果开多进程模式,那么渲染进程是在另外一个进程,不是主进程,当前调试进程是主进程,所以就没法进入渲染进程的断点,但是实际上,渲染进程的RenderProcessHandler的方法还是会被触发的。

 

2. 在渲染进程操作浏览器进程没有效果。

  渲染进程(RenderProcess)和浏览器进程(BrowserProcess)之间的通讯必须通过进程间通讯才可以,直接调用是没有效果的。不管是在多进程模式下还是在单进程模式下。

 

3. 多进程模式下进程间通讯传接口地址失败。

  多进程模式下,进程不在同一个地址空间,不能直接传地址,只能传值类型。

4. 在多进程模式下,有的情况会出现子进程无法退出的问题。

  修改CefShutDown的时机,不要在finalization里面做,而是移到程序退出前,在释放了所有的Browser后就直接调用退出操作。

 

5. 快速打开很多页面时整个程序会卡死。

  猜测是GPU合成的问题,关闭后就没有这个现象了。GPU也会新开一个进程的,关闭GPU就会减少一些进程创建。

 

6. 每开一个Tab都会创建一个进程。

  参考下面的说明,根据需求开启不同的进程模型。

    1. Process-per-site-instance:就是你打开一个网站,然后从这个网站链开的一系列网站都属于一个进程。这是Chrome的默认模式。
    2. Process-per-site:同域名范畴的网站放在一个进程,比如www.google.com和www.google.com/bookmarks就属于一个域名内(google有自己的判定机制),不论有没有互相打开的关系,都算作是一个进程中。用命令行--process-per-site开启。
    3. Process-per-tab:这个简单,一个tab一个process,不论各个tab的站点有无联系,就和宣传的那样。用--process-per-tab开启。
    4. Single Process:这个很熟悉了吧,传统浏览器的模式,没有多进程只有多线程,用--single-process开启。

7. 没有了