Index: android_webview/browser/shared_renderer_state.cc |
diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc |
deleted file mode 100644 |
index 0de8371b1c1fcb05a3d471ad263cfd62eb267237..0000000000000000000000000000000000000000 |
--- a/android_webview/browser/shared_renderer_state.cc |
+++ /dev/null |
@@ -1,259 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "android_webview/browser/shared_renderer_state.h" |
- |
-#include "android_webview/browser/browser_view_renderer_client.h" |
-#include "base/bind.h" |
-#include "base/lazy_instance.h" |
-#include "base/location.h" |
- |
-namespace android_webview { |
- |
-namespace internal { |
- |
-class RequestDrawGLTracker { |
- public: |
- RequestDrawGLTracker(); |
- bool ShouldRequestOnNoneUiThread(SharedRendererState* state); |
- bool ShouldRequestOnUiThread(SharedRendererState* state); |
- void DidRequestOnUiThread(); |
- void ResetPending(); |
- |
- private: |
- base::Lock lock_; |
- SharedRendererState* pending_ui_; |
- SharedRendererState* pending_non_ui_; |
-}; |
- |
-RequestDrawGLTracker::RequestDrawGLTracker() |
- : pending_ui_(NULL), pending_non_ui_(NULL) { |
-} |
- |
-bool RequestDrawGLTracker::ShouldRequestOnNoneUiThread( |
- SharedRendererState* state) { |
- base::AutoLock lock(lock_); |
- if (pending_ui_ || pending_non_ui_) |
- return false; |
- pending_non_ui_ = state; |
- return true; |
-} |
- |
-bool RequestDrawGLTracker::ShouldRequestOnUiThread(SharedRendererState* state) { |
- base::AutoLock lock(lock_); |
- if (pending_non_ui_) { |
- pending_non_ui_->ResetRequestDrawGLCallback(); |
- pending_non_ui_ = NULL; |
- } |
- if (pending_ui_) |
- return false; |
- pending_ui_ = state; |
- return true; |
-} |
- |
-void RequestDrawGLTracker::ResetPending() { |
- base::AutoLock lock(lock_); |
- pending_non_ui_ = NULL; |
- pending_ui_ = NULL; |
-} |
- |
-} // namespace internal |
- |
-namespace { |
- |
-base::LazyInstance<internal::RequestDrawGLTracker> g_request_draw_gl_tracker = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-} |
- |
-SharedRendererState::SharedRendererState( |
- scoped_refptr<base::MessageLoopProxy> ui_loop, |
- BrowserViewRendererClient* client) |
- : ui_loop_(ui_loop), |
- client_on_ui_(client), |
- force_commit_(false), |
- inside_hardware_release_(false), |
- needs_force_invalidate_on_next_draw_gl_(false), |
- weak_factory_on_ui_thread_(this) { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
- DCHECK(client_on_ui_); |
- ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); |
- ResetRequestDrawGLCallback(); |
-} |
- |
-SharedRendererState::~SharedRendererState() { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
-} |
- |
-void SharedRendererState::ClientRequestDrawGL() { |
- if (ui_loop_->BelongsToCurrentThread()) { |
- if (!g_request_draw_gl_tracker.Get().ShouldRequestOnUiThread(this)) |
- return; |
- ClientRequestDrawGLOnUIThread(); |
- } else { |
- if (!g_request_draw_gl_tracker.Get().ShouldRequestOnNoneUiThread(this)) |
- return; |
- base::Closure callback; |
- { |
- base::AutoLock lock(lock_); |
- callback = request_draw_gl_closure_; |
- } |
- ui_loop_->PostTask(FROM_HERE, callback); |
- } |
-} |
- |
-void SharedRendererState::DidDrawGLProcess() { |
- g_request_draw_gl_tracker.Get().ResetPending(); |
-} |
- |
-void SharedRendererState::ResetRequestDrawGLCallback() { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
- base::AutoLock lock(lock_); |
- request_draw_gl_cancelable_closure_.Reset( |
- base::Bind(&SharedRendererState::ClientRequestDrawGLOnUIThread, |
- base::Unretained(this))); |
- request_draw_gl_closure_ = request_draw_gl_cancelable_closure_.callback(); |
-} |
- |
-void SharedRendererState::ClientRequestDrawGLOnUIThread() { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
- ResetRequestDrawGLCallback(); |
- if (!client_on_ui_->RequestDrawGL(NULL, false)) { |
- g_request_draw_gl_tracker.Get().ResetPending(); |
- LOG(ERROR) << "Failed to request GL process. Deadlock likely"; |
- } |
-} |
- |
-void SharedRendererState::UpdateParentDrawConstraintsOnUIThread() { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
- client_on_ui_->UpdateParentDrawConstraints(); |
-} |
- |
-void SharedRendererState::SetScrollOffset(gfx::Vector2d scroll_offset) { |
- base::AutoLock lock(lock_); |
- scroll_offset_ = scroll_offset; |
-} |
- |
-gfx::Vector2d SharedRendererState::GetScrollOffset() { |
- base::AutoLock lock(lock_); |
- return scroll_offset_; |
-} |
- |
-bool SharedRendererState::HasCompositorFrame() const { |
- base::AutoLock lock(lock_); |
- return compositor_frame_.get(); |
-} |
- |
-void SharedRendererState::SetCompositorFrame( |
- scoped_ptr<cc::CompositorFrame> frame, bool force_commit) { |
- base::AutoLock lock(lock_); |
- DCHECK(!compositor_frame_.get()); |
- compositor_frame_ = frame.Pass(); |
- force_commit_ = force_commit; |
-} |
- |
-scoped_ptr<cc::CompositorFrame> SharedRendererState::PassCompositorFrame() { |
- base::AutoLock lock(lock_); |
- return compositor_frame_.Pass(); |
-} |
- |
-bool SharedRendererState::ForceCommit() const { |
- base::AutoLock lock(lock_); |
- return force_commit_; |
-} |
- |
-bool SharedRendererState::UpdateDrawConstraints( |
- const ParentCompositorDrawConstraints& parent_draw_constraints) { |
- base::AutoLock lock(lock_); |
- if (needs_force_invalidate_on_next_draw_gl_ || |
- !parent_draw_constraints_.Equals(parent_draw_constraints)) { |
- parent_draw_constraints_ = parent_draw_constraints; |
- return true; |
- } |
- |
- return false; |
-} |
- |
-void SharedRendererState::PostExternalDrawConstraintsToChildCompositor( |
- const ParentCompositorDrawConstraints& parent_draw_constraints) { |
- if (UpdateDrawConstraints(parent_draw_constraints)) { |
- // No need to hold the lock_ during the post task. |
- ui_loop_->PostTask( |
- FROM_HERE, |
- base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread, |
- ui_thread_weak_ptr_)); |
- } |
-} |
- |
-void SharedRendererState::DidSkipCommitFrame() { |
- ui_loop_->PostTask( |
- FROM_HERE, |
- base::Bind(&SharedRendererState::DidSkipCommitFrameOnUIThread, |
- ui_thread_weak_ptr_)); |
-} |
- |
-void SharedRendererState::DidSkipCommitFrameOnUIThread() { |
- DCHECK(ui_loop_->BelongsToCurrentThread()); |
- client_on_ui_->DidSkipCommitFrame(); |
-} |
- |
-const ParentCompositorDrawConstraints |
-SharedRendererState::ParentDrawConstraints() const { |
- base::AutoLock lock(lock_); |
- return parent_draw_constraints_; |
-} |
- |
-void SharedRendererState::SetForceInvalidateOnNextDrawGL( |
- bool needs_force_invalidate_on_next_draw_gl) { |
- base::AutoLock lock(lock_); |
- needs_force_invalidate_on_next_draw_gl_ = |
- needs_force_invalidate_on_next_draw_gl; |
-} |
- |
-bool SharedRendererState::NeedsForceInvalidateOnNextDrawGL() const { |
- base::AutoLock lock(lock_); |
- return needs_force_invalidate_on_next_draw_gl_; |
-} |
- |
-void SharedRendererState::SetInsideHardwareRelease(bool inside) { |
- base::AutoLock lock(lock_); |
- inside_hardware_release_ = inside; |
-} |
- |
-bool SharedRendererState::IsInsideHardwareRelease() const { |
- base::AutoLock lock(lock_); |
- return inside_hardware_release_; |
-} |
- |
-void SharedRendererState::InsertReturnedResources( |
- const cc::ReturnedResourceArray& resources) { |
- base::AutoLock lock(lock_); |
- returned_resources_.insert( |
- returned_resources_.end(), resources.begin(), resources.end()); |
-} |
- |
-void SharedRendererState::SwapReturnedResources( |
- cc::ReturnedResourceArray* resources) { |
- DCHECK(resources->empty()); |
- base::AutoLock lock(lock_); |
- resources->swap(returned_resources_); |
-} |
- |
-bool SharedRendererState::ReturnedResourcesEmpty() const { |
- base::AutoLock lock(lock_); |
- return returned_resources_.empty(); |
-} |
- |
-InsideHardwareReleaseReset::InsideHardwareReleaseReset( |
- SharedRendererState* shared_renderer_state) |
- : shared_renderer_state_(shared_renderer_state) { |
- DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); |
- shared_renderer_state_->SetInsideHardwareRelease(true); |
-} |
- |
-InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { |
- shared_renderer_state_->SetInsideHardwareRelease(false); |
-} |
- |
-} // namespace android_webview |