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

Side by Side Diff: android_webview/browser/hardware_renderer.cc

Issue 251843006: aw: Add new DrawGL modes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move share state 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | android_webview/public/browser/draw_gl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/hardware_renderer.h" 5 #include "android_webview/browser/hardware_renderer.h"
6 6
7 #include "android_webview/browser/aw_gl_surface.h" 7 #include "android_webview/browser/aw_gl_surface.h"
8 #include "android_webview/browser/browser_view_renderer_client.h" 8 #include "android_webview/browser/browser_view_renderer_client.h"
9 #include "android_webview/browser/gl_view_renderer_manager.h" 9 #include "android_webview/browser/gl_view_renderer_manager.h"
10 #include "android_webview/browser/scoped_app_gl_state_restore.h" 10 #include "android_webview/browser/scoped_app_gl_state_restore.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT); 66 ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
67 internal::ScopedAllowGL allow_gl; 67 internal::ScopedAllowGL allow_gl;
68 68
69 shared_renderer_state_->GetCompositor()->ReleaseHwDraw(); 69 shared_renderer_state_->GetCompositor()->ReleaseHwDraw();
70 gl_surface_ = NULL; 70 gl_surface_ = NULL;
71 } 71 }
72 72
73 bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) { 73 bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
74 TRACE_EVENT0("android_webview", "HardwareRenderer::DrawGL"); 74 TRACE_EVENT0("android_webview", "HardwareRenderer::DrawGL");
75 GLViewRendererManager::GetInstance()->DidDrawGL(manager_key_); 75 GLViewRendererManager::GetInstance()->DidDrawGL(manager_key_);
76 const DrawGLInput input = shared_renderer_state_->GetDrawGLInput();
77 76
78 // We need to watch if the current Android context has changed and enforce 77 // We need to watch if the current Android context has changed and enforce
79 // a clean-up in the compositor. 78 // a clean-up in the compositor.
80 EGLContext current_context = eglGetCurrentContext(); 79 EGLContext current_context = eglGetCurrentContext();
81 if (!current_context) { 80 if (!current_context) {
82 DLOG(ERROR) << "DrawGL called without EGLContext"; 81 DLOG(ERROR) << "DrawGL called without EGLContext";
83 return false; 82 return false;
84 } 83 }
85 84
86 // TODO(boliu): Handle context loss. 85 // TODO(boliu): Handle context loss.
87 if (last_egl_context_ != current_context) 86 if (last_egl_context_ != current_context)
88 DLOG(WARNING) << "EGLContextChanged"; 87 DLOG(WARNING) << "EGLContextChanged";
89 88
90 ScopedAppGLStateRestore state_restore(ScopedAppGLStateRestore::MODE_DRAW); 89 ScopedAppGLStateRestore state_restore(ScopedAppGLStateRestore::MODE_DRAW);
91 internal::ScopedAllowGL allow_gl; 90 internal::ScopedAllowGL allow_gl;
92 91
93 if (draw_info->mode == AwDrawGLInfo::kModeProcess) 92 if (draw_info->mode != AwDrawGLInfo::kModeDraw)
94 return false; 93 return false;
95 94
95 // Should only need to access SharedRendererState in kModeDraw and kModeSync.
96 const DrawGLInput input = shared_renderer_state_->GetDrawGLInput();
97
96 // Update memory budget. This will no-op in compositor if the policy has not 98 // Update memory budget. This will no-op in compositor if the policy has not
97 // changed since last draw. 99 // changed since last draw.
98 content::SynchronousCompositorMemoryPolicy policy; 100 content::SynchronousCompositorMemoryPolicy policy;
99 policy.bytes_limit = g_memory_multiplier * kBytesPerPixel * 101 policy.bytes_limit = g_memory_multiplier * kBytesPerPixel *
100 input.global_visible_rect.width() * 102 input.global_visible_rect.width() *
101 input.global_visible_rect.height(); 103 input.global_visible_rect.height();
102 // Round up to a multiple of kMemoryAllocationStep. 104 // Round up to a multiple of kMemoryAllocationStep.
103 policy.bytes_limit = 105 policy.bytes_limit =
104 (policy.bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep; 106 (policy.bytes_limit / kMemoryAllocationStep + 1) * kMemoryAllocationStep;
105 policy.num_resources_limit = g_num_gralloc_limit; 107 policy.num_resources_limit = g_num_gralloc_limit;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 base::RefCountedThreadSafe<DeferredGpuCommandService>::AddRef(); 296 base::RefCountedThreadSafe<DeferredGpuCommandService>::AddRef();
295 } 297 }
296 298
297 void DeferredGpuCommandService::Release() const { 299 void DeferredGpuCommandService::Release() const {
298 base::RefCountedThreadSafe<DeferredGpuCommandService>::Release(); 300 base::RefCountedThreadSafe<DeferredGpuCommandService>::Release();
299 } 301 }
300 302
301 } // namespace internal 303 } // namespace internal
302 304
303 } // namespace android_webview 305 } // namespace android_webview
OLDNEW
« no previous file with comments | « no previous file | android_webview/public/browser/draw_gl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698