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_) { |