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(); |