| 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..d48576bc2d9f854db181664675f25e1dda4ecdae 100644
|
| --- a/android_webview/browser/browser_view_renderer.cc
|
| +++ b/android_webview/browser/browser_view_renderer.cc
|
| @@ -68,11 +68,10 @@ 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_(ui_task_runner, this),
|
| web_contents_(web_contents),
|
| ui_task_runner_(ui_task_runner),
|
| compositor_(NULL),
|
| @@ -104,6 +103,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 +220,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 +236,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 +253,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 +263,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 +298,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 +321,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 +454,11 @@ 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());
|
| + DCHECK(shared_renderer_state_.ReturnedResourcesEmpty());
|
|
|
| if (compositor_) {
|
| compositor_->ReleaseHwDraw();
|
| @@ -744,10 +755,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();
|
|
|