summaryrefslogtreecommitdiffstats
path: root/cc/scheduler/compositor_timing_history_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/scheduler/compositor_timing_history_unittest.cc')
-rw-r--r--cc/scheduler/compositor_timing_history_unittest.cc142
1 files changed, 136 insertions, 6 deletions
diff --git a/cc/scheduler/compositor_timing_history_unittest.cc b/cc/scheduler/compositor_timing_history_unittest.cc
index 2cbc8a8..900367f 100644
--- a/cc/scheduler/compositor_timing_history_unittest.cc
+++ b/cc/scheduler/compositor_timing_history_unittest.cc
@@ -51,9 +51,11 @@ base::TimeTicks TestCompositorTimingHistory::Now() const {
return test_->Now();
}
-TEST_F(CompositorTimingHistoryTest, AllSequentialCommit_Critical) {
+TEST_F(CompositorTimingHistoryTest, AllSequential_Commit) {
base::TimeDelta one_second = base::TimeDelta::FromSeconds(1);
+ // Critical BeginMainFrames are faster than non critical ones,
+ // as expected.
base::TimeDelta begin_main_frame_queue_duration =
base::TimeDelta::FromMilliseconds(1);
base::TimeDelta begin_main_frame_start_to_commit_duration =
@@ -89,8 +91,9 @@ TEST_F(CompositorTimingHistoryTest, AllSequentialCommit_Critical) {
EXPECT_EQ(begin_main_frame_queue_duration,
timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
- EXPECT_EQ(base::TimeDelta(),
+ EXPECT_EQ(begin_main_frame_queue_duration,
timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
+
EXPECT_EQ(begin_main_frame_start_to_commit_duration,
timing_history_.BeginMainFrameStartToCommitDurationEstimate());
@@ -108,8 +111,7 @@ TEST_F(CompositorTimingHistoryTest, AllSequentialCommit_Critical) {
EXPECT_EQ(draw_duration, timing_history_.DrawDurationEstimate());
}
-TEST_F(CompositorTimingHistoryTest,
- AllSequentialBeginMainFrameAborted_NotCritical) {
+TEST_F(CompositorTimingHistoryTest, AllSequential_BeginMainFrameAborted) {
base::TimeDelta one_second = base::TimeDelta::FromSeconds(1);
base::TimeDelta begin_main_frame_queue_duration =
@@ -124,7 +126,7 @@ TEST_F(CompositorTimingHistoryTest,
base::TimeDelta activate_duration = base::TimeDelta::FromMilliseconds(4);
base::TimeDelta draw_duration = base::TimeDelta::FromMilliseconds(5);
- timing_history_.WillBeginMainFrame(false);
+ timing_history_.WillBeginMainFrame(true);
AdvanceNowBy(begin_main_frame_queue_duration);
timing_history_.BeginMainFrameStarted(Now());
AdvanceNowBy(begin_main_frame_start_to_commit_duration);
@@ -146,10 +148,11 @@ TEST_F(CompositorTimingHistoryTest,
AdvanceNowBy(draw_duration);
timing_history_.DidDraw(true);
- EXPECT_EQ(base::TimeDelta(),
+ EXPECT_EQ(begin_main_frame_queue_duration,
timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
EXPECT_EQ(begin_main_frame_queue_duration,
timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
+
EXPECT_EQ(begin_main_frame_start_to_commit_duration,
timing_history_.BeginMainFrameStartToCommitDurationEstimate());
@@ -167,5 +170,132 @@ TEST_F(CompositorTimingHistoryTest,
EXPECT_EQ(draw_duration, timing_history_.DrawDurationEstimate());
}
+TEST_F(CompositorTimingHistoryTest, BeginMainFrame_CriticalFaster) {
+ // Critical BeginMainFrames are faster than non critical ones.
+ base::TimeDelta begin_main_frame_queue_duration_critical =
+ base::TimeDelta::FromMilliseconds(1);
+ base::TimeDelta begin_main_frame_queue_duration_not_critical =
+ base::TimeDelta::FromMilliseconds(2);
+ base::TimeDelta begin_main_frame_start_to_commit_duration =
+ base::TimeDelta::FromMilliseconds(1);
+
+ timing_history_.WillBeginMainFrame(true);
+ AdvanceNowBy(begin_main_frame_queue_duration_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ timing_history_.BeginMainFrameAborted();
+
+ timing_history_.WillBeginMainFrame(false);
+ AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ timing_history_.BeginMainFrameAborted();
+
+ // Since the critical BeginMainFrames are faster than non critical ones,
+ // the expectations are straightforward.
+ EXPECT_EQ(begin_main_frame_queue_duration_critical,
+ timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
+ EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
+ timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
+ EXPECT_EQ(begin_main_frame_start_to_commit_duration,
+ timing_history_.BeginMainFrameStartToCommitDurationEstimate());
+
+ base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
+ begin_main_frame_queue_duration_not_critical +
+ begin_main_frame_start_to_commit_duration;
+ EXPECT_EQ(begin_main_frame_to_commit_duration_expected_,
+ timing_history_.BeginMainFrameToCommitDurationEstimate());
+}
+
+TEST_F(CompositorTimingHistoryTest, BeginMainFrames_OldCriticalSlower) {
+ // Critical BeginMainFrames are slower than non critical ones,
+ // which is unexpected, but could occur if one type of frame
+ // hasn't been sent for a significant amount of time.
+ base::TimeDelta begin_main_frame_queue_duration_critical =
+ base::TimeDelta::FromMilliseconds(2);
+ base::TimeDelta begin_main_frame_queue_duration_not_critical =
+ base::TimeDelta::FromMilliseconds(1);
+ base::TimeDelta begin_main_frame_start_to_commit_duration =
+ base::TimeDelta::FromMilliseconds(1);
+
+ // A single critical frame that is slow.
+ timing_history_.WillBeginMainFrame(true);
+ AdvanceNowBy(begin_main_frame_queue_duration_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ // BeginMainFrameAborted counts as a commit complete.
+ timing_history_.BeginMainFrameAborted();
+
+ // A bunch of faster non critical frames that are newer.
+ for (int i = 0; i < 100; i++) {
+ timing_history_.WillBeginMainFrame(false);
+ AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ // BeginMainFrameAborted counts as a commit complete.
+ timing_history_.BeginMainFrameAborted();
+ }
+
+ // Recent fast non critical BeginMainFrames should result in the
+ // critical estimate also being fast.
+ EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
+ timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
+ EXPECT_EQ(begin_main_frame_queue_duration_not_critical,
+ timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
+
+ EXPECT_EQ(begin_main_frame_start_to_commit_duration,
+ timing_history_.BeginMainFrameStartToCommitDurationEstimate());
+
+ base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
+ begin_main_frame_queue_duration_not_critical +
+ begin_main_frame_start_to_commit_duration;
+ EXPECT_EQ(begin_main_frame_to_commit_duration_expected_,
+ timing_history_.BeginMainFrameToCommitDurationEstimate());
+}
+
+TEST_F(CompositorTimingHistoryTest, BeginMainFrames_NewCriticalSlower) {
+ // Critical BeginMainFrames are slower than non critical ones,
+ // which is unexpected, but could occur if one type of frame
+ // hasn't been sent for a significant amount of time.
+ base::TimeDelta begin_main_frame_queue_duration_critical =
+ base::TimeDelta::FromMilliseconds(2);
+ base::TimeDelta begin_main_frame_queue_duration_not_critical =
+ base::TimeDelta::FromMilliseconds(1);
+ base::TimeDelta begin_main_frame_start_to_commit_duration =
+ base::TimeDelta::FromMilliseconds(1);
+
+ // A single non critical frame that is fast.
+ timing_history_.WillBeginMainFrame(false);
+ AdvanceNowBy(begin_main_frame_queue_duration_not_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ timing_history_.BeginMainFrameAborted();
+
+ // A bunch of slower critical frames that are newer.
+ for (int i = 0; i < 100; i++) {
+ timing_history_.WillBeginMainFrame(true);
+ AdvanceNowBy(begin_main_frame_queue_duration_critical);
+ timing_history_.BeginMainFrameStarted(Now());
+ AdvanceNowBy(begin_main_frame_start_to_commit_duration);
+ timing_history_.BeginMainFrameAborted();
+ }
+
+ // Recent slow critical BeginMainFrames should result in the
+ // not critical estimate also being slow.
+ EXPECT_EQ(begin_main_frame_queue_duration_critical,
+ timing_history_.BeginMainFrameQueueDurationCriticalEstimate());
+ EXPECT_EQ(begin_main_frame_queue_duration_critical,
+ timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate());
+
+ EXPECT_EQ(begin_main_frame_start_to_commit_duration,
+ timing_history_.BeginMainFrameStartToCommitDurationEstimate());
+
+ base::TimeDelta begin_main_frame_to_commit_duration_expected_ =
+ begin_main_frame_queue_duration_critical +
+ begin_main_frame_start_to_commit_duration;
+ EXPECT_EQ(begin_main_frame_to_commit_duration_expected_,
+ timing_history_.BeginMainFrameToCommitDurationEstimate());
+}
+
} // namespace
} // namespace cc