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