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 a79f97d89301400d9a0a6f46f342cb06f4b8d157..5ebcd230c6a18e16658f400341d6e9ce2b2afac2 100644 |
| --- a/android_webview/browser/browser_view_renderer.cc |
| +++ b/android_webview/browser/browser_view_renderer.cc |
| @@ -13,7 +13,6 @@ |
| #include "base/logging.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/stringprintf.h" |
| -#include "cc/output/compositor_frame.h" |
|
hush (inactive)
2014/10/15 18:17:30
why is this removed? we still use cc::compositorFr
boliu
2014/10/15 19:37:51
Added back.
|
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_switches.h" |
| #include "gpu/command_buffer/service/gpu_switches.h" |
| @@ -226,10 +225,6 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| return false; |
| ReturnResourceFromParent(); |
| - SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); |
| - RequestMemoryPolicy(new_policy); |
| - compositor_->SetMemoryPolicy(memory_policy_); |
| - |
| if (shared_renderer_state_->HasCompositorFrame()) { |
| TRACE_EVENT_INSTANT0("android_webview", |
| "EarlyOut_PreviousFrameUnconsumed", |
| @@ -238,6 +233,19 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| return client_->RequestDrawGL(java_canvas, false); |
| } |
| + scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
| + if (!frame.get()) |
| + return false; |
| + |
| + shared_renderer_state_->SetCompositorFrame(frame.Pass(), false); |
| + return client_->RequestDrawGL(java_canvas, false); |
| +} |
| + |
| +scoped_ptr<cc::CompositorFrame> BrowserViewRenderer::CompositeHw() { |
| + SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); |
| + RequestMemoryPolicy(new_policy); |
| + compositor_->SetMemoryPolicy(memory_policy_); |
| + |
| parent_draw_constraints_ = shared_renderer_state_->ParentDrawConstraints(); |
| gfx::Size surface_size(width_, height_); |
| gfx::Rect viewport(surface_size); |
| @@ -262,13 +270,12 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { |
| viewport_rect_for_tile_priority, |
| transform_for_tile_priority); |
| if (!frame.get()) |
| - return false; |
| + return frame.Pass(); |
| GlobalTileManager::GetInstance()->DidUse(tile_manager_key_); |
| - shared_renderer_state_->SetCompositorFrame(frame.Pass()); |
| DidComposite(); |
| - return client_->RequestDrawGL(java_canvas, false); |
| + return frame.Pass(); |
| } |
| void BrowserViewRenderer::UpdateParentDrawConstraints() { |
| @@ -710,7 +717,16 @@ void BrowserViewRenderer::FallbackTickFired() { |
| DCHECK(block_invalidates_); |
| fallback_tick_pending_ = false; |
| if (compositor_needs_continuous_invalidate_ && compositor_) { |
| - ForceFakeCompositeSW(); |
| + if (hardware_enabled_) { |
| + ReturnResourceFromParent(); |
| + ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame()); |
|
hush (inactive)
2014/10/15 18:17:30
there is also a frame in HardwareRenderer.commited
boliu
2014/10/15 19:37:51
I am calling SetFrameData twice in HWR::DrawGL :)
|
| + scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); |
| + if (frame.get()) { |
| + shared_renderer_state_->SetCompositorFrame(frame.Pass(), true); |
| + } |
| + } else { |
| + ForceFakeCompositeSW(); |
| + } |
| } else { |
| // Pretend we just composited to unblock further invalidates. |
| DidComposite(); |