Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index d2df4ffc3523a0552ca6933c52f672eda7a58151..ca854ee9712c81e554ebfdb9048f533f643d77ac 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -55,7 +55,12 @@ bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) { |
TRACE_EVENT0("cc", "SingleThreadProxy::CompositeAndReadback"); |
DCHECK(Proxy::IsMainThread()); |
- if (!CommitAndComposite(base::TimeTicks::Now())) |
+ gfx::Rect device_viewport_damage_rect = rect; |
+ |
+ LayerTreeHostImpl::FrameData frame; |
+ if (!CommitAndComposite(base::TimeTicks::Now(), |
+ device_viewport_damage_rect, |
+ &frame)) |
return false; |
{ |
@@ -65,7 +70,7 @@ bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) { |
if (layer_tree_host_impl_->IsContextLost()) |
return false; |
- layer_tree_host_impl_->SwapBuffers(); |
+ layer_tree_host_impl_->SwapBuffers(frame); |
} |
DidSwapFrame(); |
@@ -334,8 +339,13 @@ void SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() { |
// Called by the legacy scheduling path (e.g. where render_widget does the |
// scheduling) |
void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
- if (CommitAndComposite(frame_begin_time)) { |
- layer_tree_host_impl_->SwapBuffers(); |
+ gfx::Rect device_viewport_damage_rect; |
+ |
+ LayerTreeHostImpl::FrameData frame; |
+ if (CommitAndComposite(frame_begin_time, |
+ device_viewport_damage_rect, |
+ &frame)) { |
+ layer_tree_host_impl_->SwapBuffers(frame); |
DidSwapFrame(); |
} |
} |
@@ -364,7 +374,10 @@ void SingleThreadProxy::ForceSerializeOnSwapBuffers() { |
void SingleThreadProxy::OnSwapBuffersCompleteOnImplThread() { NOTREACHED(); } |
-bool SingleThreadProxy::CommitAndComposite(base::TimeTicks frame_begin_time) { |
+bool SingleThreadProxy::CommitAndComposite( |
+ base::TimeTicks frame_begin_time, |
+ gfx::Rect device_viewport_damage_rect, |
+ LayerTreeHostImpl::FrameData* frame) { |
DCHECK(Proxy::IsMainThread()); |
if (!layer_tree_host_->InitializeRendererIfNeeded()) |
@@ -388,14 +401,19 @@ bool SingleThreadProxy::CommitAndComposite(base::TimeTicks frame_begin_time) { |
layer_tree_host_->WillCommit(); |
DoCommit(queue.Pass()); |
- bool result = DoComposite(offscreen_context_provider, frame_begin_time); |
+ bool result = DoComposite(offscreen_context_provider, |
+ frame_begin_time, |
+ device_viewport_damage_rect, |
+ frame); |
layer_tree_host_->DidBeginFrame(); |
return result; |
} |
bool SingleThreadProxy::DoComposite( |
scoped_refptr<cc::ContextProvider> offscreen_context_provider, |
- base::TimeTicks frame_begin_time) { |
+ base::TimeTicks frame_begin_time, |
+ gfx::Rect device_viewport_damage_rect, |
+ LayerTreeHostImpl::FrameData* frame) { |
DCHECK(!output_surface_lost_); |
{ |
DebugScopedSetImplThread impl(this); |
@@ -416,10 +434,9 @@ bool SingleThreadProxy::DoComposite( |
if (!layer_tree_host_impl_->CanDraw()) |
return false; |
- LayerTreeHostImpl::FrameData frame; |
- layer_tree_host_impl_->PrepareToDraw(&frame); |
- layer_tree_host_impl_->DrawLayers(&frame, frame_begin_time); |
- layer_tree_host_impl_->DidDrawAllLayers(frame); |
+ layer_tree_host_impl_->PrepareToDraw(frame, device_viewport_damage_rect); |
+ layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); |
+ layer_tree_host_impl_->DidDrawAllLayers(*frame); |
output_surface_lost_ = layer_tree_host_impl_->IsContextLost(); |
layer_tree_host_impl_->BeginNextFrame(); |