Index: cc/test/layer_tree_test.cc |
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc |
index d6411ecdef251d0dfbcef17cf7cd529bc1ff7d0c..0d65961b85f3cd4c5fbd84c1c8a74dbedf44ca81 100644 |
--- a/cc/test/layer_tree_test.cc |
+++ b/cc/test/layer_tree_test.cc |
@@ -61,7 +61,11 @@ class ExternalBeginFrameSourceForTest |
explicit ExternalBeginFrameSourceForTest(double refresh_rate) |
: milliseconds_per_frame_(1000.0 / refresh_rate), |
is_ready_(false), |
+ needs_begin_frames_(false), |
weak_ptr_factory_(this) { |
+ test_on_begin_frame_closure_ = base::Bind( |
+ &ExternalBeginFrameSourceForTest::TestOnBeginFrame, |
+ weak_ptr_factory_.GetWeakPtr()); |
DetachFromThread(); |
} |
@@ -71,13 +75,10 @@ class ExternalBeginFrameSourceForTest |
void OnNeedsBeginFramesChange(bool needs_begin_frames) override { |
DCHECK(CalledOnValidThread()); |
- if (needs_begin_frames) { |
- base::MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&ExternalBeginFrameSourceForTest::TestOnBeginFrame, |
- weak_ptr_factory_.GetWeakPtr()), |
- base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); |
- } |
+ if (needs_begin_frames_ == needs_begin_frames) |
+ return; |
+ needs_begin_frames_ = needs_begin_frames; |
+ ScheduleBeginFrameIfNeeded(); |
} |
void SetClientReady() override { |
@@ -92,11 +93,24 @@ class ExternalBeginFrameSourceForTest |
void TestOnBeginFrame() { |
DCHECK(CalledOnValidThread()); |
CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
+ ScheduleBeginFrameIfNeeded(); |
+ } |
+ |
+ void ScheduleBeginFrameIfNeeded() { |
+ test_on_begin_frame_task_.Cancel(); |
+ test_on_begin_frame_task_.Reset(test_on_begin_frame_closure_); |
+ if (needs_begin_frames_) |
+ base::MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ test_on_begin_frame_task_.callback(), |
+ base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); |
} |
private: |
double milliseconds_per_frame_; |
bool is_ready_; |
+ bool needs_begin_frames_; |
+ base::Closure test_on_begin_frame_closure_; |
+ base::CancelableClosure test_on_begin_frame_task_; |
base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_; |
}; |
@@ -158,6 +172,11 @@ class ThreadProxyForTest : public ThreadProxy { |
test_hooks_->ScheduledActionPrepareTiles(); |
} |
+ void ScheduledActionInvalidateOutputSurface() override { |
+ ThreadProxy::ScheduledActionInvalidateOutputSurface(); |
+ test_hooks_->ScheduledActionInvalidateOutputSurface(); |
+ } |
+ |
ThreadProxyForTest( |
TestHooks* test_hooks, |
LayerTreeHost* host, |