joinAero / qtcefclient

A simple cef3 client with Qt.
58 stars 26 forks source link

在CEF中玩Flash游戏有顿卡的感觉 #3

Open xwal opened 10 years ago

xwal commented 10 years ago

当我在玩Flash游戏时,界面总是有种顿卡的感觉,我在原来的代码中找到了关于fps的代码,我想请问下是不是和这个有关呢。 // Render at 30fps. static const int kRenderDelay = 1000 / 30; CefPostDelayedTask(TID_UI, NewCefRunnableMethod(this, &OSRWindow::Render), kRenderDelay);

joinAero commented 10 years ago

你原来代码用了离屏渲染?用目前我这个玩同一个Flash游戏是否也有卡顿呢?

xwal commented 10 years ago

用官方的卡顿的情况很少,用你的这个卡顿的现象比较多,特别是全屏的时候,现象很明显。

joinAero commented 10 years ago

和官方比,区别有:

  1. 用了分离子进程。
    • 可以在cefclient\cefclient.cppSUB_PROCESS_DISABLED启用来禁止。
    • 而官方是没有使用的。
  2. 用QWidget做了父窗口。
    • 代码在cefclient\qcefwebview.cpp20行info.SetAsChild(this->winId(), rect);
    • 而官方设的是window窗口,并且提供了另外一种离屏渲染的方式(不过默认不会启用)。
  3. 直接启用了多线程消息循环。
    • 代码在cefclient\cefclient.cpp17行settings.multi_threaded_message_loop = true;
    • 而官方则会由multi_threaded_message_loop来选择不同循环方式。

不清楚是不是第2点造成的影响?其他应该不会有什么影响才对。

你另外看看QCefWebView在全屏下运行那个Flash游戏时,其resizeEvent是不是频繁触发了?

卡顿哦,是感觉UI阻塞了一下的那种卡顿?另外,你指的我这个卡顿较多,是添加了CefPostDelayedTask(TID_UI, NewCefRunnableMethod...代码的么?

joinAero commented 10 years ago

哦,你那段代码是指官方例子里的啊,那个没影响的。它是离屏渲染的相关代码,默认跑官方例子时走的也不是离屏。而我这边把离屏渲染的代码都去除掉了。

离屏渲染,我在做一些浏览器测试时,运行效果比较差。除非,你专门要渲染网页获得其输出内容,生成图片啊什么的。否则,就不要用了。

然后,卡顿的话,不清楚了。你还是先确认下:全屏跑那个flash游戏时,是不是总在做resize。

xwal commented 10 years ago

嗯嗯,现在确认的情况是resize是正常的,在全屏下没有总在resize,只有当窗口大小变化的时候才resize。卡顿感觉是UI阻塞了下。

magicdoom commented 10 years ago

webview_->load(QUrl("")) ;这个线load一个没flash的地址,然后再load一个带有flash的地址,flash就很快;如果直接载入带flash的就很卡

magicdoom commented 10 years ago

后来又测了下1650版本是正常的,17和18的版本有上述问题