Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(646)

Unified Diff: cc/test/layer_tree_test.cc

Issue 817603002: cc: Make scheduling be driven by vsync for android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698