Chromium Code Reviews| 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 3c1ceb42be1d1764d60340660eea313ab09ef9aa..4377b605b78ecb2ff5d9a1a42a8c791ff0748a0f 100644 |
| --- a/android_webview/browser/browser_view_renderer.cc |
| +++ b/android_webview/browser/browser_view_renderer.cc |
| @@ -6,7 +6,6 @@ |
| #include "android_webview/browser/browser_view_renderer_client.h" |
| #include "android_webview/browser/shared_renderer_state.h" |
| -#include "android_webview/common/aw_switches.h" |
| #include "android_webview/public/browser/draw_gl.h" |
| #include "base/android/jni_android.h" |
| #include "base/auto_reset.h" |
| @@ -17,7 +16,6 @@ |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/stringprintf.h" |
| #include "cc/output/compositor_frame.h" |
| -#include "content/public/browser/android/synchronous_compositor.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_switches.h" |
| @@ -126,7 +124,7 @@ BrowserViewRenderer::BrowserViewRenderer( |
| weak_factory_on_ui_thread_(this), |
| ui_thread_weak_ptr_(weak_factory_on_ui_thread_.GetWeakPtr()), |
| ui_task_runner_(ui_task_runner), |
| - has_compositor_(false), |
| + compositor_(NULL), |
| is_paused_(false), |
| view_visible_(false), |
| window_visible_(false), |
| @@ -145,8 +143,8 @@ BrowserViewRenderer::BrowserViewRenderer( |
| CHECK(web_contents_); |
| content::SynchronousCompositor::SetClientForWebContents(web_contents_, this); |
| - // Currently the logic in this class relies on |has_compositor_| remaining |
| - // false until the DidInitializeCompositor() call, hence it is not set here. |
| + // Currently the logic in this class relies on |compositor_| remaining |
| + // NULL until the DidInitializeCompositor() call, hence it is not set here. |
| } |
| BrowserViewRenderer::~BrowserViewRenderer() { |
| @@ -179,7 +177,7 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
| // Just set the memory limit to 0 and drop all tiles. This will be reset to |
| // normal levels in the next DrawGL call. |
| SynchronousCompositorMemoryPolicy zero_policy; |
| - if (shared_renderer_state_->GetMemoryPolicy() == zero_policy) |
| + if (memory_policy_ == zero_policy) |
| return; |
| TRACE_EVENT0("android_webview", "BrowserViewRenderer::TrimMemory"); |
| @@ -225,24 +223,21 @@ void BrowserViewRenderer::SetNumTiles(size_t num_tiles, |
| return; |
| num_tiles_ = num_tiles; |
| - SynchronousCompositorMemoryPolicy new_policy; |
| - new_policy.num_resources_limit = num_tiles_; |
| - new_policy.bytes_limit = num_bytes_; |
| - shared_renderer_state_->SetMemoryPolicy(new_policy); |
| + memory_policy_.num_resources_limit = num_tiles_; |
| + memory_policy_.bytes_limit = num_bytes_; |
| if (effective_immediately) |
| - EnforceMemoryPolicyImmediately(new_policy); |
| + EnforceMemoryPolicyImmediately(memory_policy_); |
| } |
| void BrowserViewRenderer::EnforceMemoryPolicyImmediately( |
| SynchronousCompositorMemoryPolicy new_policy) { |
| - shared_renderer_state_->GetCompositor()->SetMemoryPolicy(new_policy); |
| + compositor_->SetMemoryPolicy(new_policy); |
| ForceFakeCompositeSW(); |
| - shared_renderer_state_->SetMemoryPolicyDirty(false); |
| } |
| size_t BrowserViewRenderer::GetNumTiles() const { |
| - return shared_renderer_state_->GetMemoryPolicy().num_resources_limit; |
| + return memory_policy_.num_resources_limit; |
| } |
| bool BrowserViewRenderer::OnDraw(jobject java_canvas, |
| @@ -256,57 +251,20 @@ bool BrowserViewRenderer::OnDraw(jobject java_canvas, |
| if (clear_view_) |
| return false; |
| - if (is_hardware_canvas && attached_to_window_) { |
| - if (switches::UbercompEnabled()) { |
| - return OnDrawHardware(java_canvas); |
| - } else { |
| - return OnDrawHardwareLegacy(java_canvas); |
| - } |
| - } |
| + if (is_hardware_canvas && attached_to_window_) |
| + return OnDrawHardware(java_canvas); |
| // Perform a software draw |
| return DrawSWInternal(java_canvas, clip); |
| } |
| -bool BrowserViewRenderer::OnDrawHardwareLegacy(jobject java_canvas) { |
| - scoped_ptr<DrawGLInput> draw_gl_input(new DrawGLInput); |
| - draw_gl_input->scroll_offset = last_on_draw_scroll_offset_; |
| - draw_gl_input->global_visible_rect = last_on_draw_global_visible_rect_; |
| - draw_gl_input->width = width_; |
| - draw_gl_input->height = height_; |
| - |
| - SynchronousCompositorMemoryPolicy old_policy = |
| - shared_renderer_state_->GetMemoryPolicy(); |
| - SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); |
| - RequestMemoryPolicy(new_policy); |
| - // We should be performing a hardware draw here. If we don't have the |
| - // compositor yet or if RequestDrawGL fails, it means we failed this draw |
| - // and thus return false here to clear to background color for this draw. |
| - bool did_draw_gl = |
| - has_compositor_ && client_->RequestDrawGL(java_canvas, false); |
| - if (did_draw_gl) { |
| - GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); |
| - shared_renderer_state_->SetDrawGLInput(draw_gl_input.Pass()); |
| - } else { |
| - RequestMemoryPolicy(old_policy); |
| - } |
| - |
| - return did_draw_gl; |
| -} |
| - |
| -void BrowserViewRenderer::DidDrawGL(scoped_ptr<DrawGLResult> result) { |
| - DidComposite(!result->clip_contains_visible_rect); |
|
hush (inactive)
2014/06/16 21:41:50
after you delete this line, DidComposite will alwa
boliu
2014/06/16 22:43:27
Good catch. Removed the arg to DidComposite
Force
|
| -} |
| - |
| bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| - if (!has_compositor_) |
| + if (!compositor_) |
| return false; |
| if (!hardware_enabled_) { |
| - hardware_enabled_ = |
| - shared_renderer_state_->GetCompositor()->InitializeHwDraw(NULL); |
| + hardware_enabled_ = compositor_->InitializeHwDraw(NULL); |
|
hush (inactive)
2014/06/16 21:41:50
what does it mean to initialize hw draw with a NUL
boliu
2014/06/16 22:43:27
Good catch again, removed the GLSurface path.
Nor
|
| if (hardware_enabled_) { |
| - gpu::GLInProcessContext* share_context = |
| - shared_renderer_state_->GetCompositor()->GetShareContext(); |
| + gpu::GLInProcessContext* share_context = compositor_->GetShareContext(); |
| DCHECK(share_context); |
| shared_renderer_state_->SetSharedContext(share_context); |
| } |
| @@ -317,12 +275,10 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| ReturnResources(); |
| SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); |
| RequestMemoryPolicy(new_policy); |
| - shared_renderer_state_->GetCompositor()->SetMemoryPolicy( |
| - shared_renderer_state_->GetMemoryPolicy()); |
| + compositor_->SetMemoryPolicy(memory_policy_); |
| scoped_ptr<DrawGLInput> draw_gl_input(new DrawGLInput); |
| draw_gl_input->scroll_offset = last_on_draw_scroll_offset_; |
| - draw_gl_input->global_visible_rect = last_on_draw_global_visible_rect_; |
| draw_gl_input->width = width_; |
| draw_gl_input->height = height_; |
| @@ -333,9 +289,8 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| // See crbug.com/372073. |
| gfx::Rect clip = viewport; |
| bool stencil_enabled = false; |
| - scoped_ptr<cc::CompositorFrame> frame = |
| - shared_renderer_state_->GetCompositor()->DemandDrawHw( |
| - surface_size, transform, viewport, clip, stencil_enabled); |
| + scoped_ptr<cc::CompositorFrame> frame = compositor_->DemandDrawHw( |
| + surface_size, transform, viewport, clip, stencil_enabled); |
| if (!frame.get()) |
| return false; |
| @@ -358,13 +313,12 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| return false; |
| } |
| -void BrowserViewRenderer::DidDrawDelegated(scoped_ptr<DrawGLResult> result) { |
| +void BrowserViewRenderer::DidDrawDelegated() { |
| if (!ui_task_runner_->BelongsToCurrentThread()) { |
| // TODO(boliu): This should be a cancelable callback. |
| ui_task_runner_->PostTask(FROM_HERE, |
| base::Bind(&BrowserViewRenderer::DidDrawDelegated, |
| - ui_thread_weak_ptr_, |
| - base::Passed(&result))); |
| + ui_thread_weak_ptr_)); |
| return; |
| } |
| ReturnResources(); |
| @@ -374,7 +328,7 @@ void BrowserViewRenderer::ReturnResources() { |
| cc::CompositorFrameAck frame_ack; |
| shared_renderer_state_->SwapReturnedResources(&frame_ack.resources); |
| if (!frame_ack.resources.empty()) { |
| - shared_renderer_state_->GetCompositor()->ReturnResources(frame_ack); |
| + compositor_->ReturnResources(frame_ack); |
| } |
| } |
| @@ -386,7 +340,7 @@ bool BrowserViewRenderer::DrawSWInternal(jobject java_canvas, |
| return true; |
| } |
| - if (!has_compositor_) { |
| + if (!compositor_) { |
| TRACE_EVENT_INSTANT0( |
| "android_webview", "EarlyOut_NoCompositor", TRACE_EVENT_SCOPE_THREAD); |
| return false; |
| @@ -417,7 +371,7 @@ skia::RefPtr<SkPicture> BrowserViewRenderer::CapturePicture(int width, |
| SkPictureRecorder recorder; |
| SkCanvas* rec_canvas = recorder.beginRecording(width, height, NULL, 0); |
| - if (has_compositor_) |
| + if (compositor_) |
| CompositeSW(rec_canvas); |
| return skia::AdoptRef(recorder.endRecording()); |
| } |
| @@ -504,8 +458,7 @@ void BrowserViewRenderer::OnDetachedFromWindow() { |
| ReturnResources(); |
| DCHECK(shared_renderer_state_->ReturnedResourcesEmpty()); |
| - if (switches::UbercompEnabled()) |
| - shared_renderer_state_->GetCompositor()->ReleaseHwDraw(); |
| + compositor_->ReleaseHwDraw(); |
| shared_renderer_state_->SetSharedContext(NULL); |
| hardware_enabled_ = false; |
| } |
| @@ -535,21 +488,19 @@ void BrowserViewRenderer::DidInitializeCompositor( |
| TRACE_EVENT0("android_webview", |
| "BrowserViewRenderer::DidInitializeCompositor"); |
| DCHECK(compositor); |
| - DCHECK(!has_compositor_); |
| + DCHECK(!compositor_); |
| DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
| - has_compositor_ = true; |
| - shared_renderer_state_->SetCompositorOnUiThread(compositor); |
| + compositor_ = compositor; |
| } |
| void BrowserViewRenderer::DidDestroyCompositor( |
| content::SynchronousCompositor* compositor) { |
| TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor"); |
| - DCHECK(has_compositor_); |
| + DCHECK(compositor_); |
| DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
| - has_compositor_ = false; |
| - shared_renderer_state_->SetCompositorOnUiThread(NULL); |
| + compositor_ = NULL; |
| SynchronousCompositorMemoryPolicy zero_policy; |
| - DCHECK(shared_renderer_state_->GetMemoryPolicy() == zero_policy); |
| + DCHECK(memory_policy_ == zero_policy); |
| } |
| void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) { |
| @@ -625,9 +576,8 @@ void BrowserViewRenderer::ScrollTo(gfx::Vector2d scroll_offset) { |
| "y", |
| scroll_offset_dip.y()); |
| - if (has_compositor_) |
| - shared_renderer_state_->GetCompositor()-> |
| - DidChangeRootLayerScrollOffset(); |
| + if (compositor_) |
| + compositor_->DidChangeRootLayerScrollOffset(); |
| } |
| void BrowserViewRenderer::DidUpdateContent() { |
| @@ -835,12 +785,12 @@ void BrowserViewRenderer::FallbackTickFired() { |
| // This should only be called if OnDraw or DrawGL did not come in time, which |
| // means block_invalidates_ must still be true. |
| DCHECK(block_invalidates_); |
| - if (compositor_needs_continuous_invalidate_ && has_compositor_) |
| + if (compositor_needs_continuous_invalidate_ && compositor_) |
| ForceFakeCompositeSW(); |
| } |
| void BrowserViewRenderer::ForceFakeCompositeSW() { |
| - DCHECK(has_compositor_); |
| + DCHECK(compositor_); |
| SkBitmap bitmap; |
| bitmap.allocN32Pixels(1, 1); |
| bitmap.eraseColor(0); |
| @@ -849,9 +799,8 @@ void BrowserViewRenderer::ForceFakeCompositeSW() { |
| } |
| bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { |
| - DCHECK(has_compositor_); |
| - bool result = shared_renderer_state_->GetCompositor()-> |
| - DemandDrawSw(canvas); |
| + DCHECK(compositor_); |
| + bool result = compositor_->DemandDrawSw(canvas); |
| DidComposite(false); |
| return result; |
| } |