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(); |