Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: android_webview/browser/render_thread_manager.cc

Issue 1911433002: Refactor BrowserViewRenderer-RenderThreadManager relationship. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address most comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/render_thread_manager.h" 5 #include "android_webview/browser/render_thread_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "android_webview/browser/child_frame.h" 9 #include "android_webview/browser/child_frame.h"
10 #include "android_webview/browser/compositor_frame_producer.h"
10 #include "android_webview/browser/deferred_gpu_command_service.h" 11 #include "android_webview/browser/deferred_gpu_command_service.h"
11 #include "android_webview/browser/hardware_renderer.h" 12 #include "android_webview/browser/hardware_renderer.h"
12 #include "android_webview/browser/render_thread_manager_client.h" 13 #include "android_webview/browser/render_thread_manager_client.h"
13 #include "android_webview/browser/scoped_app_gl_state_restore.h" 14 #include "android_webview/browser/scoped_app_gl_state_restore.h"
14 #include "android_webview/public/browser/draw_gl.h" 15 #include "android_webview/public/browser/draw_gl.h"
15 #include "base/bind.h" 16 #include "base/bind.h"
16 #include "base/lazy_instance.h" 17 #include "base/lazy_instance.h"
17 #include "base/location.h" 18 #include "base/location.h"
18 #include "base/time/time.h" 19 #include "base/time/time.h"
19 #include "base/trace_event/trace_event_argument.h" 20 #include "base/trace_event/trace_event_argument.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 85
85 base::LazyInstance<internal::RequestInvokeGLTracker> 86 base::LazyInstance<internal::RequestInvokeGLTracker>
86 g_request_invoke_gl_tracker = LAZY_INSTANCE_INITIALIZER; 87 g_request_invoke_gl_tracker = LAZY_INSTANCE_INITIALIZER;
87 } 88 }
88 89
89 RenderThreadManager::RenderThreadManager( 90 RenderThreadManager::RenderThreadManager(
90 RenderThreadManagerClient* client, 91 RenderThreadManagerClient* client,
91 const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop) 92 const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop)
92 : ui_loop_(ui_loop), 93 : ui_loop_(ui_loop),
93 client_(client), 94 client_(client),
95 compositor_frame_producer_(nullptr),
94 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()), 96 renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()),
95 hardware_renderer_has_frame_(false), 97 hardware_renderer_has_frame_(false),
96 inside_hardware_release_(false), 98 inside_hardware_release_(false),
97 weak_factory_on_ui_thread_(this) { 99 weak_factory_on_ui_thread_(this) {
98 DCHECK(ui_loop_->BelongsToCurrentThread()); 100 DCHECK(ui_loop_->BelongsToCurrentThread());
99 DCHECK(client_); 101 DCHECK(client_);
100 ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); 102 ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr();
101 ResetRequestInvokeGLCallback(); 103 ResetRequestInvokeGLCallback();
102 } 104 }
103 105
104 RenderThreadManager::~RenderThreadManager() { 106 RenderThreadManager::~RenderThreadManager() {
105 DCHECK(ui_loop_->BelongsToCurrentThread()); 107 DCHECK(ui_loop_->BelongsToCurrentThread());
106 DCHECK(!hardware_renderer_.get()); 108 DCHECK(!hardware_renderer_.get());
109 if (compositor_frame_producer_) {
110 compositor_frame_producer_->OnCompositorFrameConsumerWillDestroy();
111 }
107 } 112 }
108 113
109 void RenderThreadManager::ClientRequestInvokeGL(bool for_idle) { 114 void RenderThreadManager::ClientRequestInvokeGL(bool for_idle) {
110 if (ui_loop_->BelongsToCurrentThread()) { 115 if (ui_loop_->BelongsToCurrentThread()) {
111 if (!g_request_invoke_gl_tracker.Get().ShouldRequestOnUiThread(this)) 116 if (!g_request_invoke_gl_tracker.Get().ShouldRequestOnUiThread(this))
112 return; 117 return;
113 ClientRequestInvokeGLOnUI(); 118 ClientRequestInvokeGLOnUI();
114 } else { 119 } else {
115 if (!g_request_invoke_gl_tracker.Get().ShouldRequestOnNonUiThread(this)) 120 if (!g_request_invoke_gl_tracker.Get().ShouldRequestOnNonUiThread(this))
116 return; 121 return;
(...skipping 28 matching lines...) Expand all
145 ResetRequestInvokeGLCallback(); 150 ResetRequestInvokeGLCallback();
146 g_request_invoke_gl_tracker.Get().SetQueuedFunctorOnUi(this); 151 g_request_invoke_gl_tracker.Get().SetQueuedFunctorOnUi(this);
147 if (!client_->RequestInvokeGL(false)) { 152 if (!client_->RequestInvokeGL(false)) {
148 g_request_invoke_gl_tracker.Get().ResetPending(); 153 g_request_invoke_gl_tracker.Get().ResetPending();
149 LOG(ERROR) << "Failed to request GL process. Deadlock likely"; 154 LOG(ERROR) << "Failed to request GL process. Deadlock likely";
150 } 155 }
151 } 156 }
152 157
153 void RenderThreadManager::UpdateParentDrawConstraintsOnUI() { 158 void RenderThreadManager::UpdateParentDrawConstraintsOnUI() {
154 DCHECK(ui_loop_->BelongsToCurrentThread()); 159 DCHECK(ui_loop_->BelongsToCurrentThread());
155 client_->OnParentDrawConstraintsUpdated(); 160 if (compositor_frame_producer_) {
161 compositor_frame_producer_->OnParentDrawConstraintsUpdated();
162 }
156 } 163 }
157 164
158 void RenderThreadManager::SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) { 165 void RenderThreadManager::SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) {
159 base::AutoLock lock(lock_); 166 base::AutoLock lock(lock_);
160 scroll_offset_ = scroll_offset; 167 scroll_offset_ = scroll_offset;
161 } 168 }
162 169
163 gfx::Vector2d RenderThreadManager::GetScrollOffsetOnRT() { 170 gfx::Vector2d RenderThreadManager::GetScrollOffsetOnRT() {
164 base::AutoLock lock(lock_); 171 base::AutoLock lock(lock_);
165 return scroll_offset_; 172 return scroll_offset_;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 renderer_manager_key_ = manager->NullKey(); 353 renderer_manager_key_ = manager->NullKey();
347 } 354 }
348 } 355 }
349 356
350 if (hardware_initialized) { 357 if (hardware_initialized) {
351 // Flush any invoke functors that's caused by ReleaseHardware. 358 // Flush any invoke functors that's caused by ReleaseHardware.
352 client_->RequestInvokeGL(true); 359 client_->RequestInvokeGL(true);
353 } 360 }
354 } 361 }
355 362
363 void RenderThreadManager::SetCompositorFrameProducer(
364 CompositorFrameProducer* compositor_frame_producer) {
365 compositor_frame_producer_ = compositor_frame_producer;
366 }
367
356 bool RenderThreadManager::HasFrameOnUI() const { 368 bool RenderThreadManager::HasFrameOnUI() const {
357 base::AutoLock lock(lock_); 369 base::AutoLock lock(lock_);
358 return hardware_renderer_has_frame_ || child_frame_.get(); 370 return hardware_renderer_has_frame_ || child_frame_.get();
359 } 371 }
360 372
361 bool RenderThreadManager::HasFrameForHardwareRendererOnRT() const { 373 bool RenderThreadManager::HasFrameForHardwareRendererOnRT() const {
362 base::AutoLock lock(lock_); 374 base::AutoLock lock(lock_);
363 return !!child_frame_; 375 return !!child_frame_;
364 } 376 }
365 377
(...skipping 12 matching lines...) Expand all
378 : render_thread_manager_(render_thread_manager) { 390 : render_thread_manager_(render_thread_manager) {
379 DCHECK(!render_thread_manager_->IsInsideHardwareRelease()); 391 DCHECK(!render_thread_manager_->IsInsideHardwareRelease());
380 render_thread_manager_->SetInsideHardwareRelease(true); 392 render_thread_manager_->SetInsideHardwareRelease(true);
381 } 393 }
382 394
383 RenderThreadManager::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 395 RenderThreadManager::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
384 render_thread_manager_->SetInsideHardwareRelease(false); 396 render_thread_manager_->SetInsideHardwareRelease(false);
385 } 397 }
386 398
387 } // namespace android_webview 399 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698