diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-01 03:13:20 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-01 03:13:20 +0000 |
commit | 04049fc12bc16db65bbbdb47d17a8d3f8d9a7b00 (patch) | |
tree | f3b092f06b4751fb197ff1622c0feb0d28bf7bbe /cc/scheduler/scheduler_unittest.cc | |
parent | 577df9afb7a24d5aa825a606382ed8988fa6b5b9 (diff) | |
download | chromium_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.cc | 58 |
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()); } |