| 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..33fad4f66416fd69484580d57e6aa7c97a4af619 100644
|
| --- a/android_webview/browser/browser_view_renderer.cc
|
| +++ b/android_webview/browser/browser_view_renderer.cc
|
| @@ -226,10 +226,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 +234,20 @@ 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);
|
| + GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
|
| + 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);
|
| @@ -261,14 +271,9 @@ bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) {
|
| clip,
|
| viewport_rect_for_tile_priority,
|
| transform_for_tile_priority);
|
| - if (!frame.get())
|
| - return false;
|
| -
|
| - GlobalTileManager::GetInstance()->DidUse(tile_manager_key_);
|
| -
|
| - shared_renderer_state_->SetCompositorFrame(frame.Pass());
|
| - DidComposite();
|
| - return client_->RequestDrawGL(java_canvas, false);
|
| + if (frame.get())
|
| + DidComposite();
|
| + return frame.Pass();
|
| }
|
|
|
| void BrowserViewRenderer::UpdateParentDrawConstraints() {
|
| @@ -710,7 +715,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());
|
| + 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();
|
|
|