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 3b43ad4d9751835da6ba226bd6eeea5ec6141189..030fd605779e27468d293dd2566b840b720d41b2 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -14,6 +14,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
#include "cc/output/compositor_frame.h" |
+#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/common/content_switches.h" |
#include "gpu/command_buffer/service/gpu_switches.h" |
@@ -68,11 +69,13 @@ void BrowserViewRenderer::CalculateTileMemoryPolicy() { |
BrowserViewRenderer::BrowserViewRenderer( |
BrowserViewRendererClient* client, |
- SharedRendererState* shared_renderer_state, |
content::WebContents* web_contents, |
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) |
: client_(client), |
- shared_renderer_state_(shared_renderer_state), |
+ shared_renderer_state_( |
+ content::BrowserThread::GetMessageLoopProxyForThread( |
boliu
2014/10/24 22:12:01
pass in ui_task_runner
hush (inactive)
2014/10/24 22:30:15
SRS needs a base::MessageLoopProxy, which is a chi
|
+ content::BrowserThread::UI), |
+ this), |
web_contents_(web_contents), |
ui_task_runner_(ui_task_runner), |
compositor_(NULL), |
@@ -104,6 +107,15 @@ BrowserViewRenderer::~BrowserViewRenderer() { |
// policy should have already been updated. |
} |
+SharedRendererState* BrowserViewRenderer::GetSharedRendererState() { |
+ return &shared_renderer_state_; |
+} |
+ |
+bool BrowserViewRenderer::RequestDrawGL(jobject canvas, |
+ bool wait_for_completion) { |
+ return client_->RequestDrawGL(canvas, wait_for_completion); |
+} |
+ |
// This function updates the resource allocation in GlobalTileManager. |
void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
@@ -212,7 +224,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
if (!compositor_) |
return false; |
- shared_renderer_state_->SetScrollOffset(last_on_draw_scroll_offset_); |
+ shared_renderer_state_.SetScrollOffsetOnUI(last_on_draw_scroll_offset_); |
if (!hardware_enabled_) { |
hardware_enabled_ = compositor_->InitializeHwDraw(); |
@@ -228,12 +240,12 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
TRACE_EVENT_INSTANT0("android_webview", |
"EarlyOut_EmptyVisibleRect", |
TRACE_EVENT_SCOPE_THREAD); |
- shared_renderer_state_->SetForceInvalidateOnNextDrawGL(true); |
+ shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(true); |
return client_->RequestDrawGL(java_canvas, false); |
} |
ReturnResourceFromParent(); |
- if (shared_renderer_state_->HasCompositorFrame()) { |
+ if (shared_renderer_state_.HasCompositorFrameOnUI()) { |
TRACE_EVENT_INSTANT0("android_webview", |
"EarlyOut_PreviousFrameUnconsumed", |
TRACE_EVENT_SCOPE_THREAD); |
@@ -245,7 +257,7 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
if (!frame.get()) |
return false; |
- shared_renderer_state_->SetCompositorFrame(frame.Pass(), false); |
+ shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false); |
GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); |
return client_->RequestDrawGL(java_canvas, false); |
} |
@@ -255,7 +267,8 @@ scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
RequestMemoryPolicy(new_policy); |
compositor_->SetMemoryPolicy(memory_policy_); |
- parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); |
+ parent_draw_constraints_ = |
+ shared_renderer_state_.GetParentDrawConstraintsOnUI(); |
gfx::Size surface_size(width_, height_); |
gfx::Rect viewport(surface_size); |
gfx::Rect clip = viewport; |
@@ -289,11 +302,11 @@ void BrowserViewRenderer::UpdateParentDrawConstraints() { |
// Post an invalidate if the parent draw constraints are stale and there is |
// no pending invalidate. |
bool needs_force_invalidate = |
- shared_renderer_state_->NeedsForceInvalidateOnNextDrawGL(); |
+ shared_renderer_state_.NeedsForceInvalidateOnNextDrawGLOnUI(); |
if (needs_force_invalidate || |
!parent_draw_constraints_.Equals( |
- shared_renderer_state_->ParentDrawConstraints())) { |
- shared_renderer_state_->SetForceInvalidateOnNextDrawGL(false); |
+ shared_renderer_state_.GetParentDrawConstraintsOnUI())) { |
+ shared_renderer_state_.SetForceInvalidateOnNextDrawGLOnUI(false); |
EnsureContinuousInvalidation(true, needs_force_invalidate); |
} |
} |
@@ -312,7 +325,7 @@ void BrowserViewRenderer::ReturnUnusedResource( |
void BrowserViewRenderer::ReturnResourceFromParent() { |
cc::CompositorFrameAck frame_ack; |
- shared_renderer_state_->SwapReturnedResources(&frame_ack.resources); |
+ shared_renderer_state_.SwapReturnedResourcesOnUI(&frame_ack.resources); |
if (compositor_ && !frame_ack.resources.empty()) { |
compositor_->ReturnResources(frame_ack); |
} |
@@ -445,9 +458,10 @@ void BrowserViewRenderer::OnDetachedFromWindow() { |
void BrowserViewRenderer::ReleaseHardware() { |
DCHECK(hardware_enabled_); |
- ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame()); |
+ // TODO(hush): do this in somewhere else. Either in hardware render or in |
+ // shared renderer state. |
+ ReturnUnusedResource(shared_renderer_state_.PassCompositorFrame()); |
ReturnResourceFromParent(); |
- DCHECK(shared_renderer_state_->ReturnedResourcesEmpty()); |
hush (inactive)
2014/10/24 21:37:41
We don't need this because we have an equivalent D
boliu
2014/10/24 22:12:01
Keep this for now.
It's not quite the same. What
hush (inactive)
2014/10/24 22:30:15
ok
|
if (compositor_) { |
compositor_->ReleaseHwDraw(); |
@@ -744,10 +758,10 @@ void BrowserViewRenderer::FallbackTickFired() { |
if (compositor_needs_continuous_invalidate_ && compositor_) { |
if (hardware_enabled_) { |
ReturnResourceFromParent(); |
- ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame()); |
+ ReturnUnusedResource(shared_renderer_state_.PassCompositorFrame()); |
scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
if (frame.get()) { |
- shared_renderer_state_->SetCompositorFrame(frame.Pass(), true); |
+ shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), true); |
} |
} else { |
ForceFakeCompositeSW(); |