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

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

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 months 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
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/surfaces/display.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/ptr_util.h"
13 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
14 #include "base/numerics/safe_conversions.h" 15 #include "base/numerics/safe_conversions.h"
15 #include "base/run_loop.h" 16 #include "base/run_loop.h"
16 #include "base/time/time.h" 17 #include "base/time/time.h"
17 #include "base/trace_event/trace_event.h" 18 #include "base/trace_event/trace_event.h"
18 #include "cc/test/begin_frame_args_test.h" 19 #include "cc/test/begin_frame_args_test.h"
19 #include "cc/test/ordered_simple_task_runner.h" 20 #include "cc/test/ordered_simple_task_runner.h"
20 #include "cc/test/scheduler_test_common.h" 21 #include "cc/test/scheduler_test_common.h"
21 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 bool will_begin_impl_frame_causes_redraw_; 201 bool will_begin_impl_frame_causes_redraw_;
201 bool will_begin_impl_frame_requests_one_begin_impl_frame_; 202 bool will_begin_impl_frame_requests_one_begin_impl_frame_;
202 bool draw_will_happen_; 203 bool draw_will_happen_;
203 bool swap_will_happen_if_draw_happens_; 204 bool swap_will_happen_if_draw_happens_;
204 bool automatic_swap_ack_; 205 bool automatic_swap_ack_;
205 int num_draws_; 206 int num_draws_;
206 BeginFrameArgs begin_frame_args_sent_to_children_; 207 BeginFrameArgs begin_frame_args_sent_to_children_;
207 BeginFrameArgs last_begin_main_frame_args_; 208 BeginFrameArgs last_begin_main_frame_args_;
208 base::TimeTicks posted_begin_impl_frame_deadline_; 209 base::TimeTicks posted_begin_impl_frame_deadline_;
209 std::vector<const char*> actions_; 210 std::vector<const char*> actions_;
210 std::vector<scoped_ptr<base::trace_event::ConvertableToTraceFormat>> states_; 211 std::vector<std::unique_ptr<base::trace_event::ConvertableToTraceFormat>>
212 states_;
211 TestScheduler* scheduler_; 213 TestScheduler* scheduler_;
212 }; 214 };
213 215
214 class FakeExternalBeginFrameSource : public BeginFrameSourceBase { 216 class FakeExternalBeginFrameSource : public BeginFrameSourceBase {
215 public: 217 public:
216 explicit FakeExternalBeginFrameSource(FakeSchedulerClient* client) 218 explicit FakeExternalBeginFrameSource(FakeSchedulerClient* client)
217 : client_(client) {} 219 : client_(client) {}
218 ~FakeExternalBeginFrameSource() override {} 220 ~FakeExternalBeginFrameSource() override {}
219 221
220 void AddObserver(BeginFrameObserver* obs) override { 222 void AddObserver(BeginFrameObserver* obs) override {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 synthetic_frame_source_.reset(new TestSyntheticBeginFrameSource( 266 synthetic_frame_source_.reset(new TestSyntheticBeginFrameSource(
265 now_src_.get(), task_runner_.get(), BeginFrameArgs::DefaultInterval())); 267 now_src_.get(), task_runner_.get(), BeginFrameArgs::DefaultInterval()));
266 if (!scheduler_settings_.throttle_frame_production) { 268 if (!scheduler_settings_.throttle_frame_production) {
267 frame_source = unthrottled_frame_source_.get(); 269 frame_source = unthrottled_frame_source_.get();
268 } else if (scheduler_settings_.use_external_begin_frame_source) { 270 } else if (scheduler_settings_.use_external_begin_frame_source) {
269 frame_source = fake_external_begin_frame_source_.get(); 271 frame_source = fake_external_begin_frame_source_.get();
270 } else { 272 } else {
271 frame_source = synthetic_frame_source_.get(); 273 frame_source = synthetic_frame_source_.get();
272 } 274 }
273 275
274 scoped_ptr<FakeCompositorTimingHistory> fake_compositor_timing_history = 276 std::unique_ptr<FakeCompositorTimingHistory>
275 FakeCompositorTimingHistory::Create( 277 fake_compositor_timing_history = FakeCompositorTimingHistory::Create(
276 scheduler_settings_.using_synchronous_renderer_compositor); 278 scheduler_settings_.using_synchronous_renderer_compositor);
277 fake_compositor_timing_history_ = fake_compositor_timing_history.get(); 279 fake_compositor_timing_history_ = fake_compositor_timing_history.get();
278 280
279 scheduler_.reset( 281 scheduler_.reset(
280 new TestScheduler(now_src_.get(), client_.get(), scheduler_settings_, 0, 282 new TestScheduler(now_src_.get(), client_.get(), scheduler_settings_, 0,
281 task_runner_.get(), frame_source, 283 task_runner_.get(), frame_source,
282 std::move(fake_compositor_timing_history))); 284 std::move(fake_compositor_timing_history)));
283 DCHECK(scheduler_); 285 DCHECK(scheduler_);
284 client_->set_scheduler(scheduler_.get()); 286 client_->set_scheduler(scheduler_.get());
285 287
286 // Use large estimates by default to avoid latency recovery in most tests. 288 // Use large estimates by default to avoid latency recovery in most tests.
287 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration); 289 fake_compositor_timing_history_->SetAllEstimatesTo(kSlowDuration);
288 290
289 return scheduler_.get(); 291 return scheduler_.get();
290 } 292 }
291 293
292 void CreateSchedulerAndInitSurface() { 294 void CreateSchedulerAndInitSurface() {
293 CreateScheduler(); 295 CreateScheduler();
294 EXPECT_SCOPED(InitializeOutputSurfaceAndFirstCommit()); 296 EXPECT_SCOPED(InitializeOutputSurfaceAndFirstCommit());
295 } 297 }
296 298
297 void SetUpScheduler(bool initSurface) { 299 void SetUpScheduler(bool initSurface) {
298 SetUpScheduler(make_scoped_ptr(new FakeSchedulerClient), initSurface); 300 SetUpScheduler(base::WrapUnique(new FakeSchedulerClient), initSurface);
299 } 301 }
300 302
301 void SetUpScheduler(scoped_ptr<FakeSchedulerClient> client, 303 void SetUpScheduler(std::unique_ptr<FakeSchedulerClient> client,
302 bool initSurface) { 304 bool initSurface) {
303 client_ = std::move(client); 305 client_ = std::move(client);
304 if (initSurface) 306 if (initSurface)
305 CreateSchedulerAndInitSurface(); 307 CreateSchedulerAndInitSurface();
306 else 308 else
307 CreateScheduler(); 309 CreateScheduler();
308 } 310 }
309 311
310 OrderedSimpleTaskRunner& task_runner() { return *task_runner_; } 312 OrderedSimpleTaskRunner& task_runner() { return *task_runner_; }
311 base::SimpleTestTickClock* now_src() { return now_src_.get(); } 313 base::SimpleTestTickClock* now_src() { return now_src_.get(); }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 void ImplFrameNotSkippedAfterLateSwapAck(); 432 void ImplFrameNotSkippedAfterLateSwapAck();
431 void BeginFramesNotFromClient(bool use_external_begin_frame_source, 433 void BeginFramesNotFromClient(bool use_external_begin_frame_source,
432 bool throttle_frame_production); 434 bool throttle_frame_production);
433 void BeginFramesNotFromClient_SwapThrottled( 435 void BeginFramesNotFromClient_SwapThrottled(
434 bool use_external_begin_frame_source, 436 bool use_external_begin_frame_source,
435 bool throttle_frame_production); 437 bool throttle_frame_production);
436 bool BeginMainFrameOnCriticalPath(TreePriority tree_priority, 438 bool BeginMainFrameOnCriticalPath(TreePriority tree_priority,
437 ScrollHandlerState scroll_handler_state, 439 ScrollHandlerState scroll_handler_state,
438 base::TimeDelta durations); 440 base::TimeDelta durations);
439 441
440 scoped_ptr<base::SimpleTestTickClock> now_src_; 442 std::unique_ptr<base::SimpleTestTickClock> now_src_;
441 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 443 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
442 scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source_; 444 std::unique_ptr<FakeExternalBeginFrameSource>
443 scoped_ptr<TestSyntheticBeginFrameSource> synthetic_frame_source_; 445 fake_external_begin_frame_source_;
444 scoped_ptr<TestBackToBackBeginFrameSource> unthrottled_frame_source_; 446 std::unique_ptr<TestSyntheticBeginFrameSource> synthetic_frame_source_;
447 std::unique_ptr<TestBackToBackBeginFrameSource> unthrottled_frame_source_;
445 SchedulerSettings scheduler_settings_; 448 SchedulerSettings scheduler_settings_;
446 scoped_ptr<FakeSchedulerClient> client_; 449 std::unique_ptr<FakeSchedulerClient> client_;
447 scoped_ptr<TestScheduler> scheduler_; 450 std::unique_ptr<TestScheduler> scheduler_;
448 FakeCompositorTimingHistory* fake_compositor_timing_history_; 451 FakeCompositorTimingHistory* fake_compositor_timing_history_;
449 }; 452 };
450 453
451 TEST_F(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { 454 TEST_F(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
452 scheduler_settings_.use_external_begin_frame_source = true; 455 scheduler_settings_.use_external_begin_frame_source = true;
453 SetUpScheduler(false); 456 SetUpScheduler(false);
454 scheduler_->SetVisible(true); 457 scheduler_->SetVisible(true);
455 scheduler_->SetCanDraw(true); 458 scheduler_->SetCanDraw(true);
456 459
457 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_); 460 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 }; 780 };
778 781
779 // Tests for two different situations: 782 // Tests for two different situations:
780 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside 783 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside
781 // a ScheduledActionDrawAndSwap 784 // a ScheduledActionDrawAndSwap
782 // 2. the scheduler drawing twice inside a single tick 785 // 2. the scheduler drawing twice inside a single tick
783 TEST_F(SchedulerTest, RequestRedrawInsideDraw) { 786 TEST_F(SchedulerTest, RequestRedrawInsideDraw) {
784 SchedulerClientThatsetNeedsDrawInsideDraw* client = 787 SchedulerClientThatsetNeedsDrawInsideDraw* client =
785 new SchedulerClientThatsetNeedsDrawInsideDraw; 788 new SchedulerClientThatsetNeedsDrawInsideDraw;
786 scheduler_settings_.use_external_begin_frame_source = true; 789 scheduler_settings_.use_external_begin_frame_source = true;
787 SetUpScheduler(make_scoped_ptr(client), true); 790 SetUpScheduler(base::WrapUnique(client), true);
788 client->SetRequestRedrawsInsideDraw(true); 791 client->SetRequestRedrawsInsideDraw(true);
789 792
790 scheduler_->SetNeedsRedraw(); 793 scheduler_->SetNeedsRedraw();
791 EXPECT_TRUE(scheduler_->RedrawPending()); 794 EXPECT_TRUE(scheduler_->RedrawPending());
792 EXPECT_TRUE(client->needs_begin_frames()); 795 EXPECT_TRUE(client->needs_begin_frames());
793 EXPECT_EQ(0, client->num_draws()); 796 EXPECT_EQ(0, client->num_draws());
794 797
795 EXPECT_SCOPED(AdvanceFrame()); 798 EXPECT_SCOPED(AdvanceFrame());
796 task_runner().RunPendingTasks(); // Run posted deadline. 799 task_runner().RunPendingTasks(); // Run posted deadline.
797 EXPECT_EQ(1, client->num_draws()); 800 EXPECT_EQ(1, client->num_draws());
(...skipping 15 matching lines...) Expand all
813 EXPECT_EQ(2, client->num_draws()); 816 EXPECT_EQ(2, client->num_draws());
814 EXPECT_FALSE(scheduler_->RedrawPending()); 817 EXPECT_FALSE(scheduler_->RedrawPending());
815 EXPECT_FALSE(client->needs_begin_frames()); 818 EXPECT_FALSE(client->needs_begin_frames());
816 } 819 }
817 820
818 // Test that requesting redraw inside a failed draw doesn't lose the request. 821 // Test that requesting redraw inside a failed draw doesn't lose the request.
819 TEST_F(SchedulerTest, RequestRedrawInsideFailedDraw) { 822 TEST_F(SchedulerTest, RequestRedrawInsideFailedDraw) {
820 SchedulerClientThatsetNeedsDrawInsideDraw* client = 823 SchedulerClientThatsetNeedsDrawInsideDraw* client =
821 new SchedulerClientThatsetNeedsDrawInsideDraw; 824 new SchedulerClientThatsetNeedsDrawInsideDraw;
822 scheduler_settings_.use_external_begin_frame_source = true; 825 scheduler_settings_.use_external_begin_frame_source = true;
823 SetUpScheduler(make_scoped_ptr(client), true); 826 SetUpScheduler(base::WrapUnique(client), true);
824 827
825 client->SetRequestRedrawsInsideDraw(true); 828 client->SetRequestRedrawsInsideDraw(true);
826 client->SetDrawWillHappen(false); 829 client->SetDrawWillHappen(false);
827 830
828 scheduler_->SetNeedsRedraw(); 831 scheduler_->SetNeedsRedraw();
829 EXPECT_TRUE(scheduler_->RedrawPending()); 832 EXPECT_TRUE(scheduler_->RedrawPending());
830 EXPECT_TRUE(client->needs_begin_frames()); 833 EXPECT_TRUE(client->needs_begin_frames());
831 EXPECT_EQ(0, client->num_draws()); 834 EXPECT_EQ(0, client->num_draws());
832 835
833 // Fail the draw. 836 // Fail the draw.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 bool set_needs_commit_on_next_draw_; 892 bool set_needs_commit_on_next_draw_;
890 }; 893 };
891 894
892 // Tests for the scheduler infinite-looping on SetNeedsBeginMainFrame requests 895 // Tests for the scheduler infinite-looping on SetNeedsBeginMainFrame requests
893 // that happen inside a ScheduledActionDrawAndSwap 896 // that happen inside a ScheduledActionDrawAndSwap
894 TEST_F(SchedulerTest, RequestCommitInsideDraw) { 897 TEST_F(SchedulerTest, RequestCommitInsideDraw) {
895 SchedulerClientThatSetNeedsBeginMainFrameInsideDraw* client = 898 SchedulerClientThatSetNeedsBeginMainFrameInsideDraw* client =
896 new SchedulerClientThatSetNeedsBeginMainFrameInsideDraw; 899 new SchedulerClientThatSetNeedsBeginMainFrameInsideDraw;
897 900
898 scheduler_settings_.use_external_begin_frame_source = true; 901 scheduler_settings_.use_external_begin_frame_source = true;
899 SetUpScheduler(make_scoped_ptr(client), true); 902 SetUpScheduler(base::WrapUnique(client), true);
900 903
901 EXPECT_FALSE(client->needs_begin_frames()); 904 EXPECT_FALSE(client->needs_begin_frames());
902 scheduler_->SetNeedsRedraw(); 905 scheduler_->SetNeedsRedraw();
903 EXPECT_TRUE(scheduler_->RedrawPending()); 906 EXPECT_TRUE(scheduler_->RedrawPending());
904 EXPECT_EQ(0, client->num_draws()); 907 EXPECT_EQ(0, client->num_draws());
905 EXPECT_TRUE(client->needs_begin_frames()); 908 EXPECT_TRUE(client->needs_begin_frames());
906 909
907 client->SetNeedsBeginMainFrameOnNextDraw(); 910 client->SetNeedsBeginMainFrameOnNextDraw();
908 EXPECT_SCOPED(AdvanceFrame()); 911 EXPECT_SCOPED(AdvanceFrame());
909 client->SetNeedsBeginMainFrameOnNextDraw(); 912 client->SetNeedsBeginMainFrameOnNextDraw();
(...skipping 21 matching lines...) Expand all
931 EXPECT_FALSE(scheduler_->RedrawPending()); 934 EXPECT_FALSE(scheduler_->RedrawPending());
932 EXPECT_FALSE(scheduler_->CommitPending()); 935 EXPECT_FALSE(scheduler_->CommitPending());
933 EXPECT_FALSE(client->needs_begin_frames()); 936 EXPECT_FALSE(client->needs_begin_frames());
934 } 937 }
935 938
936 // Tests that when a draw fails then the pending commit should not be dropped. 939 // Tests that when a draw fails then the pending commit should not be dropped.
937 TEST_F(SchedulerTest, RequestCommitInsideFailedDraw) { 940 TEST_F(SchedulerTest, RequestCommitInsideFailedDraw) {
938 SchedulerClientThatsetNeedsDrawInsideDraw* client = 941 SchedulerClientThatsetNeedsDrawInsideDraw* client =
939 new SchedulerClientThatsetNeedsDrawInsideDraw; 942 new SchedulerClientThatsetNeedsDrawInsideDraw;
940 scheduler_settings_.use_external_begin_frame_source = true; 943 scheduler_settings_.use_external_begin_frame_source = true;
941 SetUpScheduler(make_scoped_ptr(client), true); 944 SetUpScheduler(base::WrapUnique(client), true);
942 945
943 client->SetDrawWillHappen(false); 946 client->SetDrawWillHappen(false);
944 947
945 scheduler_->SetNeedsRedraw(); 948 scheduler_->SetNeedsRedraw();
946 EXPECT_TRUE(scheduler_->RedrawPending()); 949 EXPECT_TRUE(scheduler_->RedrawPending());
947 EXPECT_TRUE(client->needs_begin_frames()); 950 EXPECT_TRUE(client->needs_begin_frames());
948 EXPECT_EQ(0, client->num_draws()); 951 EXPECT_EQ(0, client->num_draws());
949 952
950 // Fail the draw. 953 // Fail the draw.
951 EXPECT_SCOPED(AdvanceFrame()); 954 EXPECT_SCOPED(AdvanceFrame());
(...skipping 22 matching lines...) Expand all
974 EXPECT_EQ(3, client->num_draws()); 977 EXPECT_EQ(3, client->num_draws());
975 EXPECT_TRUE(scheduler_->CommitPending()); 978 EXPECT_TRUE(scheduler_->CommitPending());
976 EXPECT_FALSE(scheduler_->RedrawPending()); 979 EXPECT_FALSE(scheduler_->RedrawPending());
977 EXPECT_TRUE(client->needs_begin_frames()); 980 EXPECT_TRUE(client->needs_begin_frames());
978 } 981 }
979 982
980 TEST_F(SchedulerTest, NoSwapWhenDrawFails) { 983 TEST_F(SchedulerTest, NoSwapWhenDrawFails) {
981 SchedulerClientThatSetNeedsBeginMainFrameInsideDraw* client = 984 SchedulerClientThatSetNeedsBeginMainFrameInsideDraw* client =
982 new SchedulerClientThatSetNeedsBeginMainFrameInsideDraw; 985 new SchedulerClientThatSetNeedsBeginMainFrameInsideDraw;
983 scheduler_settings_.use_external_begin_frame_source = true; 986 scheduler_settings_.use_external_begin_frame_source = true;
984 SetUpScheduler(make_scoped_ptr(client), true); 987 SetUpScheduler(base::WrapUnique(client), true);
985 988
986 scheduler_->SetNeedsRedraw(); 989 scheduler_->SetNeedsRedraw();
987 EXPECT_TRUE(scheduler_->RedrawPending()); 990 EXPECT_TRUE(scheduler_->RedrawPending());
988 EXPECT_TRUE(client->needs_begin_frames()); 991 EXPECT_TRUE(client->needs_begin_frames());
989 EXPECT_EQ(0, client->num_draws()); 992 EXPECT_EQ(0, client->num_draws());
990 993
991 // Draw successfully, this starts a new frame. 994 // Draw successfully, this starts a new frame.
992 client->SetNeedsBeginMainFrameOnNextDraw(); 995 client->SetNeedsBeginMainFrameOnNextDraw();
993 EXPECT_SCOPED(AdvanceFrame()); 996 EXPECT_SCOPED(AdvanceFrame());
994 task_runner().RunPendingTasks(); // Run posted deadline. 997 task_runner().RunPendingTasks(); // Run posted deadline.
(...skipping 17 matching lines...) Expand all
1012 scheduler_->SetNeedsPrepareTiles(); 1015 scheduler_->SetNeedsPrepareTiles();
1013 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); 1016 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
1014 } 1017 }
1015 }; 1018 };
1016 1019
1017 // Test prepare tiles is independant of draws. 1020 // Test prepare tiles is independant of draws.
1018 TEST_F(SchedulerTest, PrepareTiles) { 1021 TEST_F(SchedulerTest, PrepareTiles) {
1019 SchedulerClientNeedsPrepareTilesInDraw* client = 1022 SchedulerClientNeedsPrepareTilesInDraw* client =
1020 new SchedulerClientNeedsPrepareTilesInDraw; 1023 new SchedulerClientNeedsPrepareTilesInDraw;
1021 scheduler_settings_.use_external_begin_frame_source = true; 1024 scheduler_settings_.use_external_begin_frame_source = true;
1022 SetUpScheduler(make_scoped_ptr(client), true); 1025 SetUpScheduler(base::WrapUnique(client), true);
1023 1026
1024 // Request both draw and prepare tiles. PrepareTiles shouldn't 1027 // Request both draw and prepare tiles. PrepareTiles shouldn't
1025 // be trigged until BeginImplFrame. 1028 // be trigged until BeginImplFrame.
1026 client->Reset(); 1029 client->Reset();
1027 scheduler_->SetNeedsPrepareTiles(); 1030 scheduler_->SetNeedsPrepareTiles();
1028 scheduler_->SetNeedsRedraw(); 1031 scheduler_->SetNeedsRedraw();
1029 EXPECT_TRUE(scheduler_->RedrawPending()); 1032 EXPECT_TRUE(scheduler_->RedrawPending());
1030 EXPECT_TRUE(scheduler_->PrepareTilesPending()); 1033 EXPECT_TRUE(scheduler_->PrepareTilesPending());
1031 EXPECT_TRUE(client->needs_begin_frames()); 1034 EXPECT_TRUE(client->needs_begin_frames());
1032 EXPECT_EQ(0, client->num_draws()); 1035 EXPECT_EQ(0, client->num_draws());
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1222 EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible")); 1225 EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
1223 EXPECT_TRUE(client_->HasAction("ScheduledActionPrepareTiles")); 1226 EXPECT_TRUE(client_->HasAction("ScheduledActionPrepareTiles"));
1224 EXPECT_LT(client_->ActionIndex("ScheduledActionDrawAndSwapIfPossible"), 1227 EXPECT_LT(client_->ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
1225 client_->ActionIndex("ScheduledActionPrepareTiles")); 1228 client_->ActionIndex("ScheduledActionPrepareTiles"));
1226 EXPECT_FALSE(scheduler_->RedrawPending()); 1229 EXPECT_FALSE(scheduler_->RedrawPending());
1227 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 1230 EXPECT_FALSE(scheduler_->PrepareTilesPending());
1228 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 1231 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
1229 } 1232 }
1230 1233
1231 TEST_F(SchedulerTest, PrepareTilesFunnelResetOnVisibilityChange) { 1234 TEST_F(SchedulerTest, PrepareTilesFunnelResetOnVisibilityChange) {
1232 scoped_ptr<SchedulerClientNeedsPrepareTilesInDraw> client = 1235 std::unique_ptr<SchedulerClientNeedsPrepareTilesInDraw> client =
1233 make_scoped_ptr(new SchedulerClientNeedsPrepareTilesInDraw); 1236 base::WrapUnique(new SchedulerClientNeedsPrepareTilesInDraw);
1234 scheduler_settings_.use_external_begin_frame_source = true; 1237 scheduler_settings_.use_external_begin_frame_source = true;
1235 SetUpScheduler(std::move(client), true); 1238 SetUpScheduler(std::move(client), true);
1236 1239
1237 // Simulate a few visibility changes and associated PrepareTiles. 1240 // Simulate a few visibility changes and associated PrepareTiles.
1238 for (int i = 0; i < 10; i++) { 1241 for (int i = 0; i < 10; i++) {
1239 scheduler_->SetVisible(false); 1242 scheduler_->SetVisible(false);
1240 scheduler_->WillPrepareTiles(); 1243 scheduler_->WillPrepareTiles();
1241 scheduler_->DidPrepareTiles(); 1244 scheduler_->DidPrepareTiles();
1242 1245
1243 scheduler_->SetVisible(true); 1246 scheduler_->SetVisible(true);
(...skipping 14 matching lines...) Expand all
1258 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)); 1261 task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
1259 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 1262 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
1260 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2); 1263 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2);
1261 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2); 1264 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2);
1262 } 1265 }
1263 1266
1264 TEST_F(SchedulerTest, TriggerBeginFrameDeadlineEarly) { 1267 TEST_F(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
1265 SchedulerClientNeedsPrepareTilesInDraw* client = 1268 SchedulerClientNeedsPrepareTilesInDraw* client =
1266 new SchedulerClientNeedsPrepareTilesInDraw; 1269 new SchedulerClientNeedsPrepareTilesInDraw;
1267 scheduler_settings_.use_external_begin_frame_source = true; 1270 scheduler_settings_.use_external_begin_frame_source = true;
1268 SetUpScheduler(make_scoped_ptr(client), true); 1271 SetUpScheduler(base::WrapUnique(client), true);
1269 1272
1270 scheduler_->SetNeedsRedraw(); 1273 scheduler_->SetNeedsRedraw();
1271 EXPECT_SCOPED(AdvanceFrame()); 1274 EXPECT_SCOPED(AdvanceFrame());
1272 1275
1273 // The deadline should be zero since there is no work other than drawing 1276 // The deadline should be zero since there is no work other than drawing
1274 // pending. 1277 // pending.
1275 EXPECT_EQ(base::TimeTicks(), client->posted_begin_impl_frame_deadline()); 1278 EXPECT_EQ(base::TimeTicks(), client->posted_begin_impl_frame_deadline());
1276 } 1279 }
1277 1280
1278 TEST_F(SchedulerTest, WaitForReadyToDrawDoNotPostDeadline) { 1281 TEST_F(SchedulerTest, WaitForReadyToDrawDoNotPostDeadline) {
1279 SchedulerClientNeedsPrepareTilesInDraw* client = 1282 SchedulerClientNeedsPrepareTilesInDraw* client =
1280 new SchedulerClientNeedsPrepareTilesInDraw; 1283 new SchedulerClientNeedsPrepareTilesInDraw;
1281 scheduler_settings_.use_external_begin_frame_source = true; 1284 scheduler_settings_.use_external_begin_frame_source = true;
1282 scheduler_settings_.commit_to_active_tree = true; 1285 scheduler_settings_.commit_to_active_tree = true;
1283 SetUpScheduler(make_scoped_ptr(client), true); 1286 SetUpScheduler(base::WrapUnique(client), true);
1284 1287
1285 // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame. 1288 // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame.
1286 scheduler_->SetNeedsBeginMainFrame(); 1289 scheduler_->SetNeedsBeginMainFrame();
1287 EXPECT_SINGLE_ACTION("AddObserver(this)", client_); 1290 EXPECT_SINGLE_ACTION("AddObserver(this)", client_);
1288 client_->Reset(); 1291 client_->Reset();
1289 1292
1290 // Begin new frame. 1293 // Begin new frame.
1291 EXPECT_SCOPED(AdvanceFrame()); 1294 EXPECT_SCOPED(AdvanceFrame());
1292 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks()); 1295 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks());
1293 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 1296 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
(...skipping 19 matching lines...) Expand all
1313 task_runner().RunPendingTasks(); // Run posted deadline. 1316 task_runner().RunPendingTasks(); // Run posted deadline.
1314 EXPECT_EQ(1, client_->num_draws()); 1317 EXPECT_EQ(1, client_->num_draws());
1315 EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible")); 1318 EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
1316 } 1319 }
1317 1320
1318 TEST_F(SchedulerTest, WaitForReadyToDrawCancelledWhenLostOutputSurface) { 1321 TEST_F(SchedulerTest, WaitForReadyToDrawCancelledWhenLostOutputSurface) {
1319 SchedulerClientNeedsPrepareTilesInDraw* client = 1322 SchedulerClientNeedsPrepareTilesInDraw* client =
1320 new SchedulerClientNeedsPrepareTilesInDraw; 1323 new SchedulerClientNeedsPrepareTilesInDraw;
1321 scheduler_settings_.use_external_begin_frame_source = true; 1324 scheduler_settings_.use_external_begin_frame_source = true;
1322 scheduler_settings_.commit_to_active_tree = true; 1325 scheduler_settings_.commit_to_active_tree = true;
1323 SetUpScheduler(make_scoped_ptr(client), true); 1326 SetUpScheduler(base::WrapUnique(client), true);
1324 1327
1325 // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame. 1328 // SetNeedsBeginMainFrame should begin the frame on the next BeginImplFrame.
1326 scheduler_->SetNeedsBeginMainFrame(); 1329 scheduler_->SetNeedsBeginMainFrame();
1327 EXPECT_SINGLE_ACTION("AddObserver(this)", client_); 1330 EXPECT_SINGLE_ACTION("AddObserver(this)", client_);
1328 client_->Reset(); 1331 client_->Reset();
1329 1332
1330 // Begin new frame. 1333 // Begin new frame.
1331 EXPECT_SCOPED(AdvanceFrame()); 1334 EXPECT_SCOPED(AdvanceFrame());
1332 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks()); 1335 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks());
1333 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 1336 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
(...skipping 2203 matching lines...) Expand 10 before | Expand all | Expand 10 after
3537 DrawResult ScheduledActionDrawAndSwapIfPossible() override { 3540 DrawResult ScheduledActionDrawAndSwapIfPossible() override {
3538 scheduler_->SetNeedsPrepareTiles(); 3541 scheduler_->SetNeedsPrepareTiles();
3539 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); 3542 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
3540 } 3543 }
3541 }; 3544 };
3542 3545
3543 TEST_F(SchedulerTest, SynchronousCompositorPrepareTilesOnDraw) { 3546 TEST_F(SchedulerTest, SynchronousCompositorPrepareTilesOnDraw) {
3544 scheduler_settings_.using_synchronous_renderer_compositor = true; 3547 scheduler_settings_.using_synchronous_renderer_compositor = true;
3545 scheduler_settings_.use_external_begin_frame_source = true; 3548 scheduler_settings_.use_external_begin_frame_source = true;
3546 3549
3547 scoped_ptr<FakeSchedulerClient> client = 3550 std::unique_ptr<FakeSchedulerClient> client =
3548 make_scoped_ptr(new SchedulerClientSetNeedsPrepareTilesOnDraw); 3551 base::WrapUnique(new SchedulerClientSetNeedsPrepareTilesOnDraw);
3549 SetUpScheduler(std::move(client), true); 3552 SetUpScheduler(std::move(client), true);
3550 3553
3551 scheduler_->SetNeedsRedraw(); 3554 scheduler_->SetNeedsRedraw();
3552 EXPECT_SINGLE_ACTION("AddObserver(this)", client_); 3555 EXPECT_SINGLE_ACTION("AddObserver(this)", client_);
3553 client_->Reset(); 3556 client_->Reset();
3554 3557
3555 // Next vsync. 3558 // Next vsync.
3556 EXPECT_SCOPED(AdvanceFrame()); 3559 EXPECT_SCOPED(AdvanceFrame());
3557 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3560 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3558 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3561 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
3850 } 3853 }
3851 3854
3852 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHS) { 3855 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHS) {
3853 EXPECT_FALSE(BeginMainFrameOnCriticalPath( 3856 EXPECT_FALSE(BeginMainFrameOnCriticalPath(
3854 SMOOTHNESS_TAKES_PRIORITY, 3857 SMOOTHNESS_TAKES_PRIORITY,
3855 ScrollHandlerState::SCROLL_AFFECTS_SCROLL_HANDLER, kSlowDuration)); 3858 ScrollHandlerState::SCROLL_AFFECTS_SCROLL_HANDLER, kSlowDuration));
3856 } 3859 }
3857 3860
3858 } // namespace 3861 } // namespace
3859 } // namespace cc 3862 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/surfaces/display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698