Chromium Code Reviews| 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 702164b5a8fcefc139ed4ea4b00d57e9dbec8071..af64d90fda1a5948bb79e92d170c2cb6d8a38c91 100644 |
| --- a/content/browser/android/in_process/synchronous_compositor_impl.cc |
| +++ b/content/browser/android/in_process/synchronous_compositor_impl.cc |
| @@ -4,9 +4,11 @@ |
| #include "content/browser/android/in_process/synchronous_compositor_impl.h" |
| +#include "base/auto_reset.h" |
| #include "base/lazy_instance.h" |
| #include "base/message_loop/message_loop.h" |
| #include "cc/input/input_handler.h" |
| +#include "content/browser/android/in_process/synchronous_compositor_external_begin_frame_source.h" |
| #include "content/browser/android/in_process/synchronous_compositor_factory_impl.h" |
| #include "content/browser/android/in_process/synchronous_input_event_filter.h" |
| #include "content/browser/renderer_host/render_widget_host_view_android.h" |
| @@ -65,6 +67,7 @@ SynchronousCompositorImpl* SynchronousCompositorImpl::FromRoutingID( |
| SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents) |
| : compositor_client_(NULL), |
| output_surface_(NULL), |
| + begin_frame_source_(NULL), |
| contents_(contents), |
| input_handler_(NULL), |
| weak_ptr_factory_(this) { |
| @@ -94,6 +97,20 @@ void SynchronousCompositor::SetRecordFullDocument(bool record_full_document) { |
| g_factory.Get().SetRecordFullDocument(record_full_document); |
| } |
| +scoped_ptr<cc::BeginFrameSource> |
| +SynchronousCompositorImpl::GetExternalBeginFrameSource() { |
| + DCHECK(!begin_frame_source_); |
| + scoped_ptr<SynchronousCompositorExternalBeginFrameSource> source( |
| + new SynchronousCompositorExternalBeginFrameSource(this)); |
| + begin_frame_source_ = source.get(); |
| + return source.Pass(); |
| +} |
| + |
| +bool SynchronousCompositorImpl::IsInvokingComposite() const { |
| + DCHECK(output_surface_); |
| + return output_surface_->invoking_composite(); |
|
boliu
2014/10/18 00:49:38
Can lift invoking_composite out of OutputSurface t
simonhong
2014/10/23 01:03:08
Done.
|
| +} |
| + |
| bool SynchronousCompositorImpl::InitializeHwDraw() { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(output_surface_); |
| @@ -132,6 +149,7 @@ scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw( |
| clip, |
| viewport_rect_for_tile_priority, |
| transform_for_tile_priority); |
| + |
| if (frame.get()) |
| UpdateFrameMetaData(frame->metadata); |
| @@ -149,6 +167,7 @@ bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { |
| DCHECK(output_surface_); |
| scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawSw(canvas); |
| + |
| if (frame.get()) |
| UpdateFrameMetaData(frame->metadata); |
| return !!frame.get(); |
| @@ -227,10 +246,12 @@ void SynchronousCompositorImpl::DidStopFlinging() { |
| rwhv->DidStopFlinging(); |
| } |
| -void SynchronousCompositorImpl::SetContinuousInvalidate(bool enable) { |
| +void SynchronousCompositorImpl::UpdateContinuousInvalidate() { |
| DCHECK(CalledOnValidThread()); |
| - if (compositor_client_) |
| - compositor_client_->SetContinuousInvalidate(enable); |
| + if (compositor_client_) { |
| + compositor_client_->SetContinuousInvalidate( |
| + begin_frame_source_->NeedsBeginFrames()); |
| + } |
| } |
| InputEventAckState SynchronousCompositorImpl::HandleInputEvent( |
| @@ -256,6 +277,11 @@ void SynchronousCompositorImpl::DidActivatePendingTree() { |
| compositor_client_->DidUpdateContent(); |
| } |
| +void SynchronousCompositorImpl::BeginFrame() { |
| + DCHECK(begin_frame_source_); |
| + begin_frame_source_->BeginFrame(); |
| +} |
| + |
| gfx::ScrollOffset SynchronousCompositorImpl::GetTotalScrollOffset() { |
| DCHECK(CalledOnValidThread()); |
| if (compositor_client_) { |