| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 #include "cc/scheduler/scheduler.h" | 4 #include "cc/scheduler/scheduler.h" |
| 5 | 5 |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 221 } |
| 222 virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE { | 222 virtual base::TimeDelta BeginMainFrameToCommitDurationEstimate() OVERRIDE { |
| 223 return base::TimeDelta(); | 223 return base::TimeDelta(); |
| 224 } | 224 } |
| 225 virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE { | 225 virtual base::TimeDelta CommitToActivateDurationEstimate() OVERRIDE { |
| 226 return base::TimeDelta(); | 226 return base::TimeDelta(); |
| 227 } | 227 } |
| 228 | 228 |
| 229 virtual void DidBeginImplFrameDeadline() OVERRIDE {} | 229 virtual void DidBeginImplFrameDeadline() OVERRIDE {} |
| 230 | 230 |
| 231 virtual void SendBeginFrameToChildren(const BeginFrameArgs& args) OVERRIDE {} |
| 232 |
| 231 protected: | 233 protected: |
| 232 bool needs_begin_frame_; | 234 bool needs_begin_frame_; |
| 233 bool draw_will_happen_; | 235 bool draw_will_happen_; |
| 234 bool swap_will_happen_if_draw_happens_; | 236 bool swap_will_happen_if_draw_happens_; |
| 235 bool automatic_swap_ack_; | 237 bool automatic_swap_ack_; |
| 236 int num_draws_; | 238 int num_draws_; |
| 237 bool log_anticipated_draw_time_change_; | 239 bool log_anticipated_draw_time_change_; |
| 238 bool swap_contains_incomplete_tile_; | 240 bool swap_contains_incomplete_tile_; |
| 239 bool redraw_will_happen_if_update_visible_tiles_happens_; | 241 bool redraw_will_happen_if_update_visible_tiles_happens_; |
| 240 base::TimeTicks posted_begin_impl_frame_deadline_; | 242 base::TimeTicks posted_begin_impl_frame_deadline_; |
| 241 std::vector<const char*> actions_; | 243 std::vector<const char*> actions_; |
| 242 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_; | 244 std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_; |
| 243 scoped_ptr<TestScheduler> scheduler_; | 245 scoped_ptr<TestScheduler> scheduler_; |
| 244 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; | 246 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
| 245 }; | 247 }; |
| 246 | 248 |
| 247 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, | 249 void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, |
| 248 FakeSchedulerClient* client) { | 250 FakeSchedulerClient* client) { |
| 249 bool client_initiates_begin_frame = | 251 bool client_initiates_begin_frame = |
| 250 scheduler->settings().begin_frame_scheduling_enabled && | 252 // scheduler->settings().begin_frame_scheduling_enabled && |
| 251 scheduler->settings().throttle_frame_production; | 253 scheduler->settings().throttle_frame_production; |
| 252 | 254 |
| 253 scheduler->DidCreateAndInitializeOutputSurface(); | 255 scheduler->DidCreateAndInitializeOutputSurface(); |
| 254 scheduler->SetNeedsCommit(); | 256 scheduler->SetNeedsCommit(); |
| 255 scheduler->NotifyBeginMainFrameStarted(); | 257 scheduler->NotifyBeginMainFrameStarted(); |
| 256 scheduler->NotifyReadyToCommit(); | 258 scheduler->NotifyReadyToCommit(); |
| 257 if (scheduler->settings().impl_side_painting) | 259 if (scheduler->settings().impl_side_painting) |
| 258 scheduler->NotifyReadyToActivate(); | 260 scheduler->NotifyReadyToActivate(); |
| 259 // Go through the motions to draw the commit. | 261 // Go through the motions to draw the commit. |
| 260 if (client_initiates_begin_frame) | 262 if (client_initiates_begin_frame) |
| (...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1350 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); | 1352 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); |
| 1351 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1353 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 1352 EXPECT_TRUE(client.needs_begin_frame()); | 1354 EXPECT_TRUE(client.needs_begin_frame()); |
| 1353 client.Reset(); | 1355 client.Reset(); |
| 1354 } | 1356 } |
| 1355 | 1357 |
| 1356 void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, | 1358 void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, |
| 1357 bool throttle_frame_production) { | 1359 bool throttle_frame_production) { |
| 1358 FakeSchedulerClient client; | 1360 FakeSchedulerClient client; |
| 1359 SchedulerSettings scheduler_settings; | 1361 SchedulerSettings scheduler_settings; |
| 1360 scheduler_settings.begin_frame_scheduling_enabled = | 1362 // scheduler_settings.begin_frame_scheduling_enabled = |
| 1361 begin_frame_scheduling_enabled; | 1363 // begin_frame_scheduling_enabled; |
| 1362 scheduler_settings.throttle_frame_production = throttle_frame_production; | 1364 scheduler_settings.throttle_frame_production = throttle_frame_production; |
| 1363 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1365 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1364 scheduler->SetCanStart(); | 1366 scheduler->SetCanStart(); |
| 1365 scheduler->SetVisible(true); | 1367 scheduler->SetVisible(true); |
| 1366 scheduler->SetCanDraw(true); | 1368 scheduler->SetCanDraw(true); |
| 1367 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1369 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1368 | 1370 |
| 1369 // SetNeedsCommit should begin the frame on the next BeginImplFrame | 1371 // SetNeedsCommit should begin the frame on the next BeginImplFrame |
| 1370 // without calling SetNeedsBeginFrame. | 1372 // without calling SetNeedsBeginFrame. |
| 1371 client.Reset(); | 1373 client.Reset(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1447 bool begin_frame_scheduling_enabled = false; | 1449 bool begin_frame_scheduling_enabled = false; |
| 1448 bool throttle_frame_production = false; | 1450 bool throttle_frame_production = false; |
| 1449 BeginFramesNotFromClient(begin_frame_scheduling_enabled, | 1451 BeginFramesNotFromClient(begin_frame_scheduling_enabled, |
| 1450 throttle_frame_production); | 1452 throttle_frame_production); |
| 1451 } | 1453 } |
| 1452 | 1454 |
| 1453 void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, | 1455 void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, |
| 1454 bool throttle_frame_production) { | 1456 bool throttle_frame_production) { |
| 1455 FakeSchedulerClient client; | 1457 FakeSchedulerClient client; |
| 1456 SchedulerSettings scheduler_settings; | 1458 SchedulerSettings scheduler_settings; |
| 1457 scheduler_settings.begin_frame_scheduling_enabled = | 1459 // scheduler_settings.begin_frame_scheduling_enabled = |
| 1458 begin_frame_scheduling_enabled; | 1460 // begin_frame_scheduling_enabled; |
| 1459 scheduler_settings.throttle_frame_production = throttle_frame_production; | 1461 scheduler_settings.throttle_frame_production = throttle_frame_production; |
| 1460 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1462 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1461 scheduler->SetCanStart(); | 1463 scheduler->SetCanStart(); |
| 1462 scheduler->SetVisible(true); | 1464 scheduler->SetVisible(true); |
| 1463 scheduler->SetCanDraw(true); | 1465 scheduler->SetCanDraw(true); |
| 1464 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1466 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1465 | 1467 |
| 1466 // To test swap ack throttling, this test disables automatic swap acks. | 1468 // To test swap ack throttling, this test disables automatic swap acks. |
| 1467 scheduler->SetMaxSwapsPending(1); | 1469 scheduler->SetMaxSwapsPending(1); |
| 1468 client.SetAutomaticSwapAck(false); | 1470 client.SetAutomaticSwapAck(false); |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1877 client.task_runner().RunPendingTasks(); | 1879 client.task_runner().RunPendingTasks(); |
| 1878 EXPECT_NO_ACTION(client); | 1880 EXPECT_NO_ACTION(client); |
| 1879 } | 1881 } |
| 1880 | 1882 |
| 1881 // See: http://crbug.com/380889 | 1883 // See: http://crbug.com/380889 |
| 1882 TEST( | 1884 TEST( |
| 1883 SchedulerTest, | 1885 SchedulerTest, |
| 1884 DISABLED_StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSourc
e) { | 1886 DISABLED_StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSourc
e) { |
| 1885 FakeSchedulerClient client; | 1887 FakeSchedulerClient client; |
| 1886 SchedulerSettings scheduler_settings; | 1888 SchedulerSettings scheduler_settings; |
| 1887 scheduler_settings.begin_frame_scheduling_enabled = false; | 1889 // scheduler_settings.begin_frame_scheduling_enabled = false; |
| 1888 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1890 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
| 1889 scheduler->SetCanStart(); | 1891 scheduler->SetCanStart(); |
| 1890 scheduler->SetVisible(true); | 1892 scheduler->SetVisible(true); |
| 1891 scheduler->SetCanDraw(true); | 1893 scheduler->SetCanDraw(true); |
| 1892 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1894 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1893 | 1895 |
| 1894 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1896 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1895 client.Reset(); | 1897 client.Reset(); |
| 1896 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); | 1898 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); |
| 1897 scheduler->SetNeedsCommit(); | 1899 scheduler->SetNeedsCommit(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1917 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); | 1919 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); |
| 1918 | 1920 |
| 1919 client.Reset(); | 1921 client.Reset(); |
| 1920 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1922 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1921 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1923 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1922 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); | 1924 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); |
| 1923 } | 1925 } |
| 1924 | 1926 |
| 1925 } // namespace | 1927 } // namespace |
| 1926 } // namespace cc | 1928 } // namespace cc |
| OLD | NEW |