| 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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 } | 164 } |
| 165 | 165 |
| 166 void AdvanceFrame() { | 166 void AdvanceFrame() { |
| 167 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), | 167 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), |
| 168 "FakeSchedulerClient::AdvanceFrame"); | 168 "FakeSchedulerClient::AdvanceFrame"); |
| 169 if (ExternalBeginFrame()) { | 169 if (ExternalBeginFrame()) { |
| 170 // Creep the time forward so that any BeginFrameArgs is not equal to the | 170 // Creep the time forward so that any BeginFrameArgs is not equal to the |
| 171 // last one otherwise we violate the BeginFrameSource contract. | 171 // last one otherwise we violate the BeginFrameSource contract. |
| 172 now_src_->AdvanceNowMicroseconds(1); | 172 now_src_->AdvanceNowMicroseconds(1); |
| 173 fake_external_begin_frame_source_->TestOnBeginFrame( | 173 fake_external_begin_frame_source_->TestOnBeginFrame( |
| 174 CreateBeginFrameArgsForTesting(now_src_)); | 174 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src_)); |
| 175 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 175 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 176 } | 176 } |
| 177 | 177 |
| 178 EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false))); | 178 EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false))); |
| 179 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 179 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
| 180 } | 180 } |
| 181 | 181 |
| 182 OrderedSimpleTaskRunner& task_runner() { return *task_runner_; } | 182 OrderedSimpleTaskRunner& task_runner() { return *task_runner_; } |
| 183 TestNowSource* now_src() { return now_src_.get(); } | 183 TestNowSource* now_src() { return now_src_.get(); } |
| 184 | 184 |
| (...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 scheduler->SetCanStart(); | 1119 scheduler->SetCanStart(); |
| 1120 scheduler->SetVisible(true); | 1120 scheduler->SetVisible(true); |
| 1121 scheduler->DidCreateAndInitializeOutputSurface(); | 1121 scheduler->DidCreateAndInitializeOutputSurface(); |
| 1122 | 1122 |
| 1123 scheduler->SetNeedsCommit(); | 1123 scheduler->SetNeedsCommit(); |
| 1124 EXPECT_TRUE(scheduler->CommitPending()); | 1124 EXPECT_TRUE(scheduler->CommitPending()); |
| 1125 scheduler->NotifyBeginMainFrameStarted(); | 1125 scheduler->NotifyBeginMainFrameStarted(); |
| 1126 scheduler->NotifyReadyToCommit(); | 1126 scheduler->NotifyReadyToCommit(); |
| 1127 scheduler->SetNeedsRedraw(); | 1127 scheduler->SetNeedsRedraw(); |
| 1128 | 1128 |
| 1129 BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src()); | 1129 BeginFrameArgs frame_args = |
| 1130 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src()); |
| 1130 frame_args.interval = base::TimeDelta::FromMilliseconds(1000); | 1131 frame_args.interval = base::TimeDelta::FromMilliseconds(1000); |
| 1131 client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args); | 1132 client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args); |
| 1132 | 1133 |
| 1133 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1134 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1134 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1135 client.task_runner().RunPendingTasks(); // Run posted deadline. |
| 1135 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1136 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 1136 | 1137 |
| 1137 scheduler->DidSwapBuffers(); | 1138 scheduler->DidSwapBuffers(); |
| 1138 scheduler->DidSwapBuffersComplete(); | 1139 scheduler->DidSwapBuffersComplete(); |
| 1139 | 1140 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1193 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1193 | 1194 |
| 1194 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1195 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1195 client.Reset(); | 1196 client.Reset(); |
| 1196 scheduler->SetNeedsCommit(); | 1197 scheduler->SetNeedsCommit(); |
| 1197 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1198 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 1198 client.Reset(); | 1199 client.Reset(); |
| 1199 | 1200 |
| 1200 // Create a BeginFrame with a long deadline to avoid race conditions. | 1201 // Create a BeginFrame with a long deadline to avoid race conditions. |
| 1201 // This is the first BeginFrame, which will be handled immediately. | 1202 // This is the first BeginFrame, which will be handled immediately. |
| 1202 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); | 1203 BeginFrameArgs args = |
| 1204 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src()); |
| 1203 args.deadline += base::TimeDelta::FromHours(1); | 1205 args.deadline += base::TimeDelta::FromHours(1); |
| 1204 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1206 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| 1205 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1207 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 1206 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); | 1208 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 1207 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1209 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1208 EXPECT_TRUE(client.needs_begin_frames()); | 1210 EXPECT_TRUE(client.needs_begin_frames()); |
| 1209 client.Reset(); | 1211 client.Reset(); |
| 1210 | 1212 |
| 1211 // Queue BeginFrames while we are still handling the previous BeginFrame. | 1213 // Queue BeginFrames while we are still handling the previous BeginFrame. |
| 1212 args.frame_time += base::TimeDelta::FromSeconds(1); | 1214 args.frame_time += base::TimeDelta::FromSeconds(1); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 client.SetAutomaticSwapAck(false); | 1272 client.SetAutomaticSwapAck(false); |
| 1271 | 1273 |
| 1272 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1274 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1273 client.Reset(); | 1275 client.Reset(); |
| 1274 scheduler->SetNeedsCommit(); | 1276 scheduler->SetNeedsCommit(); |
| 1275 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1277 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 1276 client.Reset(); | 1278 client.Reset(); |
| 1277 | 1279 |
| 1278 // Create a BeginFrame with a long deadline to avoid race conditions. | 1280 // Create a BeginFrame with a long deadline to avoid race conditions. |
| 1279 // This is the first BeginFrame, which will be handled immediately. | 1281 // This is the first BeginFrame, which will be handled immediately. |
| 1280 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); | 1282 BeginFrameArgs args = |
| 1283 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src()); |
| 1281 args.deadline += base::TimeDelta::FromHours(1); | 1284 args.deadline += base::TimeDelta::FromHours(1); |
| 1282 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1285 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| 1283 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1286 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 1284 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); | 1287 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 1285 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1288 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1286 EXPECT_TRUE(client.needs_begin_frames()); | 1289 EXPECT_TRUE(client.needs_begin_frames()); |
| 1287 client.Reset(); | 1290 client.Reset(); |
| 1288 | 1291 |
| 1289 // Queue BeginFrame while we are still handling the previous BeginFrame. | 1292 // Queue BeginFrame while we are still handling the previous BeginFrame. |
| 1290 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1293 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1745 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1748 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1746 | 1749 |
| 1747 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1750 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1748 client.Reset(); | 1751 client.Reset(); |
| 1749 scheduler->SetNeedsCommit(); | 1752 scheduler->SetNeedsCommit(); |
| 1750 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1753 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 1751 | 1754 |
| 1752 // Create a BeginFrame with a long deadline to avoid race conditions. | 1755 // Create a BeginFrame with a long deadline to avoid race conditions. |
| 1753 // This is the first BeginFrame, which will be handled immediately. | 1756 // This is the first BeginFrame, which will be handled immediately. |
| 1754 client.Reset(); | 1757 client.Reset(); |
| 1755 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); | 1758 BeginFrameArgs args = |
| 1759 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src()); |
| 1756 args.deadline += base::TimeDelta::FromHours(1); | 1760 args.deadline += base::TimeDelta::FromHours(1); |
| 1757 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1761 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| 1758 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1762 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 1759 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); | 1763 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 1760 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1764 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1761 EXPECT_TRUE(client.needs_begin_frames()); | 1765 EXPECT_TRUE(client.needs_begin_frames()); |
| 1762 | 1766 |
| 1763 // Queue BeginFrames while we are still handling the previous BeginFrame. | 1767 // Queue BeginFrames while we are still handling the previous BeginFrame. |
| 1764 args.frame_time += base::TimeDelta::FromSeconds(1); | 1768 args.frame_time += base::TimeDelta::FromSeconds(1); |
| 1765 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1769 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1804 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1808 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
| 1805 | 1809 |
| 1806 // SetNeedsCommit should begin the frame on the next BeginImplFrame. | 1810 // SetNeedsCommit should begin the frame on the next BeginImplFrame. |
| 1807 client.Reset(); | 1811 client.Reset(); |
| 1808 scheduler->SetNeedsCommit(); | 1812 scheduler->SetNeedsCommit(); |
| 1809 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1813 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 1810 | 1814 |
| 1811 // Create a BeginFrame with a long deadline to avoid race conditions. | 1815 // Create a BeginFrame with a long deadline to avoid race conditions. |
| 1812 // This is the first BeginFrame, which will be handled immediately. | 1816 // This is the first BeginFrame, which will be handled immediately. |
| 1813 client.Reset(); | 1817 client.Reset(); |
| 1814 BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); | 1818 BeginFrameArgs args = |
| 1819 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src()); |
| 1815 args.deadline += base::TimeDelta::FromHours(1); | 1820 args.deadline += base::TimeDelta::FromHours(1); |
| 1816 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1821 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| 1817 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1822 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 1818 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); | 1823 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 1819 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1824 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 1820 EXPECT_TRUE(client.needs_begin_frames()); | 1825 EXPECT_TRUE(client.needs_begin_frames()); |
| 1821 | 1826 |
| 1822 // Queue BeginFrames while we are still handling the previous BeginFrame. | 1827 // Queue BeginFrames while we are still handling the previous BeginFrame. |
| 1823 args.frame_time += base::TimeDelta::FromSeconds(1); | 1828 args.frame_time += base::TimeDelta::FromSeconds(1); |
| 1824 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); | 1829 client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2087 | 2092 |
| 2088 // Deadline task is pending | 2093 // Deadline task is pending |
| 2089 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 2094 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
| 2090 client.task_runner().RunPendingTasks(); | 2095 client.task_runner().RunPendingTasks(); |
| 2091 // Deadline task runs immediately | 2096 // Deadline task runs immediately |
| 2092 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2097 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2093 } | 2098 } |
| 2094 | 2099 |
| 2095 } // namespace | 2100 } // namespace |
| 2096 } // namespace cc | 2101 } // namespace cc |
| OLD | NEW |