| 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 | 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 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 client_->Reset(); | 478 client_->Reset(); |
| 479 EXPECT_SCOPED(AdvanceFrame()); | 479 EXPECT_SCOPED(AdvanceFrame()); |
| 480 EXPECT_TRUE(client_->begin_frame_is_sent_to_children()); | 480 EXPECT_TRUE(client_->begin_frame_is_sent_to_children()); |
| 481 } | 481 } |
| 482 | 482 |
| 483 TEST_F(SchedulerTest, SendBeginFramesToChildrenDeadlineNotAdjusted) { | 483 TEST_F(SchedulerTest, SendBeginFramesToChildrenDeadlineNotAdjusted) { |
| 484 // Set up client with specified estimates. | 484 // Set up client with specified estimates. |
| 485 scheduler_settings_.use_external_begin_frame_source = true; | 485 scheduler_settings_.use_external_begin_frame_source = true; |
| 486 SetUpScheduler(true); | 486 SetUpScheduler(true); |
| 487 | 487 |
| 488 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate( | 488 fake_compositor_timing_history_ |
| 489 base::TimeDelta::FromMilliseconds(2)); | 489 ->SetBeginMainFrameStartToCommitDurationEstimate( |
| 490 base::TimeDelta::FromMilliseconds(2)); |
| 490 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate( | 491 fake_compositor_timing_history_->SetCommitToReadyToActivateDurationEstimate( |
| 491 base::TimeDelta::FromMilliseconds(4)); | 492 base::TimeDelta::FromMilliseconds(4)); |
| 492 fake_compositor_timing_history_->SetDrawDurationEstimate( | 493 fake_compositor_timing_history_->SetDrawDurationEstimate( |
| 493 base::TimeDelta::FromMilliseconds(1)); | 494 base::TimeDelta::FromMilliseconds(1)); |
| 494 | 495 |
| 495 EXPECT_FALSE(client_->needs_begin_frames()); | 496 EXPECT_FALSE(client_->needs_begin_frames()); |
| 496 scheduler_->SetChildrenNeedBeginFrames(true); | 497 scheduler_->SetChildrenNeedBeginFrames(true); |
| 497 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); | 498 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); |
| 498 EXPECT_TRUE(client_->needs_begin_frames()); | 499 EXPECT_TRUE(client_->needs_begin_frames()); |
| 499 | 500 |
| (...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1394 | 1395 |
| 1395 bool expect_send_begin_main_frame = false; | 1396 bool expect_send_begin_main_frame = false; |
| 1396 EXPECT_SCOPED( | 1397 EXPECT_SCOPED( |
| 1397 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); | 1398 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); |
| 1398 } | 1399 } |
| 1399 | 1400 |
| 1400 TEST_F(SchedulerTest, | 1401 TEST_F(SchedulerTest, |
| 1401 MainFrameNotSkippedAfterLateCommitInPreferImplLatencyMode) { | 1402 MainFrameNotSkippedAfterLateCommitInPreferImplLatencyMode) { |
| 1402 scheduler_settings_.use_external_begin_frame_source = true; | 1403 scheduler_settings_.use_external_begin_frame_source = true; |
| 1403 SetUpScheduler(true); | 1404 SetUpScheduler(true); |
| 1404 scheduler_->SetImplLatencyTakesPriority(true); | 1405 scheduler_->SetSmoothnessMode(true, false); |
| 1405 | 1406 |
| 1406 auto fast_duration = base::TimeDelta::FromMilliseconds(1); | 1407 auto fast_duration = base::TimeDelta::FromMilliseconds(1); |
| 1407 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); | 1408 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); |
| 1408 | 1409 |
| 1409 bool expect_send_begin_main_frame = true; | 1410 bool expect_send_begin_main_frame = true; |
| 1410 EXPECT_SCOPED( | 1411 EXPECT_SCOPED( |
| 1411 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); | 1412 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); |
| 1412 } | 1413 } |
| 1413 | 1414 |
| 1414 TEST_F(SchedulerTest, | 1415 TEST_F(SchedulerTest, |
| 1415 MainFrameNotSkippedAfterLateCommit_CommitEstimateTooLong) { | 1416 MainFrameNotSkippedAfterLateCommit_CommitEstimateTooLong) { |
| 1416 scheduler_settings_.use_external_begin_frame_source = true; | 1417 scheduler_settings_.use_external_begin_frame_source = true; |
| 1417 SetUpScheduler(true); | 1418 SetUpScheduler(true); |
| 1418 auto fast_duration = base::TimeDelta::FromMilliseconds(1); | 1419 auto fast_duration = base::TimeDelta::FromMilliseconds(1); |
| 1419 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); | 1420 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); |
| 1420 auto slow_duration = base::TimeDelta::FromSeconds(1); | 1421 auto slow_duration = base::TimeDelta::FromSeconds(1); |
| 1421 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate( | 1422 fake_compositor_timing_history_ |
| 1422 slow_duration); | 1423 ->SetBeginMainFrameStartToCommitDurationEstimate(slow_duration); |
| 1423 | 1424 |
| 1424 bool expect_send_begin_main_frame = true; | 1425 bool expect_send_begin_main_frame = true; |
| 1425 EXPECT_SCOPED( | 1426 EXPECT_SCOPED( |
| 1426 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); | 1427 CheckMainFrameSkippedAfterLateCommit(expect_send_begin_main_frame)); |
| 1427 } | 1428 } |
| 1428 | 1429 |
| 1429 TEST_F(SchedulerTest, | 1430 TEST_F(SchedulerTest, |
| 1430 MainFrameNotSkippedAfterLateCommit_ReadyToActivateEstimateTooLong) { | 1431 MainFrameNotSkippedAfterLateCommit_ReadyToActivateEstimateTooLong) { |
| 1431 scheduler_settings_.use_external_begin_frame_source = true; | 1432 scheduler_settings_.use_external_begin_frame_source = true; |
| 1432 SetUpScheduler(true); | 1433 SetUpScheduler(true); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1571 } | 1572 } |
| 1572 | 1573 |
| 1573 TEST_F(SchedulerTest, | 1574 TEST_F(SchedulerTest, |
| 1574 ImplFrameSkippedAfterLateSwapAck_ImplLatencyTakesPriority) { | 1575 ImplFrameSkippedAfterLateSwapAck_ImplLatencyTakesPriority) { |
| 1575 scheduler_settings_.use_external_begin_frame_source = true; | 1576 scheduler_settings_.use_external_begin_frame_source = true; |
| 1576 SetUpScheduler(true); | 1577 SetUpScheduler(true); |
| 1577 | 1578 |
| 1578 // Even if every estimate related to the main thread is slow, we should | 1579 // 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 | 1580 // still expect to recover impl thread latency if the draw is fast and we |
| 1580 // are in impl latency takes priority. | 1581 // are in impl latency takes priority. |
| 1581 scheduler_->SetImplLatencyTakesPriority(true); | 1582 scheduler_->SetSmoothnessMode(true, false); |
| 1582 auto slow_duration = base::TimeDelta::FromSeconds(1); | 1583 auto slow_duration = base::TimeDelta::FromSeconds(1); |
| 1583 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration); | 1584 fake_compositor_timing_history_->SetAllEstimatesTo(slow_duration); |
| 1584 auto fast_duration = base::TimeDelta::FromMilliseconds(1); | 1585 auto fast_duration = base::TimeDelta::FromMilliseconds(1); |
| 1585 fake_compositor_timing_history_->SetDrawDurationEstimate(fast_duration); | 1586 fake_compositor_timing_history_->SetDrawDurationEstimate(fast_duration); |
| 1586 | 1587 |
| 1587 bool swap_ack_before_deadline = false; | 1588 bool swap_ack_before_deadline = false; |
| 1588 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline)); | 1589 EXPECT_SCOPED(ImplFrameSkippedAfterLateSwapAck(swap_ack_before_deadline)); |
| 1589 } | 1590 } |
| 1590 | 1591 |
| 1591 TEST_F(SchedulerTest, | 1592 TEST_F(SchedulerTest, |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1711 } | 1712 } |
| 1712 } | 1713 } |
| 1713 | 1714 |
| 1714 TEST_F(SchedulerTest, | 1715 TEST_F(SchedulerTest, |
| 1715 ImplFrameIsNotSkippedAfterLateSwapAck_CommitEstimateTooLong) { | 1716 ImplFrameIsNotSkippedAfterLateSwapAck_CommitEstimateTooLong) { |
| 1716 scheduler_settings_.use_external_begin_frame_source = true; | 1717 scheduler_settings_.use_external_begin_frame_source = true; |
| 1717 SetUpScheduler(true); | 1718 SetUpScheduler(true); |
| 1718 auto fast_duration = base::TimeDelta::FromMilliseconds(1); | 1719 auto fast_duration = base::TimeDelta::FromMilliseconds(1); |
| 1719 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); | 1720 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); |
| 1720 auto slow_duration = base::TimeDelta::FromSeconds(1); | 1721 auto slow_duration = base::TimeDelta::FromSeconds(1); |
| 1721 fake_compositor_timing_history_->SetBeginMainFrameToCommitDurationEstimate( | 1722 fake_compositor_timing_history_ |
| 1722 slow_duration); | 1723 ->SetBeginMainFrameStartToCommitDurationEstimate(slow_duration); |
| 1723 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); | 1724 EXPECT_SCOPED(ImplFrameIsNotSkippedAfterLateSwapAck()); |
| 1724 } | 1725 } |
| 1725 | 1726 |
| 1726 TEST_F(SchedulerTest, | 1727 TEST_F(SchedulerTest, |
| 1727 ImplFrameIsNotSkippedAfterLateSwapAck_ReadyToActivateEstimateTooLong) { | 1728 ImplFrameIsNotSkippedAfterLateSwapAck_ReadyToActivateEstimateTooLong) { |
| 1728 scheduler_settings_.use_external_begin_frame_source = true; | 1729 scheduler_settings_.use_external_begin_frame_source = true; |
| 1729 SetUpScheduler(true); | 1730 SetUpScheduler(true); |
| 1730 auto fast_duration = base::TimeDelta::FromMilliseconds(1); | 1731 auto fast_duration = base::TimeDelta::FromMilliseconds(1); |
| 1731 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); | 1732 fake_compositor_timing_history_->SetAllEstimatesTo(fast_duration); |
| 1732 auto slow_duration = base::TimeDelta::FromSeconds(1); | 1733 auto slow_duration = base::TimeDelta::FromSeconds(1); |
| (...skipping 1746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3479 EXPECT_SCOPED(AdvanceFrame()); | 3480 EXPECT_SCOPED(AdvanceFrame()); |
| 3480 | 3481 |
| 3481 // At the next BeginFrame, authoritative interval is used instead of previous | 3482 // At the next BeginFrame, authoritative interval is used instead of previous |
| 3482 // interval. | 3483 // interval. |
| 3483 EXPECT_NE(initial_interval, scheduler_->BeginImplFrameInterval()); | 3484 EXPECT_NE(initial_interval, scheduler_->BeginImplFrameInterval()); |
| 3484 EXPECT_EQ(authoritative_interval, scheduler_->BeginImplFrameInterval()); | 3485 EXPECT_EQ(authoritative_interval, scheduler_->BeginImplFrameInterval()); |
| 3485 } | 3486 } |
| 3486 | 3487 |
| 3487 TEST_F(SchedulerTest, ImplLatencyTakesPriority) { | 3488 TEST_F(SchedulerTest, ImplLatencyTakesPriority) { |
| 3488 SetUpScheduler(true); | 3489 SetUpScheduler(true); |
| 3489 scheduler_->SetImplLatencyTakesPriority(true); | 3490 scheduler_->SetSmoothnessMode(true, false); |
| 3490 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority()); | 3491 EXPECT_TRUE(scheduler_->ImplLatencyTakesPriority()); |
| 3491 | 3492 |
| 3492 scheduler_->SetImplLatencyTakesPriority(false); | 3493 scheduler_->SetSmoothnessMode(false, false); |
| 3493 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority()); | 3494 EXPECT_FALSE(scheduler_->ImplLatencyTakesPriority()); |
| 3494 } | 3495 } |
| 3495 | 3496 |
| 3496 TEST_F(SchedulerTest, BeginMainFrameArgs_OnCriticalPath) { | 3497 TEST_F(SchedulerTest, BeginMainFrameArgs_OnCriticalPath) { |
| 3497 scheduler_settings_.use_external_begin_frame_source = true; | 3498 scheduler_settings_.use_external_begin_frame_source = true; |
| 3498 SetUpScheduler(true); | 3499 SetUpScheduler(true); |
| 3499 | 3500 |
| 3500 scheduler_->SetImplLatencyTakesPriority(false); | 3501 scheduler_->SetSmoothnessMode(false, false); |
| 3501 scheduler_->SetNeedsBeginMainFrame(); | 3502 scheduler_->SetNeedsBeginMainFrame(); |
| 3502 | 3503 |
| 3503 client_->Reset(); | 3504 client_->Reset(); |
| 3504 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); | 3505 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); |
| 3505 EXPECT_SCOPED(AdvanceFrame()); | 3506 EXPECT_SCOPED(AdvanceFrame()); |
| 3506 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); | 3507 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); |
| 3507 EXPECT_TRUE(client_->last_begin_main_frame_args().on_critical_path); | 3508 EXPECT_TRUE(client_->last_begin_main_frame_args().on_critical_path); |
| 3508 } | 3509 } |
| 3509 | 3510 |
| 3510 TEST_F(SchedulerTest, BeginMainFrameArgs_NotOnCriticalPath) { | 3511 TEST_F(SchedulerTest, BeginMainFrameArgs_NotOnCriticalPath) { |
| 3511 scheduler_settings_.use_external_begin_frame_source = true; | 3512 scheduler_settings_.use_external_begin_frame_source = true; |
| 3512 SetUpScheduler(true); | 3513 SetUpScheduler(true); |
| 3513 | 3514 |
| 3514 scheduler_->SetImplLatencyTakesPriority(true); | 3515 scheduler_->SetSmoothnessMode(true, false); |
| 3515 scheduler_->SetNeedsBeginMainFrame(); | 3516 scheduler_->SetNeedsBeginMainFrame(); |
| 3516 | 3517 |
| 3517 client_->Reset(); | 3518 client_->Reset(); |
| 3518 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); | 3519 EXPECT_FALSE(client_->last_begin_main_frame_args().IsValid()); |
| 3519 EXPECT_SCOPED(AdvanceFrame()); | 3520 EXPECT_SCOPED(AdvanceFrame()); |
| 3520 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); | 3521 EXPECT_TRUE(client_->last_begin_main_frame_args().IsValid()); |
| 3521 EXPECT_FALSE(client_->last_begin_main_frame_args().on_critical_path); | 3522 EXPECT_FALSE(client_->last_begin_main_frame_args().on_critical_path); |
| 3522 } | 3523 } |
| 3523 | 3524 |
| 3524 } // namespace | 3525 } // namespace |
| 3525 } // namespace cc | 3526 } // namespace cc |
| OLD | NEW |