Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2085)

Unified Diff: android_webview/browser/hardware_renderer.cc

Issue 273703008: aw: Refactor hardware init (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more refactoring Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/hardware_renderer.cc
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index f1528ec8f8c7c73af78c824e8932792ced24dde1..f2cf8e90b17cec80a443857cd5dfff71a943bc9a 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -6,7 +6,6 @@
#include "android_webview/browser/aw_gl_surface.h"
#include "android_webview/browser/browser_view_renderer_client.h"
-#include "android_webview/browser/scoped_app_gl_state_restore.h"
#include "android_webview/public/browser/draw_gl.h"
#include "base/debug/trace_event.h"
#include "base/strings/string_number_conversions.h"
@@ -16,30 +15,14 @@
#include "ui/gfx/geometry/rect_conversions.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/transform.h"
+#include "ui/gl/gl_bindings.h"
namespace android_webview {
-namespace {
-
-base::LazyInstance<scoped_refptr<internal::DeferredGpuCommandService> >
- g_service = LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
HardwareRenderer::HardwareRenderer(SharedRendererState* state)
: shared_renderer_state_(state),
- last_egl_context_(eglGetCurrentContext()),
- renderer_manager_key_(GLViewRendererManager::GetInstance()->PushBack(
- shared_renderer_state_)) {
+ last_egl_context_(eglGetCurrentContext()) {
DCHECK(last_egl_context_);
- if (!g_service.Get()) {
- g_service.Get() = new internal::DeferredGpuCommandService;
- content::SynchronousCompositor::SetGpuService(g_service.Get());
- }
-
- ScopedAppGLStateRestore state_restore(
- ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
- internal::ScopedAllowGL allow_gl;
gl_surface_ = new AwGLSurface;
bool success =
@@ -49,20 +32,15 @@ HardwareRenderer::HardwareRenderer(SharedRendererState* state)
}
HardwareRenderer::~HardwareRenderer() {
- GLViewRendererManager* render_manager = GLViewRendererManager::GetInstance();
- render_manager->Remove(renderer_manager_key_);
-
- ScopedAppGLStateRestore state_restore(
- ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
- internal::ScopedAllowGL allow_gl;
-
shared_renderer_state_->GetCompositor()->ReleaseHwDraw();
gl_surface_ = NULL;
}
-bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
+bool HardwareRenderer::DrawGL(bool stencil_enabled,
+ int framebuffer_binding_ext,
+ AwDrawGLInfo* draw_info,
+ DrawGLResult* result) {
TRACE_EVENT0("android_webview", "HardwareRenderer::DrawGL");
- GLViewRendererManager::GetInstance()->DidDrawGL(renderer_manager_key_);
// We need to watch if the current Android context has changed and enforce
// a clean-up in the compositor.
@@ -76,9 +54,6 @@ bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
if (last_egl_context_ != current_context)
DLOG(WARNING) << "EGLContextChanged";
- ScopedAppGLStateRestore state_restore(ScopedAppGLStateRestore::MODE_DRAW);
- internal::ScopedAllowGL allow_gl;
-
if (draw_info->mode != AwDrawGLInfo::kModeDraw)
return false;
@@ -86,8 +61,7 @@ bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
const DrawGLInput input = shared_renderer_state_->GetDrawGLInput();
SetCompositorMemoryPolicy();
- gl_surface_->SetBackingFrameBufferObject(
- state_restore.framebuffer_binding_ext());
+ gl_surface_->SetBackingFrameBufferObject(framebuffer_binding_ext);
gfx::Transform transform;
transform.matrix().setColMajorf(draw_info->transform);
@@ -104,13 +78,12 @@ bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
viewport.Intersect(gfx::ToEnclosingRect(view_rect));
}
- bool did_draw = shared_renderer_state_->GetCompositor()->
- DemandDrawHw(
- gfx::Size(draw_info->width, draw_info->height),
- transform,
- viewport,
- clip_rect,
- state_restore.stencil_enabled());
+ bool did_draw = shared_renderer_state_->GetCompositor()->DemandDrawHw(
+ gfx::Size(draw_info->width, draw_info->height),
+ transform,
+ viewport,
+ clip_rect,
+ stencil_enabled);
gl_surface_->ResetBackingFrameBufferObject();
if (did_draw) {
@@ -131,100 +104,4 @@ void HardwareRenderer::SetCompositorMemoryPolicy() {
}
}
-namespace internal {
-
-base::LazyInstance<base::ThreadLocalBoolean> ScopedAllowGL::allow_gl;
-
-// static
-bool ScopedAllowGL::IsAllowed() {
- return allow_gl.Get().Get();
-}
-
-ScopedAllowGL::ScopedAllowGL() {
- DCHECK(!allow_gl.Get().Get());
- allow_gl.Get().Set(true);
-
- if (g_service.Get())
- g_service.Get()->RunTasks();
-}
-
-ScopedAllowGL::~ScopedAllowGL() { allow_gl.Get().Set(false); }
-
-DeferredGpuCommandService::DeferredGpuCommandService() {}
-
-DeferredGpuCommandService::~DeferredGpuCommandService() {
- base::AutoLock lock(tasks_lock_);
- DCHECK(tasks_.empty());
-}
-
-// static
-void DeferredGpuCommandService::RequestProcessGLOnUIThread() {
- SharedRendererState* renderer_state =
- GLViewRendererManager::GetInstance()->GetMostRecentlyDrawn();
- if (!renderer_state) {
- LOG(ERROR) << "No hardware renderer. Deadlock likely";
- return;
- }
- renderer_state->ClientRequestDrawGL();
-}
-
-// Called from different threads!
-void DeferredGpuCommandService::ScheduleTask(const base::Closure& task) {
- {
- base::AutoLock lock(tasks_lock_);
- tasks_.push(task);
- }
- if (ScopedAllowGL::IsAllowed()) {
- RunTasks();
- } else {
- RequestProcessGLOnUIThread();
- }
-}
-
-void DeferredGpuCommandService::ScheduleIdleWork(
- const base::Closure& callback) {
- // TODO(sievers): Should this do anything?
-}
-
-bool DeferredGpuCommandService::UseVirtualizedGLContexts() { return true; }
-
-scoped_refptr<gpu::gles2::ShaderTranslatorCache>
-DeferredGpuCommandService::shader_translator_cache() {
- if (!shader_translator_cache_.get())
- shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache;
- return shader_translator_cache_;
-}
-
-void DeferredGpuCommandService::RunTasks() {
- bool has_more_tasks;
- {
- base::AutoLock lock(tasks_lock_);
- has_more_tasks = tasks_.size() > 0;
- }
-
- while (has_more_tasks) {
- base::Closure task;
- {
- base::AutoLock lock(tasks_lock_);
- task = tasks_.front();
- tasks_.pop();
- }
- task.Run();
- {
- base::AutoLock lock(tasks_lock_);
- has_more_tasks = tasks_.size() > 0;
- }
- }
-}
-
-void DeferredGpuCommandService::AddRef() const {
- base::RefCountedThreadSafe<DeferredGpuCommandService>::AddRef();
-}
-
-void DeferredGpuCommandService::Release() const {
- base::RefCountedThreadSafe<DeferredGpuCommandService>::Release();
-}
-
-} // namespace internal
-
} // namespace android_webview

Powered by Google App Engine
This is Rietveld 408576698