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

Unified Diff: android_webview/browser/browser_view_renderer.cc

Issue 1816283005: Move SharedRendererState ownership to AwContents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/shared_renderer_state.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cf6b4b4f6fc9262776adad9e860cc7dbf020bb83..284c41e9723dedffacbd4af5b0a27c876c96f395 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -88,7 +88,7 @@ BrowserViewRenderer::BrowserViewRenderer(
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
bool disable_page_visibility)
: client_(client),
- shared_renderer_state_(ui_task_runner, this),
+ shared_renderer_state_(nullptr),
ui_task_runner_(ui_task_runner),
disable_page_visibility_(disable_page_visibility),
compositor_(NULL),
@@ -108,6 +108,7 @@ BrowserViewRenderer::BrowserViewRenderer(
BrowserViewRenderer::~BrowserViewRenderer() {
DCHECK(compositor_map_.empty());
+ SetSharedRendererState(nullptr);
}
void BrowserViewRenderer::RegisterWithWebContents(
@@ -116,8 +117,21 @@ void BrowserViewRenderer::RegisterWithWebContents(
new BrowserViewRendererUserData(this));
}
+void BrowserViewRenderer::SetSharedRendererState(
+ SharedRendererState* shared_renderer_state) {
+ if (shared_renderer_state_ == shared_renderer_state) return;
+
+ if (shared_renderer_state_) {
+ shared_renderer_state_->SetBrowserViewRendererOnUI(nullptr);
+ }
+ shared_renderer_state_ = shared_renderer_state;
+ if (shared_renderer_state_) {
+ shared_renderer_state_->SetBrowserViewRendererOnUI(this);
+ }
+}
+
SharedRendererState* BrowserViewRenderer::GetAwDrawGLViewContext() {
- return &shared_renderer_state_;
+ return shared_renderer_state_;
}
bool BrowserViewRenderer::RequestDrawGL(bool wait_for_completion) {
@@ -152,11 +166,11 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) {
// If offscreen pre-raster is disabled, drop everything in hardware. Otherwise
// keep the tiles and just delete the HardwareRenderer.
- if (level >= TRIM_MEMORY_MODERATE) {
+ if (level >= TRIM_MEMORY_MODERATE && shared_renderer_state_) {
boliu 2016/03/23 15:47:20 this should just be aw_contents -> SRS call, no ne
if (offscreen_pre_raster_)
- shared_renderer_state_.DeleteHardwareRendererOnUI();
+ shared_renderer_state_->DeleteHardwareRendererOnUI();
else
- shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI();
+ shared_renderer_state_->ReleaseHardwareDrawIfNeededOnUI();
return;
}
@@ -170,7 +184,7 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) {
}
void BrowserViewRenderer::UpdateMemoryPolicy() {
- if (!hardware_enabled_) {
+ if (!hardware_enabled_ || !shared_renderer_state_) {
compositor_->SetMemoryPolicy(0u);
return;
}
@@ -180,7 +194,7 @@ void BrowserViewRenderer::UpdateMemoryPolicy() {
bytes_limit = static_cast<size_t>(g_memory_override_in_bytes);
} else {
ParentCompositorDrawConstraints parent_draw_constraints =
- shared_renderer_state_.GetParentDrawConstraintsOnUI();
+ shared_renderer_state_->GetParentDrawConstraintsOnUI();
gfx::Rect interest_rect =
offscreen_pre_raster_ || parent_draw_constraints.is_layer
? gfx::Rect(size_)
@@ -218,22 +232,22 @@ bool BrowserViewRenderer::CanOnDraw() {
}
bool BrowserViewRenderer::OnDrawHardware() {
+ DCHECK(shared_renderer_state_);
TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware");
-
- shared_renderer_state_.InitializeHardwareDrawIfNeededOnUI();
+ shared_renderer_state_->InitializeHardwareDrawIfNeededOnUI();
if (!CanOnDraw()) {
return false;
}
- shared_renderer_state_.SetScrollOffsetOnUI(last_on_draw_scroll_offset_);
+ shared_renderer_state_->SetScrollOffsetOnUI(last_on_draw_scroll_offset_);
hardware_enabled_ = true;
ReturnResourceFromParent();
UpdateMemoryPolicy();
ParentCompositorDrawConstraints parent_draw_constraints =
- shared_renderer_state_.GetParentDrawConstraintsOnUI();
+ shared_renderer_state_->GetParentDrawConstraintsOnUI();
gfx::Size surface_size(size_);
gfx::Rect viewport(surface_size);
gfx::Rect clip = viewport;
@@ -260,7 +274,7 @@ bool BrowserViewRenderer::OnDrawHardware() {
if (!frame.frame.get()) {
TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame",
TRACE_EVENT_SCOPE_THREAD);
- return shared_renderer_state_.HasFrameOnUI();
+ return shared_renderer_state_->HasFrameOnUI();
}
scoped_ptr<ChildFrame> child_frame = make_scoped_ptr(new ChildFrame(
@@ -269,15 +283,16 @@ bool BrowserViewRenderer::OnDrawHardware() {
transform_for_tile_priority, offscreen_pre_raster_,
parent_draw_constraints.is_layer));
- ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI());
- shared_renderer_state_.SetCompositorFrameOnUI(std::move(child_frame));
+ ReturnUnusedResource(shared_renderer_state_->PassUncommittedFrameOnUI());
+ shared_renderer_state_->SetCompositorFrameOnUI(std::move(child_frame));
return true;
}
void BrowserViewRenderer::UpdateParentDrawConstraints() {
+ DCHECK(shared_renderer_state_);
PostInvalidate();
ParentCompositorDrawConstraints parent_draw_constraints =
- shared_renderer_state_.GetParentDrawConstraintsOnUI();
+ shared_renderer_state_->GetParentDrawConstraintsOnUI();
client_->ParentDrawConstraintsUpdated(parent_draw_constraints);
}
@@ -297,8 +312,9 @@ void BrowserViewRenderer::ReturnUnusedResource(
}
void BrowserViewRenderer::ReturnResourceFromParent() {
+ DCHECK(shared_renderer_state_);
SharedRendererState::ReturnedResourcesMap returned_resource_map;
- shared_renderer_state_.SwapReturnedResourcesOnUI(&returned_resource_map);
+ shared_renderer_state_->SwapReturnedResourcesOnUI(&returned_resource_map);
for (auto iterator = returned_resource_map.begin();
iterator != returned_resource_map.end(); iterator++) {
uint32_t compositor_id = iterator->first;
@@ -423,8 +439,9 @@ void BrowserViewRenderer::OnAttachedToWindow(int width, int height) {
}
void BrowserViewRenderer::OnDetachedFromWindow() {
+ DCHECK(shared_renderer_state_);
TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow");
- shared_renderer_state_.ReleaseHardwareDrawIfNeededOnUI();
+ shared_renderer_state_->ReleaseHardwareDrawIfNeededOnUI();
attached_to_window_ = false;
DCHECK(!hardware_enabled_);
UpdateCompositorIsActive();
@@ -438,10 +455,11 @@ void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) {
}
void BrowserViewRenderer::ReleaseHardware() {
+ DCHECK(shared_renderer_state_);
DCHECK(hardware_enabled_);
- ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI());
+ ReturnUnusedResource(shared_renderer_state_->PassUncommittedFrameOnUI());
ReturnResourceFromParent();
- DCHECK(shared_renderer_state_.ReturnedResourcesEmptyOnUI());
+ DCHECK(shared_renderer_state_->ReturnedResourcesEmptyOnUI());
if (compositor_) {
compositor_->SetMemoryPolicy(0u);
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/shared_renderer_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698