| 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
|
| index 488f915b65209451ffa264e536f79cb7d0c0c31f..af9da3effa80f90f02faed87ff361da011c16efc 100644
|
| --- a/android_webview/browser/shared_renderer_state.cc
|
| +++ b/android_webview/browser/shared_renderer_state.cc
|
| @@ -6,11 +6,11 @@
|
|
|
| #include <utility>
|
|
|
| -#include "android_webview/browser/browser_view_renderer.h"
|
| #include "android_webview/browser/child_frame.h"
|
| #include "android_webview/browser/deferred_gpu_command_service.h"
|
| #include "android_webview/browser/hardware_renderer.h"
|
| #include "android_webview/browser/scoped_app_gl_state_restore.h"
|
| +#include "android_webview/browser/shared_renderer_state_client.h"
|
| #include "android_webview/public/browser/draw_gl.h"
|
| #include "base/bind.h"
|
| #include "base/lazy_instance.h"
|
| @@ -87,16 +87,16 @@ base::LazyInstance<internal::RequestDrawGLTracker> g_request_draw_gl_tracker =
|
| }
|
|
|
| SharedRendererState::SharedRendererState(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop,
|
| - BrowserViewRenderer* browser_view_renderer)
|
| + SharedRendererStateClient* client,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop)
|
| : ui_loop_(ui_loop),
|
| - browser_view_renderer_(browser_view_renderer),
|
| + client_(client),
|
| renderer_manager_key_(GLViewRendererManager::GetInstance()->NullKey()),
|
| hardware_renderer_has_frame_(false),
|
| inside_hardware_release_(false),
|
| weak_factory_on_ui_thread_(this) {
|
| DCHECK(ui_loop_->BelongsToCurrentThread());
|
| - DCHECK(browser_view_renderer_);
|
| + DCHECK(client_);
|
| ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr();
|
| ResetRequestDrawGLCallback();
|
| }
|
| @@ -144,7 +144,7 @@ void SharedRendererState::ClientRequestDrawGLOnUI() {
|
| DCHECK(ui_loop_->BelongsToCurrentThread());
|
| ResetRequestDrawGLCallback();
|
| g_request_draw_gl_tracker.Get().SetQueuedFunctorOnUi(this);
|
| - if (!browser_view_renderer_->RequestDrawGL(false)) {
|
| + if (!client_->RequestDrawGL(false)) {
|
| g_request_draw_gl_tracker.Get().ResetPending();
|
| LOG(ERROR) << "Failed to request GL process. Deadlock likely";
|
| }
|
| @@ -152,7 +152,7 @@ void SharedRendererState::ClientRequestDrawGLOnUI() {
|
|
|
| void SharedRendererState::UpdateParentDrawConstraintsOnUI() {
|
| DCHECK(ui_loop_->BelongsToCurrentThread());
|
| - browser_view_renderer_->UpdateParentDrawConstraints();
|
| + client_->OnParentDrawConstraintsUpdated();
|
| }
|
|
|
| void SharedRendererState::SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) {
|
| @@ -165,13 +165,13 @@ gfx::Vector2d SharedRendererState::GetScrollOffsetOnRT() {
|
| return scroll_offset_;
|
| }
|
|
|
| -void SharedRendererState::SetCompositorFrameOnUI(scoped_ptr<ChildFrame> frame) {
|
| +void SharedRendererState::SetFrameOnUI(scoped_ptr<ChildFrame> frame) {
|
| base::AutoLock lock(lock_);
|
| DCHECK(!child_frame_.get());
|
| child_frame_ = std::move(frame);
|
| }
|
|
|
| -scoped_ptr<ChildFrame> SharedRendererState::PassCompositorFrameOnRT() {
|
| +scoped_ptr<ChildFrame> SharedRendererState::PassFrameOnRT() {
|
| base::AutoLock lock(lock_);
|
| hardware_renderer_has_frame_ =
|
| hardware_renderer_has_frame_ || child_frame_.get();
|
| @@ -314,25 +314,18 @@ void SharedRendererState::DrawGL(AwDrawGLInfo* draw_info) {
|
| DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
|
| }
|
|
|
| -void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() {
|
| - ReleaseCompositorResourcesIfNeededOnUI(true);
|
| -}
|
| -
|
| void SharedRendererState::DeleteHardwareRendererOnUI() {
|
| - ReleaseCompositorResourcesIfNeededOnUI(false);
|
| -}
|
| -
|
| -void SharedRendererState::ReleaseCompositorResourcesIfNeededOnUI(
|
| - bool release_hardware_draw) {
|
| DCHECK(ui_loop_->BelongsToCurrentThread());
|
| +
|
| InsideHardwareReleaseReset auto_inside_hardware_release_reset(this);
|
|
|
| - browser_view_renderer_->DetachFunctorFromView();
|
| - bool hardware_initialized = browser_view_renderer_->hardware_enabled();
|
| + client_->DetachFunctorFromView();
|
| +
|
| // If the WebView gets onTrimMemory >= MODERATE twice in a row, the 2nd
|
| // onTrimMemory will result in an unnecessary Render Thread DrawGL call.
|
| + bool hardware_initialized = HasFrameOnUI();
|
| if (hardware_initialized) {
|
| - bool draw_functor_succeeded = browser_view_renderer_->RequestDrawGL(true);
|
| + bool draw_functor_succeeded = client_->RequestDrawGL(true);
|
| if (!draw_functor_succeeded) {
|
| LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?";
|
| // Calling release on wrong thread intentionally.
|
| @@ -340,9 +333,6 @@ void SharedRendererState::ReleaseCompositorResourcesIfNeededOnUI(
|
| info.mode = AwDrawGLInfo::kModeProcess;
|
| DrawGL(&info);
|
| }
|
| -
|
| - if (release_hardware_draw)
|
| - browser_view_renderer_->ReleaseHardware();
|
| }
|
|
|
| GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
|
| @@ -357,7 +347,7 @@ void SharedRendererState::ReleaseCompositorResourcesIfNeededOnUI(
|
|
|
| if (hardware_initialized) {
|
| // Flush any invoke functors that's caused by ReleaseHardware.
|
| - browser_view_renderer_->RequestDrawGL(true);
|
| + client_->RequestDrawGL(true);
|
| }
|
| }
|
|
|
|
|