summaryrefslogtreecommitdiffstats
path: root/cc/scheduler/scheduler_unittest.cc
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-01 03:13:20 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-01 03:13:20 +0000
commit04049fc12bc16db65bbbdb47d17a8d3f8d9a7b00 (patch)
treef3b092f06b4751fb197ff1622c0feb0d28bf7bbe /cc/scheduler/scheduler_unittest.cc
parent577df9afb7a24d5aa825a606382ed8988fa6b5b9 (diff)
downloadchromium_src-04049fc12bc16db65bbbdb47d17a8d3f8d9a7b00.zip
chromium_src-04049fc12bc16db65bbbdb47d17a8d3f8d9a7b00.tar.gz
chromium_src-04049fc12bc16db65bbbdb47d17a8d3f8d9a7b00.tar.bz2
Merge cc initialization paths
Code path between first initialization and recreate on context lost are merged. Do this by changing the first initialization behavior to match recreate. Now both are kicked off by the scheduler and blocks the main thread on the impl thread. The scheduler is started in output surface lost state and immediately schedules recreation. This means the first initialization in thread mode is no longer synchronous. BUG=233664, 230197 This has been tried many many times. NOTRY=true Reverted twice due to breaking WebGLInfobarTest: Committed in r196480. Reverted in r196509. Committed in r196708. Reverted in r196790. Fix for WebGLInfobarTest landed in r197235. WebViewTest.Shim became flaky on chromeos but was already flaky without this. Disabled it in r197497. Review URL: https://chromiumcodereview.appspot.com/12544032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@197550 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/scheduler/scheduler_unittest.cc')
-rw-r--r--cc/scheduler/scheduler_unittest.cc58
1 files changed, 43 insertions, 15 deletions
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index a2c968c..3a8e8e3 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -69,8 +69,8 @@ class FakeSchedulerClient : public SchedulerClient {
virtual void ScheduledActionActivatePendingTreeIfNeeded() OVERRIDE {
actions_.push_back("ScheduledActionActivatePendingTreeIfNeeded");
}
- virtual void ScheduledActionBeginContextRecreation() OVERRIDE {
- actions_.push_back("ScheduledActionBeginContextRecreation");
+ virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {
+ actions_.push_back("ScheduledActionBeginOutputSurfaceCreation");
}
virtual void ScheduledActionAcquireLayerTexturesForMainThread() OVERRIDE {
actions_.push_back("ScheduledActionAcquireLayerTexturesForMainThread");
@@ -92,10 +92,15 @@ TEST(SchedulerTest, RequestCommit) {
Scheduler::Create(&client,
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ EXPECT_EQ(1, client.num_actions_());
+ EXPECT_STREQ("ScheduledActionBeginOutputSurfaceCreation", client.Action(0));
+ client.Reset();
+ scheduler->DidCreateAndInitializeOutputSurface();
+
// SetNeedsCommit should begin the frame.
scheduler->SetNeedsCommit();
EXPECT_EQ(1, client.num_actions_());
@@ -129,10 +134,15 @@ TEST(SchedulerTest, RequestCommitAfterBeginFrame) {
Scheduler::Create(&client,
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ EXPECT_EQ(1, client.num_actions_());
+ EXPECT_STREQ("ScheduledActionBeginOutputSurfaceCreation", client.Action(0));
+ client.Reset();
+ scheduler->DidCreateAndInitializeOutputSurface();
+
// SetNedsCommit should begin the frame.
scheduler->SetNeedsCommit();
EXPECT_EQ(1, client.num_actions_());
@@ -166,10 +176,15 @@ TEST(SchedulerTest, TextureAcquisitionCollision) {
Scheduler::Create(&client,
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ EXPECT_EQ(1, client.num_actions_());
+ EXPECT_STREQ("ScheduledActionBeginOutputSurfaceCreation", client.Action(0));
+ client.Reset();
+ scheduler->DidCreateAndInitializeOutputSurface();
+
scheduler->SetNeedsCommit();
scheduler->SetMainThreadNeedsLayerTextures();
EXPECT_EQ(2, client.num_actions_());
@@ -210,10 +225,15 @@ TEST(SchedulerTest, VisibilitySwitchWithTextureAcquisition) {
Scheduler::Create(&client,
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ EXPECT_EQ(1, client.num_actions_());
+ EXPECT_STREQ("ScheduledActionBeginOutputSurfaceCreation", client.Action(0));
+ client.Reset();
+ scheduler->DidCreateAndInitializeOutputSurface();
+
scheduler->SetNeedsCommit();
scheduler->BeginFrameComplete();
scheduler->SetMainThreadNeedsLayerTextures();
@@ -257,7 +277,7 @@ class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
}
virtual void ScheduledActionCommit() OVERRIDE {}
- virtual void ScheduledActionBeginContextRecreation() OVERRIDE {}
+ virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {}
virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {}
protected:
@@ -277,9 +297,10 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
client.SetScheduler(scheduler.get());
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
scheduler->SetNeedsRedraw();
EXPECT_TRUE(scheduler->RedrawPending());
@@ -307,9 +328,11 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
client.SetScheduler(scheduler.get());
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
+
client.SetDrawWillHappen(false);
scheduler->SetNeedsRedraw();
@@ -365,7 +388,7 @@ class SchedulerClientThatsetNeedsCommitInsideDraw : public FakeSchedulerClient {
}
virtual void ScheduledActionCommit() OVERRIDE {}
- virtual void ScheduledActionBeginContextRecreation() OVERRIDE {}
+ virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {}
virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {}
protected:
@@ -383,9 +406,10 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
client.SetScheduler(scheduler.get());
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
scheduler->SetNeedsRedraw();
EXPECT_TRUE(scheduler->RedrawPending());
@@ -414,9 +438,11 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
make_scoped_ptr(new FrameRateController(time_source)),
default_scheduler_settings);
client.SetScheduler(scheduler.get());
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
+
client.SetDrawWillHappen(false);
scheduler->SetNeedsRedraw();
@@ -462,9 +488,10 @@ TEST(SchedulerTest, NoBeginFrameWhenDrawFails) {
controller.PassAs<FrameRateController>(),
default_scheduler_settings);
client.SetScheduler(scheduler.get());
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
EXPECT_EQ(0, controller_ptr->NumFramesPending());
@@ -530,9 +557,10 @@ TEST(SchedulerTest, RecreateOutputSurfaceClearsPendingDrawCount) {
controller.PassAs<FrameRateController>(),
default_scheduler_settings);
- scheduler->SetCanBeginFrame(true);
+ scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
+ scheduler->DidCreateAndInitializeOutputSurface();
// Draw successfully, this starts a new frame.
scheduler->SetNeedsRedraw();
@@ -543,7 +571,7 @@ TEST(SchedulerTest, RecreateOutputSurfaceClearsPendingDrawCount) {
// Verifying that it's 1 so that we know that it's reset on recreate.
EXPECT_EQ(1, controller_ptr->NumFramesPending());
- scheduler->DidRecreateOutputSurface();
+ scheduler->DidCreateAndInitializeOutputSurface();
EXPECT_EQ(0, controller_ptr->NumFramesPending());
}