| Index: android_webview/browser/render_thread_manager.cc
|
| diff --git a/android_webview/browser/render_thread_manager.cc b/android_webview/browser/render_thread_manager.cc
|
| index 8338278941b7063885fd72beabf60ba3e2534358..df7331a19a64058a3e1f9e0db7831fdbcff52cf8 100644
|
| --- a/android_webview/browser/render_thread_manager.cc
|
| +++ b/android_webview/browser/render_thread_manager.cc
|
| @@ -280,11 +280,12 @@ void RenderThreadManager::DrawGL(AwDrawGLInfo* draw_info) {
|
| // Set the correct FBO before kModeDraw. The GL commands run in kModeDraw
|
| // require a correctly bound FBO. The FBO remains until the next kModeDraw.
|
| // So kModeProcess between kModeDraws has correctly bound FBO, too.
|
| - if (draw_info->mode == AwDrawGLInfo::kModeDraw) {
|
| - if (!hardware_renderer_) {
|
| - hardware_renderer_.reset(new HardwareRenderer(this));
|
| - hardware_renderer_->CommitFrame();
|
| - }
|
| + if (draw_info->mode == AwDrawGLInfo::kModeDraw && !hardware_renderer_ &&
|
| + HasFrameForHardwareRendererOnRT()) {
|
| + hardware_renderer_.reset(new HardwareRenderer(this));
|
| + hardware_renderer_->CommitFrame();
|
| + }
|
| + if (hardware_renderer_) {
|
| hardware_renderer_->SetBackingFrameBufferObject(
|
| state_restore.framebuffer_binding_ext());
|
| }
|
| @@ -310,7 +311,8 @@ void RenderThreadManager::DrawGL(AwDrawGLInfo* draw_info) {
|
| return;
|
| }
|
|
|
| - hardware_renderer_->DrawGL(draw_info, state_restore);
|
| + if (hardware_renderer_)
|
| + hardware_renderer_->DrawGL(draw_info, state_restore);
|
| DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
|
| }
|
|
|
| @@ -356,6 +358,11 @@ bool RenderThreadManager::HasFrameOnUI() const {
|
| return hardware_renderer_has_frame_ || child_frame_.get();
|
| }
|
|
|
| +bool RenderThreadManager::HasFrameForHardwareRendererOnRT() const {
|
| + base::AutoLock lock(lock_);
|
| + return !!child_frame_;
|
| +}
|
| +
|
| void RenderThreadManager::InitializeHardwareDrawIfNeededOnUI() {
|
| DCHECK(ui_loop_->BelongsToCurrentThread());
|
| GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
|
|
|