Index: content/browser/android/in_process/synchronous_compositor_impl.cc |
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc |
index 4d64521a57bde82141caef4440af9e771d808c81..e5c789b7b09686c7b16c3d1c6103aa883a803e65 100644 |
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc |
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc |
@@ -4,6 +4,8 @@ |
#include "content/browser/android/in_process/synchronous_compositor_impl.h" |
+#include <utility> |
+ |
#include "base/auto_reset.h" |
#include "base/bind.h" |
#include "base/lazy_instance.h" |
@@ -163,19 +165,16 @@ scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw( |
DCHECK(CalledOnValidThread()); |
DCHECK(output_surface_); |
DCHECK(begin_frame_source_); |
+ DCHECK(!frame_holder_); |
- scoped_ptr<cc::CompositorFrame> frame = |
- output_surface_->DemandDrawHw(surface_size, |
- transform, |
- viewport, |
- clip, |
- viewport_rect_for_tile_priority, |
- transform_for_tile_priority); |
+ output_surface_->DemandDrawHw(surface_size, transform, viewport, clip, |
+ viewport_rect_for_tile_priority, |
+ transform_for_tile_priority); |
- if (frame.get()) |
- UpdateFrameMetaData(frame->metadata); |
+ if (frame_holder_) |
+ UpdateFrameMetaData(frame_holder_->metadata); |
- return frame.Pass(); |
+ return std::move(frame_holder_); |
} |
void SynchronousCompositorImpl::ReturnResources( |
@@ -188,14 +187,23 @@ bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { |
DCHECK(CalledOnValidThread()); |
DCHECK(output_surface_); |
DCHECK(begin_frame_source_); |
+ DCHECK(!frame_holder_); |
+ |
+ output_surface_->DemandDrawSw(canvas); |
- scoped_ptr<cc::CompositorFrame> frame = |
- output_surface_->DemandDrawSw(canvas); |
+ bool success = !!frame_holder_; |
+ if (frame_holder_) { |
+ UpdateFrameMetaData(frame_holder_->metadata); |
+ frame_holder_.reset(); |
+ } |
- if (frame.get()) |
- UpdateFrameMetaData(frame->metadata); |
+ return success; |
+} |
- return !!frame.get(); |
+void SynchronousCompositorImpl::SwapBuffers(cc::CompositorFrame* frame) { |
+ DCHECK(!frame_holder_); |
+ frame_holder_.reset(new cc::CompositorFrame); |
+ frame->AssignTo(frame_holder_.get()); |
} |
void SynchronousCompositorImpl::UpdateFrameMetaData( |