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

Unified Diff: android_webview/browser/browser_view_renderer.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 side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/browser_view_renderer.cc
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index 9f91213dd0e5b74313ac33d20db2821491d28f87..47cae096195b0131066ec2480a1a448d937c00b9 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -8,6 +8,7 @@
#include "android_webview/browser/browser_view_renderer_client.h"
#include "android_webview/browser/child_frame.h"
+#include "android_webview/browser/compositor_frame_consumer.h"
#include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/logging.h"
@@ -92,7 +93,7 @@ BrowserViewRenderer::BrowserViewRenderer(
bool disable_page_visibility)
: client_(client),
ui_task_runner_(ui_task_runner),
- render_thread_manager_(nullptr),
+ compositor_frame_consumer_(nullptr),
disable_page_visibility_(disable_page_visibility),
compositor_(NULL),
is_paused_(false),
@@ -111,11 +112,21 @@ BrowserViewRenderer::BrowserViewRenderer(
BrowserViewRenderer::~BrowserViewRenderer() {
DCHECK(compositor_map_.empty());
+ SetCompositorFrameConsumer(nullptr);
}
-void BrowserViewRenderer::SetRenderThreadManager(
- RenderThreadManager* render_thread_manager) {
- render_thread_manager_ = render_thread_manager;
+void BrowserViewRenderer::SetCompositorFrameConsumer(
+ CompositorFrameConsumer* compositor_frame_consumer) {
+ if (compositor_frame_consumer == compositor_frame_consumer_) {
+ return;
+ }
+ if (compositor_frame_consumer_) {
+ compositor_frame_consumer_->SetCompositorFrameProducer(nullptr);
+ }
+ compositor_frame_consumer_ = compositor_frame_consumer;
+ if (compositor_frame_consumer_) {
+ compositor_frame_consumer_->SetCompositorFrameProducer(this);
+ }
}
void BrowserViewRenderer::RegisterWithWebContents(
@@ -187,22 +198,24 @@ bool BrowserViewRenderer::CanOnDraw() {
}
bool BrowserViewRenderer::OnDrawHardware() {
- DCHECK(render_thread_manager_);
TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware");
+ if (!compositor_frame_consumer_) {
+ return false;
+ }
- render_thread_manager_->InitializeHardwareDrawIfNeededOnUI();
+ compositor_frame_consumer_->InitializeHardwareDrawIfNeededOnUI();
if (!CanOnDraw()) {
return false;
}
- render_thread_manager_->SetScrollOffsetOnUI(last_on_draw_scroll_offset_);
+ compositor_frame_consumer_->SetScrollOffsetOnUI(last_on_draw_scroll_offset_);
hardware_enabled_ = true;
external_draw_constraints_ =
- render_thread_manager_->GetParentDrawConstraintsOnUI();
+ compositor_frame_consumer_->GetParentDrawConstraintsOnUI();
- ReturnResourceFromParent();
+ ReturnResourceFromParent(compositor_frame_consumer_);
UpdateMemoryPolicy();
gfx::Size surface_size(size_);
@@ -231,7 +244,7 @@ bool BrowserViewRenderer::OnDrawHardware() {
if (!frame.frame.get()) {
TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame",
TRACE_EVENT_SCOPE_THREAD);
- hardware_enabled_ = render_thread_manager_->HasFrameOnUI();
+ hardware_enabled_ = compositor_frame_consumer_->HasFrameOnUI();
if (!hardware_enabled_)
UpdateMemoryPolicy();
return hardware_enabled_;
@@ -243,19 +256,24 @@ bool BrowserViewRenderer::OnDrawHardware() {
transform_for_tile_priority, offscreen_pre_raster_,
external_draw_constraints_.is_layer));
- ReturnUnusedResource(render_thread_manager_->PassUncommittedFrameOnUI());
- render_thread_manager_->SetFrameOnUI(std::move(child_frame));
+ ReturnUnusedResource(compositor_frame_consumer_->PassUncommittedFrameOnUI());
+ compositor_frame_consumer_->SetFrameOnUI(std::move(child_frame));
return true;
}
void BrowserViewRenderer::OnParentDrawConstraintsUpdated() {
- DCHECK(render_thread_manager_);
+ DCHECK(compositor_frame_consumer_);
PostInvalidate();
external_draw_constraints_ =
- render_thread_manager_->GetParentDrawConstraintsOnUI();
+ compositor_frame_consumer_->GetParentDrawConstraintsOnUI();
UpdateMemoryPolicy();
}
+void BrowserViewRenderer::OnCompositorFrameConsumerWillDestroy() {
+ DCHECK(compositor_frame_consumer_);
+ SetCompositorFrameConsumer(nullptr);
+}
+
void BrowserViewRenderer::ReturnUnusedResource(
std::unique_ptr<ChildFrame> child_frame) {
if (!child_frame.get() || !child_frame->frame.get())
@@ -271,10 +289,10 @@ void BrowserViewRenderer::ReturnUnusedResource(
compositor->ReturnResources(child_frame->output_surface_id, frame_ack);
}
-void BrowserViewRenderer::ReturnResourceFromParent() {
- DCHECK(render_thread_manager_);
- RenderThreadManager::ReturnedResourcesMap returned_resource_map;
- render_thread_manager_->SwapReturnedResourcesOnUI(&returned_resource_map);
+void BrowserViewRenderer::ReturnResourceFromParent(
+ CompositorFrameConsumer* compositor_frame_consumer) {
+ CompositorFrameConsumer::ReturnedResourcesMap returned_resource_map;
+ compositor_frame_consumer->SwapReturnedResourcesOnUI(&returned_resource_map);
for (auto iterator = returned_resource_map.begin();
iterator != returned_resource_map.end(); iterator++) {
uint32_t compositor_id = iterator->first;
@@ -420,9 +438,12 @@ void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) {
}
void BrowserViewRenderer::ReleaseHardware() {
- ReturnUnusedResource(render_thread_manager_->PassUncommittedFrameOnUI());
- ReturnResourceFromParent();
- DCHECK(render_thread_manager_->ReturnedResourcesEmptyOnUI());
+ if (compositor_frame_consumer_) {
+ ReturnUnusedResource(
+ compositor_frame_consumer_->PassUncommittedFrameOnUI());
+ ReturnResourceFromParent(compositor_frame_consumer_);
+ DCHECK(compositor_frame_consumer_->ReturnedResourcesEmptyOnUI());
boliu 2016/04/21 18:01:32 This at the moment still assumes RTM outlives BVR
+ }
hardware_enabled_ = false;
UpdateMemoryPolicy();
}

Powered by Google App Engine
This is Rietveld 408576698