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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 1425973003: cc: Don't attempt main thread synchronization if it is slow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: new tests Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
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 4
5 #include "cc/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 27 matching lines...) Expand all
38 38
39 #define EXPECT_SCOPED(statements) \ 39 #define EXPECT_SCOPED(statements) \
40 { \ 40 { \
41 SCOPED_TRACE(""); \ 41 SCOPED_TRACE(""); \
42 statements; \ 42 statements; \
43 } 43 }
44 44
45 namespace cc { 45 namespace cc {
46 namespace { 46 namespace {
47 47
48 base::TimeDelta kSlowDuration = base::TimeDelta::FromSeconds(1);
49 base::TimeDelta kFastDuration = base::TimeDelta::FromMilliseconds(1);
50
48 class FakeSchedulerClient : public SchedulerClient { 51 class FakeSchedulerClient : public SchedulerClient {
49 public: 52 public:
50 FakeSchedulerClient() 53 FakeSchedulerClient()
51 : automatic_swap_ack_(true), 54 : automatic_swap_ack_(true),
52 scheduler_(nullptr) { 55 scheduler_(nullptr) {
53 Reset(); 56 Reset();
54 } 57 }
55 58
56 void Reset() { 59 void Reset() {
57 actions_.clear(); 60 actions_.clear();
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 fake_compositor_timing_history_ = fake_compositor_timing_history.get(); 272 fake_compositor_timing_history_ = fake_compositor_timing_history.get();
270 273
271 scheduler_ = TestScheduler::Create( 274 scheduler_ = TestScheduler::Create(
272 now_src_.get(), client_.get(), scheduler_settings_, 0, 275 now_src_.get(), client_.get(), scheduler_settings_, 0,
273 task_runner_.get(), fake_external_begin_frame_source_.get(), 276 task_runner_.get(), fake_external_begin_frame_source_.get(),
274 fake_compositor_timing_history.Pass()); 277 fake_compositor_timing_history.Pass());
275 DCHECK(scheduler_); 278 DCHECK(scheduler_);
276 client_->set_scheduler(scheduler_.get()); 279 client_->set_scheduler(scheduler_.get());
277 280
278 // Use large estimates by default to avoid latency recovery in most tests. 281 // Use large estimates by default to avoid latency recovery in most tests.
279 base::TimeDelta slow_duration = base::TimeDelta::FromSeconds(1); 282 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration);
280 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration);
281 283
282 return scheduler_.get(); 284 return scheduler_.get();
283 } 285 }
284 286
285 void CreateSchedulerAndInitSurface() { 287 void CreateSchedulerAndInitSurface() {
286 CreateScheduler(); 288 CreateScheduler();
287 EXPECT_SCOPED(InitializeOutputSurfaceAndFirstCommit()); 289 EXPECT_SCOPED(InitializeOutputSurfaceAndFirstCommit());
288 } 290 }
289 291
290 void SetUpScheduler(bool initSurface) { 292 void SetUpScheduler(bool initSurface) {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 } 419 }
418 420
419 void CheckMainFrameSkippedAfterLateCommit(bool expect_send_begin_main_frame); 421 void CheckMainFrameSkippedAfterLateCommit(bool expect_send_begin_main_frame);
420 void ImplFrameSkippedAfterLateSwapAck(bool swap_ack_before_deadline); 422 void ImplFrameSkippedAfterLateSwapAck(bool swap_ack_before_deadline);
421 void ImplFrameIsNotSkippedAfterLateSwapAck(); 423 void ImplFrameIsNotSkippedAfterLateSwapAck();
422 void BeginFramesNotFromClient(bool use_external_begin_frame_source, 424 void BeginFramesNotFromClient(bool use_external_begin_frame_source,
423 bool throttle_frame_production); 425 bool throttle_frame_production);
424 void BeginFramesNotFromClient_SwapThrottled( 426 void BeginFramesNotFromClient_SwapThrottled(
425 bool use_external_begin_frame_source, 427 bool use_external_begin_frame_source,
426 bool throttle_frame_production); 428 bool throttle_frame_production);
429 bool BeginMainFrameOnCriticalPath(TreePriority tree_priority,
430 ScrollHandlerState scroll_handler_state,
431 base::TimeDelta durations);
427 432
428 scoped_ptr<base::SimpleTestTickClock> now_src_; 433 scoped_ptr<base::SimpleTestTickClock> now_src_;
429 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 434 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
430 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source_; 435 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source_;
431 SchedulerSettings scheduler_settings_; 436 SchedulerSettings scheduler_settings_;
432 scoped_ptr<FakeSchedulerClient> client_; 437 scoped_ptr<FakeSchedulerClient> client_;
433 scoped_ptr<TestScheduler> scheduler_; 438 scoped_ptr<TestScheduler> scheduler_;
434 FakeCompositorTimingHistory* fake_compositor_timing_history_; 439 FakeCompositorTimingHistory* fake_compositor_timing_history_;
435 }; 440 };
436 441
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 client_->Reset(); 483 client_->Reset();
479 EXPECT_SCOPED(AdvanceFrame()); 484 EXPECT_SCOPED(AdvanceFrame());
480 EXPECT_TRUE(client_->begin_frame_is_sent_to_children()); 485 EXPECT_TRUE(client_->begin_frame_is_sent_to_children());
481 } 486 }
482 487
483 TEST_F(SchedulerTest, SendBeginFramesToChildrenDeadlineNotAdjusted) { 488 TEST_F(SchedulerTest, SendBeginFramesToChildrenDeadlineNotAdjusted) {
484 // Set up client with specified estimates. 489 // Set up client with specified estimates.
485 scheduler_settings_.use_external_begin_frame_source = true; 490 scheduler_settings_.use_external_begin_frame_source = true;
486 SetUpScheduler(true); 491 SetUpScheduler(true);
487 492
488 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate( 493 fake_compositor_timing_history_
489 base::TimeDelta::FromMilliseconds(2)); 494 ->SetBeginMainFrameStartToCommitDurationEstimate(
495 base::TimeDelta::FromMilliseconds(2));
490 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate( 496 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate(
491 base::TimeDelta::FromMilliseconds(4)); 497 base::TimeDelta::FromMilliseconds(4));
492 fake_compositor_timing_history_->SetDrawDurationEstimate( 498 fake_compositor_timing_history_->SetDrawDurationEstimate(
493 base::TimeDelta::FromMilliseconds(1)); 499 base::TimeDelta::FromMilliseconds(1));
494 500
495 EXPECT_FALSE(client_->needs_begin_frames()); 501 EXPECT_FALSE(client_->needs_begin_frames());
496 scheduler_->SetChildrenNeedBeginFrames(true); 502 scheduler_->SetChildrenNeedBeginFrames(true);
497 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); 503 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
498 EXPECT_TRUE(client_->needs_begin_frames()); 504 EXPECT_TRUE(client_->needs_begin_frames());
499 505
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline()); 1380 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
1375 1381
1376 client_->Reset(); 1382 client_->Reset();
1377 scheduler_->SetNeedsBeginMainFrame(); 1383 scheduler_->SetNeedsBeginMainFrame();
1378 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline()); 1384 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
1379 EXPECT_SCOPED(AdvanceFrame()); 1385 EXPECT_SCOPED(AdvanceFrame());
1380 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline()); 1386 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
1381 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)); 1387 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
1382 EXPECT_EQ(expect_send_begin_main_frame, 1388 EXPECT_EQ(expect_send_begin_main_frame,
1383 scheduler_->MainThreadMissedLastDeadline()); 1389 scheduler_->MainThreadMissedLastDeadline());
1390 EXPECT_TRUE(client_->HasAction("WillBeginImplFrame"));
1384 EXPECT_EQ(expect_send_begin_main_frame, 1391 EXPECT_EQ(expect_send_begin_main_frame,
1385 client_->HasAction("ScheduledActionSendBeginMainFrame")); 1392 client_->HasAction("ScheduledActionSendBeginMainFrame"));
1386 } 1393 }
1387 1394
1388 TEST_F(SchedulerTest, MainFrameSkippedAfterLateCommit) { 1395 TEST_F(SchedulerTest, MainFrameSkippedAfterLateCommit) {
1389 scheduler_settings_.use_external_begin_frame_source = true; 1396 scheduler_settings_.use_external_begin_frame_source = true;
1390 SetUpScheduler(true); 1397 SetUpScheduler(true);
1391 1398 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1392 auto fast_duration = base::TimeDelta::FromMilliseconds(1);
1393 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1394 1399
1395 bool expect_send_begin_main_frame = false; 1400 bool expect_send_begin_main_frame = false;
1396 EXPECT_SCOPED( 1401 EXPECT_SCOPED(
1397 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1402 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1398 } 1403 }
1399 1404
1405 // Response times of BeginMainFrame's without the critical path flag set
1406 // should not affect whether we recover latency or not.
1407 TEST_F(
1408 SchedulerTest,
1409 MainFrameSkippedAfterLateCommit_LongBeginMainFrameQueueDurationNotCritical) {
1410 scheduler_settings_.use_external_begin_frame_source = true;
1411 SetUpScheduler(true);
1412 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1413 fake_compositor_timing_history_
1414 ->SetBeginMainFrameQueueDurationNotCriticalEstimate(kSlowDuration);
1415
1416 bool expect_send_begin_main_frame = false;
1417 EXPECT_SCOPED(
1418 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1419 }
1420
1421 // Response times of BeginMainFrame's with the critical path flag set
1422 // should affect whether we recover latency or not.
1423 TEST_F(
1424 SchedulerTest,
1425 MainFrameNotSkippedAfterLateCommit_LongBeginMainFrameQueueDurationCritical) {
1426 scheduler_settings_.use_external_begin_frame_source = true;
1427 SetUpScheduler(true);
1428 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1429 fake_compositor_timing_history_
1430 ->SetBeginMainFrameQueueDurationCriticalEstimate(kSlowDuration);
1431 fake_compositor_timing_history_
1432 ->SetBeginMainFrameQueueDurationNotCriticalEstimate(kSlowDuration);
1433
1434 bool expect_send_begin_main_frame = true;
1435 EXPECT_SCOPED(
1436 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1437 }
1438
1400 TEST_F(SchedulerTest, 1439 TEST_F(SchedulerTest,
1401 MainFrameNotSkippedAfterLateCommitInPreferImplLatencyMode) { 1440 MainFrameNotSkippedAfterLateCommitInPreferImplLatencyMode) {
1402 scheduler_settings_.use_external_begin_frame_source = true; 1441 scheduler_settings_.use_external_begin_frame_source = true;
1403 SetUpScheduler(true); 1442 SetUpScheduler(true);
1404 scheduler_->SetImplLatencyTakesPriority(true); 1443 scheduler_->SetSmoothnessMode(SMOOTHNESS_TAKES_PRIORITY,
1405 1444 SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
1406 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1445 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1407 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1408 1446
1409 bool expect_send_begin_main_frame = true; 1447 bool expect_send_begin_main_frame = true;
1410 EXPECT_SCOPED( 1448 EXPECT_SCOPED(
1411 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1449 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1412 } 1450 }
1413 1451
1414 TEST_F(SchedulerTest, 1452 TEST_F(SchedulerTest,
1415 MainFrameNotSkippedAfterLateCommit_CommitEstimateTooLong) { 1453 MainFrameNotSkippedAfterLateCommit_CommitEstimateTooLong) {
1416 scheduler_settings_.use_external_begin_frame_source = true; 1454 scheduler_settings_.use_external_begin_frame_source = true;
1417 SetUpScheduler(true); 1455 SetUpScheduler(true);
1418 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1456 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1419 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1457 fake_compositor_timing_history_
1420 auto slow_duration = base::TimeDelta::FromSeconds(1); 1458 ->SetBeginMainFrameStartToCommitDurationEstimate(kSlowDuration);
1421 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate(
1422 slow_duration);
1423 1459
1424 bool expect_send_begin_main_frame = true; 1460 bool expect_send_begin_main_frame = true;
1425 EXPECT_SCOPED( 1461 EXPECT_SCOPED(
1426 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1462 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1427 } 1463 }
1428 1464
1429 TEST_F(SchedulerTest, 1465 TEST_F(SchedulerTest,
1430 MainFrameNotSkippedAfterLateCommit_ReadyToActivateEstimateTooLong) { 1466 MainFrameNotSkippedAfterLateCommit_ReadyToActivateEstimateTooLong) {
1431 scheduler_settings_.use_external_begin_frame_source = true; 1467 scheduler_settings_.use_external_begin_frame_source = true;
1432 SetUpScheduler(true); 1468 SetUpScheduler(true);
1433 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1469 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1434 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1435 auto slow_duration = base::TimeDelta::FromSeconds(1);
1436 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate( 1470 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate(
1437 slow_duration); 1471 kSlowDuration);
1438 1472
1439 bool expect_send_begin_main_frame = true; 1473 bool expect_send_begin_main_frame = true;
1440 EXPECT_SCOPED( 1474 EXPECT_SCOPED(
1441 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1475 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1442 } 1476 }
1443 1477
1444 TEST_F(SchedulerTest, 1478 TEST_F(SchedulerTest,
1445 MainFrameNotSkippedAfterLateCommit_ActivateEstimateTooLong) { 1479 MainFrameNotSkippedAfterLateCommit_ActivateEstimateTooLong) {
1446 scheduler_settings_.use_external_begin_frame_source = true; 1480 scheduler_settings_.use_external_begin_frame_source = true;
1447 SetUpScheduler(true); 1481 SetUpScheduler(true);
1448 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1482 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1449 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1483 fake_compositor_timing_history_->SetActivateDurationEstimate(kSlowDuration);
1450 auto slow_duration = base::TimeDelta::FromSeconds(1);
1451 fake_compositor_timing_history_->SetActivateDurationEstimate(slow_duration);
1452 1484
1453 bool expect_send_begin_main_frame = true; 1485 bool expect_send_begin_main_frame = true;
1454 EXPECT_SCOPED( 1486 EXPECT_SCOPED(
1455 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1487 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1456 } 1488 }
1457 1489
1458 TEST_F(SchedulerTest, MainFrameNotSkippedAfterLateCommit_DrawEstimateTooLong) { 1490 TEST_F(SchedulerTest, MainFrameNotSkippedAfterLateCommit_DrawEstimateTooLong) {
1459 scheduler_settings_.use_external_begin_frame_source = true; 1491 scheduler_settings_.use_external_begin_frame_source = true;
1460 SetUpScheduler(true); 1492 SetUpScheduler(true);
1461 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1493 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1462 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1494 fake_compositor_timing_history_->SetDrawDurationEstimate(kSlowDuration);
1463 auto slow_duration = base::TimeDelta::FromSeconds(1);
1464 fake_compositor_timing_history_->SetDrawDurationEstimate(slow_duration);
1465 1495
1466 bool expect_send_begin_main_frame = true; 1496 bool expect_send_begin_main_frame = true;
1467 EXPECT_SCOPED( 1497 EXPECT_SCOPED(
1468 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); 1498 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame));
1469 } 1499 }
1470 1500
1471 void SchedulerTest::ImplFrameSkippedAfterLateSwapAck( 1501 void SchedulerTest::ImplFrameSkippedAfterLateSwapAck(
1472 bool swap_ack_before_deadline) { 1502 bool swap_ack_before_deadline) {
1473 // To get into a high latency state, this test disables automatic swap acks. 1503 // To get into a high latency state, this test disables automatic swap acks.
1474 scheduler_->SetMaxSwapsPending(1); 1504 scheduler_->SetMaxSwapsPending(1);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 1, 4); 1573 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 1, 4);
1544 EXPECT_ACTION("ScheduledActionAnimate", client_, 2, 4); 1574 EXPECT_ACTION("ScheduledActionAnimate", client_, 2, 4);
1545 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 3, 4); 1575 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 3, 4);
1546 } 1576 }
1547 } 1577 }
1548 1578
1549 TEST_F(SchedulerTest, 1579 TEST_F(SchedulerTest,
1550 ImplFrameSkippedAfterLateSwapAck_FastEstimates_SwapAckThenDeadline) { 1580 ImplFrameSkippedAfterLateSwapAck_FastEstimates_SwapAckThenDeadline) {
1551 scheduler_settings_.use_external_begin_frame_source = true; 1581 scheduler_settings_.use_external_begin_frame_source = true;
1552 SetUpScheduler(true); 1582 SetUpScheduler(true);
1553 1583 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1554 auto fast_duration = base::TimeDelta::FromMilliseconds(1);
1555 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1556 1584
1557 bool swap_ack_before_deadline = true; 1585 bool swap_ack_before_deadline = true;
1558 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline)); 1586 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline));
1559 } 1587 }
1560 1588
1561 TEST_F(SchedulerTest, 1589 TEST_F(SchedulerTest,
1562 ImplFrameSkippedAfterLateSwapAck_FastEstimates_DeadlineThenSwapAck) { 1590 ImplFrameSkippedAfterLateSwapAck_FastEstimates_DeadlineThenSwapAck) {
1563 scheduler_settings_.use_external_begin_frame_source = true; 1591 scheduler_settings_.use_external_begin_frame_source = true;
1564 SetUpScheduler(true); 1592 SetUpScheduler(true);
1565 1593 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1566 auto fast_duration = base::TimeDelta::FromMilliseconds(1);
1567 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1568 1594
1569 bool swap_ack_before_deadline = false; 1595 bool swap_ack_before_deadline = false;
1570 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline)); 1596 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline));
1597 }
1598
1599 TEST_F(
1600 SchedulerTest,
1601 ImplFrameSkippedAfterLateSwapAck_LongBeginMainFrameQueueDurationNotCritical) {
1602 scheduler_settings_.use_external_begin_frame_source = true;
1603 SetUpScheduler(true);
1604 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1605 fake_compositor_timing_history_
1606 ->SetBeginMainFrameQueueDurationNotCriticalEstimate(kSlowDuration);
1607
1608 bool swap_ack_before_deadline = false;
1609 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline));
1571 } 1610 }
1572 1611
1573 TEST_F(SchedulerTest, 1612 TEST_F(SchedulerTest,
1574 ImplFrameSkippedAfterLateSwapAck_ImplLatencyTakesPriority) { 1613 ImplFrameSkippedAfterLateSwapAck_ImplLatencyTakesPriority) {
1575 scheduler_settings_.use_external_begin_frame_source = true; 1614 scheduler_settings_.use_external_begin_frame_source = true;
1576 SetUpScheduler(true); 1615 SetUpScheduler(true);
1577 1616
1578 // Even if every estimate related to the main thread is slow, we should 1617 // Even if every estimate related to the main thread is slow, we should
1579 // still expect to recover impl thread latency if the draw is fast and we 1618 // still expect to recover impl thread latency if the draw is fast and we
1580 // are in impl latency takes priority. 1619 // are in impl latency takes priority.
1581 scheduler_->SetImplLatencyTakesPriority(true); 1620 scheduler_->SetSmoothnessMode(SMOOTHNESS_TAKES_PRIORITY,
1582 auto slow_duration = base::TimeDelta::FromSeconds(1); 1621 SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
1583 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration); 1622 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration);
1584 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1623 fake_compositor_timing_history_->SetDrawDurationEstimate(kFastDuration);
1585 fake_compositor_timing_history_->SetDrawDurationEstimate(fast_duration);
1586 1624
1587 bool swap_ack_before_deadline = false; 1625 bool swap_ack_before_deadline = false;
1588 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline)); 1626 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline));
1589 } 1627 }
1590 1628
1591 TEST_F(SchedulerTest, 1629 TEST_F(SchedulerTest,
1592 ImplFrameSkippedAfterLateSwapAck_OnlyImplSideUpdatesExpected) { 1630 ImplFrameSkippedAfterLateSwapAck_OnlyImplSideUpdatesExpected) {
1593 // This tests that we recover impl thread latency when there are no commits. 1631 // This tests that we recover impl thread latency when there are no commits.
1594 scheduler_settings_.use_external_begin_frame_source = true; 1632 scheduler_settings_.use_external_begin_frame_source = true;
1595 SetUpScheduler(true); 1633 SetUpScheduler(true);
1596 1634
1597 // To get into a high latency state, this test disables automatic swap acks. 1635 // To get into a high latency state, this test disables automatic swap acks.
1598 scheduler_->SetMaxSwapsPending(1); 1636 scheduler_->SetMaxSwapsPending(1);
1599 client_->SetAutomaticSwapAck(false); 1637 client_->SetAutomaticSwapAck(false);
1600 1638
1601 // Even if every estimate related to the main thread is slow, we should 1639 // Even if every estimate related to the main thread is slow, we should
1602 // still expect to recover impl thread latency if there are no commits from 1640 // still expect to recover impl thread latency if there are no commits from
1603 // the main thread. 1641 // the main thread.
1604 auto slow_duration = base::TimeDelta::FromSeconds(1); 1642 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration);
1605 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration); 1643 fake_compositor_timing_history_->SetDrawDurationEstimate(kFastDuration);
1606 auto fast_duration = base::TimeDelta::FromMilliseconds(1);
1607 fake_compositor_timing_history_->SetDrawDurationEstimate(fast_duration);
1608 1644
1609 // Draw and swap for first BeginFrame 1645 // Draw and swap for first BeginFrame
1610 client_->Reset(); 1646 client_->Reset();
1611 scheduler_->SetNeedsRedraw(); 1647 scheduler_->SetNeedsRedraw();
1612 EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline()); 1648 EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
1613 SendNextBeginFrame(); 1649 SendNextBeginFrame();
1614 EXPECT_ACTION("SetNeedsBeginFrames(true)", client_, 0, 3); 1650 EXPECT_ACTION("SetNeedsBeginFrames(true)", client_, 0, 3);
1615 EXPECT_ACTION("WillBeginImplFrame", client_, 1, 3); 1651 EXPECT_ACTION("WillBeginImplFrame", client_, 1, 3);
1616 EXPECT_ACTION("ScheduledActionAnimate", client_, 2, 3); 1652 EXPECT_ACTION("ScheduledActionAnimate", client_, 2, 3);
1617 1653
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 1740
1705 // Verify that we don't skip the actions of the BeginImplFrame 1741 // Verify that we don't skip the actions of the BeginImplFrame
1706 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 0, 5); 1742 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 0, 5);
1707 EXPECT_ACTION("ScheduledActionCommit", client_, 1, 5); 1743 EXPECT_ACTION("ScheduledActionCommit", client_, 1, 5);
1708 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 2, 5); 1744 EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 2, 5);
1709 EXPECT_ACTION("ScheduledActionAnimate", client_, 3, 5); 1745 EXPECT_ACTION("ScheduledActionAnimate", client_, 3, 5);
1710 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 4, 5); 1746 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 4, 5);
1711 } 1747 }
1712 } 1748 }
1713 1749
1750 TEST_F(
1751 SchedulerTest,
1752 ImplFrameIsNotSkippedAfterLateSwapAck_BeginMainFrameQueueDurationCriticalToo Long) {
1753 scheduler_settings_.use_external_begin_frame_source = true;
1754 SetUpScheduler(true);
1755 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1756 fake_compositor_timing_history_
1757 ->SetBeginMainFrameQueueDurationCriticalEstimate(kSlowDuration);
1758 fake_compositor_timing_history_
1759 ->SetBeginMainFrameQueueDurationNotCriticalEstimate(kSlowDuration);
1760 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck());
1761 }
1762
1714 TEST_F(SchedulerTest, 1763 TEST_F(SchedulerTest,
1715 ImplFrameIsNotSkippedAfterLateSwapAck_CommitEstimateTooLong) { 1764 ImplFrameIsNotSkippedAfterLateSwapAck_CommitEstimateTooLong) {
1716 scheduler_settings_.use_external_begin_frame_source = true; 1765 scheduler_settings_.use_external_begin_frame_source = true;
1717 SetUpScheduler(true); 1766 SetUpScheduler(true);
1718 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1767 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1719 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1768 fake_compositor_timing_history_
1720 auto slow_duration = base::TimeDelta::FromSeconds(1); 1769 ->SetBeginMainFrameStartToCommitDurationEstimate(kSlowDuration);
1721 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate(
1722 slow_duration);
1723 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); 1770 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck());
1724 } 1771 }
1725 1772
1726 TEST_F(SchedulerTest, 1773 TEST_F(SchedulerTest,
1727 ImplFrameIsNotSkippedAfterLateSwapAck_ReadyToActivateEstimateTooLong) { 1774 ImplFrameIsNotSkippedAfterLateSwapAck_ReadyToActivateEstimateTooLong) {
1728 scheduler_settings_.use_external_begin_frame_source = true; 1775 scheduler_settings_.use_external_begin_frame_source = true;
1729 SetUpScheduler(true); 1776 SetUpScheduler(true);
1730 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1777 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1731 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1732 auto slow_duration = base::TimeDelta::FromSeconds(1);
1733 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate( 1778 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate(
1734 slow_duration); 1779 kSlowDuration);
1735 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); 1780 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck());
1736 } 1781 }
1737 1782
1738 TEST_F(SchedulerTest, 1783 TEST_F(SchedulerTest,
1739 ImplFrameIsNotSkippedAfterLateSwapAck_ActivateEstimateTooLong) { 1784 ImplFrameIsNotSkippedAfterLateSwapAck_ActivateEstimateTooLong) {
1740 scheduler_settings_.use_external_begin_frame_source = true; 1785 scheduler_settings_.use_external_begin_frame_source = true;
1741 SetUpScheduler(true); 1786 SetUpScheduler(true);
1742 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1787 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1743 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1788 fake_compositor_timing_history_->SetActivateDurationEstimate(kSlowDuration);
1744 auto slow_duration = base::TimeDelta::FromSeconds(1);
1745 fake_compositor_timing_history_->SetActivateDurationEstimate(slow_duration);
1746 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); 1789 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck());
1747 } 1790 }
1748 1791
1749 TEST_F(SchedulerTest, 1792 TEST_F(SchedulerTest,
1750 ImplFrameIsNotSkippedAfterLateSwapAck_DrawEstimateTooLong) { 1793 ImplFrameIsNotSkippedAfterLateSwapAck_DrawEstimateTooLong) {
1751 scheduler_settings_.use_external_begin_frame_source = true; 1794 scheduler_settings_.use_external_begin_frame_source = true;
1752 SetUpScheduler(true); 1795 SetUpScheduler(true);
1753 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1796 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1754 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); 1797 fake_compositor_timing_history_->SetDrawDurationEstimate(kSlowDuration);
1755 auto slow_duration = base::TimeDelta::FromSeconds(1);
1756 fake_compositor_timing_history_->SetDrawDurationEstimate(slow_duration);
1757 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); 1798 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck());
1758 } 1799 }
1759 1800
1760 TEST_F(SchedulerTest, 1801 TEST_F(SchedulerTest,
1761 MainFrameThenImplFrameSkippedAfterLateCommitAndLateSwapAck) { 1802 MainFrameThenImplFrameSkippedAfterLateCommitAndLateSwapAck) {
1762 // Set up client with custom estimates. 1803 // Set up client with custom estimates.
1763 // This test starts off with expensive estimates to prevent latency recovery 1804 // This test starts off with expensive estimates to prevent latency recovery
1764 // initially, then lowers the estimates to enable it once both the main 1805 // initially, then lowers the estimates to enable it once both the main
1765 // and impl threads are in a high latency mode. 1806 // and impl threads are in a high latency mode.
1766 scheduler_settings_.use_external_begin_frame_source = true; 1807 scheduler_settings_.use_external_begin_frame_source = true;
1767 SetUpScheduler(true); 1808 SetUpScheduler(true);
1768 1809 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration);
1769 auto slow_duration = base::TimeDelta::FromSeconds(1);
1770 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration);
1771 1810
1772 // To get into a high latency state, this test disables automatic swap acks. 1811 // To get into a high latency state, this test disables automatic swap acks.
1773 scheduler_->SetMaxSwapsPending(1); 1812 scheduler_->SetMaxSwapsPending(1);
1774 client_->SetAutomaticSwapAck(false); 1813 client_->SetAutomaticSwapAck(false);
1775 1814
1776 // Impl thread hits deadline before commit finishes to make 1815 // Impl thread hits deadline before commit finishes to make
1777 // MainThreadMissedLastDeadline true 1816 // MainThreadMissedLastDeadline true
1778 client_->Reset(); 1817 client_->Reset();
1779 scheduler_->SetNeedsBeginMainFrame(); 1818 scheduler_->SetNeedsBeginMainFrame();
1780 EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline()); 1819 EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 1861
1823 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 1862 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
1824 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); 1863 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
1825 // Note: BeginMainFrame and swap are skipped here because of 1864 // Note: BeginMainFrame and swap are skipped here because of
1826 // swap ack backpressure, not because of latency recovery. 1865 // swap ack backpressure, not because of latency recovery.
1827 EXPECT_FALSE(client_->HasAction("ScheduledActionSendBeginMainFrame")); 1866 EXPECT_FALSE(client_->HasAction("ScheduledActionSendBeginMainFrame"));
1828 EXPECT_FALSE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible")); 1867 EXPECT_FALSE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
1829 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline()); 1868 EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
1830 1869
1831 // Lower estimates so that the scheduler will attempt latency recovery. 1870 // Lower estimates so that the scheduler will attempt latency recovery.
1832 auto fast_duration = base::TimeDelta::FromMilliseconds(1); 1871 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
1833 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration);
1834 1872
1835 // Now that both threads are in a high latency mode, make sure we 1873 // Now that both threads are in a high latency mode, make sure we
1836 // skip the BeginMainFrame, then the BeginImplFrame, but not both 1874 // skip the BeginMainFrame, then the BeginImplFrame, but not both
1837 // at the same time. 1875 // at the same time.
1838 1876
1839 // Verify we skip BeginMainFrame first. 1877 // Verify we skip BeginMainFrame first.
1840 client_->Reset(); 1878 client_->Reset();
1841 // Previous commit request is still outstanding. 1879 // Previous commit request is still outstanding.
1842 EXPECT_TRUE(scheduler_->NeedsBeginMainFrame()); 1880 EXPECT_TRUE(scheduler_->NeedsBeginMainFrame());
1843 EXPECT_TRUE(scheduler_->SwapThrottled()); 1881 EXPECT_TRUE(scheduler_->SwapThrottled());
(...skipping 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after
3479 EXPECT_SCOPED(AdvanceFrame()); 3517 EXPECT_SCOPED(AdvanceFrame());
3480 3518
3481 // At the next BeginFrame, authoritative interval is used instead of previous 3519 // At the next BeginFrame, authoritative interval is used instead of previous
3482 // interval. 3520 // interval.
3483 EXPECT_NE(initial_interval, scheduler_->BeginImplFrameInterval()); 3521 EXPECT_NE(initial_interval, scheduler_->BeginImplFrameInterval());
3484 EXPECT_EQ(authoritative_interval, scheduler_->BeginImplFrameInterval()); 3522 EXPECT_EQ(authoritative_interval, scheduler_->BeginImplFrameInterval());
3485 } 3523 }
3486 3524
3487 TEST_F(SchedulerTest, ImplLatencyTakesPriority) { 3525 TEST_F(SchedulerTest, ImplLatencyTakesPriority) {
3488 SetUpScheduler(true); 3526 SetUpScheduler(true);
3489 scheduler_->SetImplLatencyTakesPriority(true); 3527
3528 scheduler_->SetSmoothnessMode(SMOOTHNESS_TAKES_PRIORITY,
3529 SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
3530 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(true);
3531 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority());
3532 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(false);
3490 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority()); 3533 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority());
3491 3534
3492 scheduler_->SetImplLatencyTakesPriority(false); 3535 scheduler_->SetSmoothnessMode(SMOOTHNESS_TAKES_PRIORITY,
3536 SCROLL_AFFECTS_SCROLL_HANDLER);
3537 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(true);
3538 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority());
3539 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(false);
3540 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority());
3541
3542 scheduler_->SetSmoothnessMode(SAME_PRIORITY_FOR_BOTH_TREES,
3543 SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER);
3544 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(true);
3545 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority());
3546 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(false);
3547 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority());
3548
3549 scheduler_->SetSmoothnessMode(SAME_PRIORITY_FOR_BOTH_TREES,
3550 SCROLL_AFFECTS_SCROLL_HANDLER);
3551 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(true);
3552 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority());
3553 scheduler_->SetCriticalBeginMainFrameToActivateIsFast(false);
3493 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority()); 3554 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority());
3494 } 3555 }
3495 3556
3496 TEST_F(SchedulerTest, BeginMainFrameArgs_OnCriticalPath) { 3557 // The three letters appeneded to each version of this test mean the following:s
3558 // tree_priority: B = both trees same priority; A = active tree priority;
3559 // scroll_handler_state: H = affects scroll handler; N = does not affect scroll
3560 // handler;
3561 // durations: F = fast durations; S = slow durations
3562 bool SchedulerTest::BeginMainFrameOnCriticalPath(
3563 TreePriority tree_priority,
3564 ScrollHandlerState scroll_handler_state,
3565 base::TimeDelta durations) {
3497 scheduler_settings_.use_external_begin_frame_source = true; 3566 scheduler_settings_.use_external_begin_frame_source = true;
3498 SetUpScheduler(true); 3567 SetUpScheduler(true);
3499 3568 fake_compositor_timing_history_->SetAllEstimatesTo(durations);
3500 scheduler_->SetImplLatencyTakesPriority(false); 3569 client_->Reset();
3570 scheduler_->SetSmoothnessMode(tree_priority, scroll_handler_state);
3501 scheduler_->SetNeedsBeginMainFrame(); 3571 scheduler_->SetNeedsBeginMainFrame();
3502
3503 client_->Reset();
3504 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); 3572 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid());
3505 EXPECT_SCOPED(AdvanceFrame()); 3573 EXPECT_SCOPED(AdvanceFrame());
3506 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); 3574 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid());
3507 EXPECT_TRUE(client_->last_begin_main_frame_args().on_critical_path); 3575 return client_->last_begin_main_frame_args().on_critical_path;
3508 } 3576 }
3509 3577
3510 TEST_F(SchedulerTest, BeginMainFrameArgs_NotOnCriticalPath) { 3578 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_BNF) {
3511 scheduler_settings_.use_external_begin_frame_source = true; 3579 EXPECT_TRUE(BeginMainFrameOnCriticalPath(
3512 SetUpScheduler(true); 3580 SAME_PRIORITY_FOR_BOTH_TREES, SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER,
3581 kFastDuration));
3582 }
3513 3583
3514 scheduler_->SetImplLatencyTakesPriority(true); 3584 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_BNS) {
3515 scheduler_->SetNeedsBeginMainFrame(); 3585 EXPECT_TRUE(BeginMainFrameOnCriticalPath(
3586 SAME_PRIORITY_FOR_BOTH_TREES, SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER,
3587 kSlowDuration));
3588 }
3516 3589
3517 client_->Reset(); 3590 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_BHF) {
3518 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); 3591 EXPECT_TRUE(BeginMainFrameOnCriticalPath(SAME_PRIORITY_FOR_BOTH_TREES,
3519 EXPECT_SCOPED(AdvanceFrame()); 3592 SCROLL_AFFECTS_SCROLL_HANDLER,
3520 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); 3593 kFastDuration));
3521 EXPECT_FALSE(client_->last_begin_main_frame_args().on_critical_path); 3594 }
3595
3596 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_BHS) {
3597 EXPECT_TRUE(BeginMainFrameOnCriticalPath(SAME_PRIORITY_FOR_BOTH_TREES,
3598 SCROLL_AFFECTS_SCROLL_HANDLER,
3599 kSlowDuration));
3600 }
3601
3602 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_ANF) {
3603 EXPECT_FALSE(BeginMainFrameOnCriticalPath(
3604 SMOOTHNESS_TAKES_PRIORITY, SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER,
3605 kFastDuration));
3606 }
3607
3608 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_ANS) {
3609 EXPECT_FALSE(BeginMainFrameOnCriticalPath(
3610 SMOOTHNESS_TAKES_PRIORITY, SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER,
3611 kSlowDuration));
3612 }
3613
3614 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHF) {
3615 EXPECT_TRUE(BeginMainFrameOnCriticalPath(
3616 SMOOTHNESS_TAKES_PRIORITY, SCROLL_AFFECTS_SCROLL_HANDLER, kFastDuration));
3617 }
3618
3619 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHS) {
3620 EXPECT_FALSE(BeginMainFrameOnCriticalPath(
3621 SMOOTHNESS_TAKES_PRIORITY, SCROLL_AFFECTS_SCROLL_HANDLER, kSlowDuration));
3522 } 3622 }
3523 3623
3524 } // namespace 3624 } // namespace
3525 } // namespace cc 3625 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698