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

Unified Diff: android_webview/browser/browser_view_renderer.cc

Issue 655813004: Part 1: Refactor Android WebView graphics code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor
Patch Set: rebase Created 6 years, 2 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 cbe31857a4dab1eab93ab4dc6f94858ad165e20d..cab6c9c972894efed723b647caeaaf09d6bae6d5 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -4,8 +4,9 @@
#include "android_webview/browser/browser_view_renderer.h"
+#include "android_webview/browser/aw_gl_methods.h"
#include "android_webview/browser/browser_view_renderer_client.h"
-#include "android_webview/browser/shared_renderer_state.h"
+#include "android_webview/browser/browser_view_renderer_proxy.h"
#include "android_webview/common/aw_switches.h"
#include "base/auto_reset.h"
#include "base/command_line.h"
@@ -14,6 +15,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "cc/output/compositor_frame.h"
+#include "cc/output/compositor_frame_ack.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
#include "gpu/command_buffer/service/gpu_switches.h"
@@ -66,12 +68,14 @@ void BrowserViewRenderer::CalculateTileMemoryPolicy() {
}
BrowserViewRenderer::BrowserViewRenderer(
+ AwGLMethods* gl_methods,
BrowserViewRendererClient* client,
- SharedRendererState* shared_renderer_state,
+ BrowserViewRendererProxy* proxy,
content::WebContents* web_contents,
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner)
- : client_(client),
- shared_renderer_state_(shared_renderer_state),
+ : gl_methods_(gl_methods),
+ client_(client),
+ proxy_(proxy),
web_contents_(web_contents),
ui_task_runner_(ui_task_runner),
compositor_(NULL),
@@ -211,7 +215,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) {
if (!compositor_)
return false;
- shared_renderer_state_->SetScrollOffset(last_on_draw_scroll_offset_);
+ proxy_->SetScrollOffset(last_on_draw_scroll_offset_);
if (!hardware_enabled_) {
hardware_enabled_ = compositor_->InitializeHwDraw();
@@ -227,26 +231,26 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) {
TRACE_EVENT_INSTANT0("android_webview",
"EarlyOut_EmptyVisibleRect",
TRACE_EVENT_SCOPE_THREAD);
- shared_renderer_state_->SetForceInvalidateOnNextDrawGL(true);
- return client_->RequestDrawGL(java_canvas, false);
+ proxy_->SetForceInvalidateOnNextDrawGL(true);
+ return gl_methods_->RequestDrawGL(java_canvas, false);
}
ReturnResourceFromParent();
- if (shared_renderer_state_->HasCompositorFrame()) {
+ if (proxy_->HasCompositorFrame()) {
TRACE_EVENT_INSTANT0("android_webview",
"EarlyOut_PreviousFrameUnconsumed",
TRACE_EVENT_SCOPE_THREAD);
DidSkipCompositeInDraw();
- return client_->RequestDrawGL(java_canvas, false);
+ return gl_methods_->RequestDrawGL(java_canvas, false);
}
scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
if (!frame.get())
return false;
- shared_renderer_state_->SetCompositorFrame(frame.Pass(), false);
+ proxy_->SetCompositorFrame(frame.Pass(), false);
GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
- return client_->RequestDrawGL(java_canvas, false);
+ return gl_methods_->RequestDrawGL(java_canvas, false);
}
scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() {
@@ -254,7 +258,7 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() {
RequestMemoryPolicy(new_policy);
compositor_->SetMemoryPolicy(memory_policy_);
- parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints();
+ parent_draw_constraints_ = proxy_->GetParentDrawConstraints();
gfx::Size surface_size(width_, height_);
gfx::Rect viewport(surface_size);
gfx::Rect clip = viewport;
@@ -284,34 +288,20 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() {
return frame.Pass();
}
-void BrowserViewRenderer::UpdateParentDrawConstraints() {
+void BrowserViewRenderer::SetParentDrawConstraints() {
// Post an invalidate if the parent draw constraints are stale and there is
// no pending invalidate.
- bool needs_force_invalidate =
- shared_renderer_state_->NeedsForceInvalidateOnNextDrawGL();
+ bool needs_force_invalidate = proxy_->NeedsForceInvalidateOnNextDrawGL();
if (needs_force_invalidate ||
- !parent_draw_constraints_.Equals(
- shared_renderer_state_->ParentDrawConstraints())) {
- shared_renderer_state_->SetForceInvalidateOnNextDrawGL(false);
+ !parent_draw_constraints_.Equals(proxy_->GetParentDrawConstraints())) {
+ proxy_->SetForceInvalidateOnNextDrawGL(false);
EnsureContinuousInvalidation(true, needs_force_invalidate);
}
}
-void BrowserViewRenderer::ReturnUnusedResource(
- scoped_ptr<cc::CompositorFrame> frame) {
- if (!frame.get())
- return;
-
- cc::CompositorFrameAck frame_ack;
- cc::TransferableResource::ReturnResources(
- frame->delegated_frame_data->resource_list, &frame_ack.resources);
- if (compositor_ && !frame_ack.resources.empty())
- compositor_->ReturnResources(frame_ack);
-}
-
void BrowserViewRenderer::ReturnResourceFromParent() {
cc::CompositorFrameAck frame_ack;
- shared_renderer_state_->SwapReturnedResources(&frame_ack.resources);
+ proxy_->SwapReturnedResources(&frame_ack.resources);
if (compositor_ && !frame_ack.resources.empty()) {
compositor_->ReturnResources(frame_ack);
}
@@ -444,9 +434,8 @@ void BrowserViewRenderer::OnDetachedFromWindow() {
void BrowserViewRenderer::ReleaseHardware() {
DCHECK(hardware_enabled_);
- ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame());
+ // Unused resource held by proxy_ will be returned by the proxy.
boliu 2014/10/23 16:40:05 Can we not do this in this CL? If there's somethi
hush (inactive) 2014/10/24 21:31:33 I put this back. I guess I will do this in part 2,
ReturnResourceFromParent();
- DCHECK(shared_renderer_state_->ReturnedResourcesEmpty());
if (compositor_) {
compositor_->ReleaseHwDraw();
@@ -743,10 +732,12 @@ void BrowserViewRenderer::FallbackTickFired() {
if (compositor_needs_continuous_invalidate_ && compositor_) {
if (hardware_enabled_) {
ReturnResourceFromParent();
- ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame());
scoped_ptr<cc::CompositorFrame> frame = CompositeHw();
if (frame.get()) {
- shared_renderer_state_->SetCompositorFrame(frame.Pass(), true);
+ // The resources in the current uncommitted frame held by
+ // BrowserViewRendererProxy will be
+ // returned by BrowserViewRenderProxy
+ proxy_->SetCompositorFrame(frame.Pass(), true);
}
} else {
ForceFakeCompositeSW();

Powered by Google App Engine
This is Rietveld 408576698