| 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 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 } | 1039 } |
| 1040 | 1040 |
| 1041 private: | 1041 private: |
| 1042 base::TimeDelta draw_duration_; | 1042 base::TimeDelta draw_duration_; |
| 1043 base::TimeDelta begin_main_frame_to_commit_duration_; | 1043 base::TimeDelta begin_main_frame_to_commit_duration_; |
| 1044 base::TimeDelta commit_to_activate_duration_; | 1044 base::TimeDelta commit_to_activate_duration_; |
| 1045 }; | 1045 }; |
| 1046 | 1046 |
| 1047 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, | 1047 void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, |
| 1048 int64 commit_to_activate_estimate_in_ms, | 1048 int64 commit_to_activate_estimate_in_ms, |
| 1049 bool smoothness_takes_priority, | 1049 bool impl_latency_takes_priority, |
| 1050 bool should_send_begin_main_frame) { | 1050 bool should_send_begin_main_frame) { |
| 1051 // Set up client with specified estimates (draw duration is set to 1). | 1051 // Set up client with specified estimates (draw duration is set to 1). |
| 1052 SchedulerClientWithFixedEstimates client( | 1052 SchedulerClientWithFixedEstimates client( |
| 1053 base::TimeDelta::FromMilliseconds(1), | 1053 base::TimeDelta::FromMilliseconds(1), |
| 1054 base::TimeDelta::FromMilliseconds( | 1054 base::TimeDelta::FromMilliseconds( |
| 1055 begin_main_frame_to_commit_estimate_in_ms), | 1055 begin_main_frame_to_commit_estimate_in_ms), |
| 1056 base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms)); | 1056 base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms)); |
| 1057 SchedulerSettings default_scheduler_settings; | 1057 SchedulerSettings default_scheduler_settings; |
| 1058 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); | 1058 TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
| 1059 scheduler->SetCanStart(); | 1059 scheduler->SetCanStart(); |
| 1060 scheduler->SetVisible(true); | 1060 scheduler->SetVisible(true); |
| 1061 scheduler->SetCanDraw(true); | 1061 scheduler->SetCanDraw(true); |
| 1062 scheduler->SetSmoothnessTakesPriority(smoothness_takes_priority); | 1062 scheduler->SetImplLatencyTakesPriority(impl_latency_takes_priority); |
| 1063 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1063 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1064 | 1064 |
| 1065 // Impl thread hits deadline before commit finishes. | 1065 // Impl thread hits deadline before commit finishes. |
| 1066 client.Reset(); | 1066 client.Reset(); |
| 1067 scheduler->SetNeedsCommit(); | 1067 scheduler->SetNeedsCommit(); |
| 1068 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); | 1068 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); |
| 1069 scheduler->BeginFrame(CreateBeginFrameArgsForTesting()); | 1069 scheduler->BeginFrame(CreateBeginFrameArgsForTesting()); |
| 1070 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); | 1070 EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode()); |
| 1071 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1071 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1072 EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode()); | 1072 EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1099 // before the deadline (~8ms by default). | 1099 // before the deadline (~8ms by default). |
| 1100 MainFrameInHighLatencyMode(10, 1, false, true); | 1100 MainFrameInHighLatencyMode(10, 1, false, true); |
| 1101 } | 1101 } |
| 1102 | 1102 |
| 1103 TEST(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanActivateTooLong) { | 1103 TEST(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanActivateTooLong) { |
| 1104 // Set up client so that estimates indicate that the activate cannot finish | 1104 // Set up client so that estimates indicate that the activate cannot finish |
| 1105 // before the deadline (~8ms by default). | 1105 // before the deadline (~8ms by default). |
| 1106 MainFrameInHighLatencyMode(1, 10, false, true); | 1106 MainFrameInHighLatencyMode(1, 10, false, true); |
| 1107 } | 1107 } |
| 1108 | 1108 |
| 1109 TEST(SchedulerTest, NotSkipMainFrameInPreferSmoothnessMode) { | 1109 TEST(SchedulerTest, NotSkipMainFrameInPreferImplLatencyMode) { |
| 1110 // Set up client so that estimates indicate that we can commit and activate | 1110 // Set up client so that estimates indicate that we can commit and activate |
| 1111 // before the deadline (~8ms by default), but also enable smoothness takes | 1111 // before the deadline (~8ms by default), but also enable impl latency takes |
| 1112 // priority mode. | 1112 // priority mode. |
| 1113 MainFrameInHighLatencyMode(1, 1, true, true); | 1113 MainFrameInHighLatencyMode(1, 1, true, true); |
| 1114 } | 1114 } |
| 1115 | 1115 |
| 1116 TEST(SchedulerTest, PollForCommitCompletion) { | 1116 TEST(SchedulerTest, PollForCommitCompletion) { |
| 1117 // Since we are simulating a long commit, set up a client with draw duration | 1117 // Since we are simulating a long commit, set up a client with draw duration |
| 1118 // estimates that prevent skipping main frames to get to low latency mode. | 1118 // estimates that prevent skipping main frames to get to low latency mode. |
| 1119 SchedulerClientWithFixedEstimates client( | 1119 SchedulerClientWithFixedEstimates client( |
| 1120 base::TimeDelta::FromMilliseconds(1), | 1120 base::TimeDelta::FromMilliseconds(1), |
| 1121 base::TimeDelta::FromMilliseconds(32), | 1121 base::TimeDelta::FromMilliseconds(32), |
| (...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1917 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); | 1917 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); |
| 1918 | 1918 |
| 1919 client.Reset(); | 1919 client.Reset(); |
| 1920 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1920 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1921 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); | 1921 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 1922 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); | 1922 EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive()); |
| 1923 } | 1923 } |
| 1924 | 1924 |
| 1925 } // namespace | 1925 } // namespace |
| 1926 } // namespace cc | 1926 } // namespace cc |
| OLD | NEW |