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

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

Issue 2880023002: cc::SurfaceDependencyTracker should not crash when a Display goes away (Closed)
Patch Set: Fix LayerTreeHostImpl unit tests Created 3 years, 6 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/layers/surface_layer_impl_unittest.cc ('k') | cc/surfaces/BUILD.gn » ('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/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "cc/test/begin_frame_args_test.h" 11 #include "cc/test/begin_frame_args_test.h"
12 #include "cc/test/begin_frame_source_test.h" 12 #include "cc/test/begin_frame_source_test.h"
13 #include "cc/test/scheduler_test_common.h" 13 #include "cc/test/scheduler_test_common.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using testing::StrictMock; 17 using testing::NiceMock;
18 18
19 namespace cc { 19 namespace cc {
20 namespace { 20 namespace {
21 21
22 // BeginFrameSource testing ---------------------------------------------------- 22 // BeginFrameSource testing ----------------------------------------------------
23 TEST(BeginFrameSourceTest, SourceIdsAreUnique) { 23 TEST(BeginFrameSourceTest, SourceIdsAreUnique) {
24 StubBeginFrameSource source1; 24 StubBeginFrameSource source1;
25 StubBeginFrameSource source2; 25 StubBeginFrameSource source2;
26 StubBeginFrameSource source3; 26 StubBeginFrameSource source3;
27 EXPECT_NE(source1.source_id(), source2.source_id()); 27 EXPECT_NE(source1.source_id(), source2.source_id());
28 EXPECT_NE(source1.source_id(), source3.source_id()); 28 EXPECT_NE(source1.source_id(), source3.source_id());
29 EXPECT_NE(source2.source_id(), source3.source_id()); 29 EXPECT_NE(source2.source_id(), source3.source_id());
30 } 30 }
31 31
32 // BackToBackBeginFrameSource testing ------------------------------------------ 32 // BackToBackBeginFrameSource testing ------------------------------------------
33 class BackToBackBeginFrameSourceTest : public ::testing::Test { 33 class BackToBackBeginFrameSourceTest : public ::testing::Test {
34 protected: 34 protected:
35 static const int64_t kDeadline; 35 static const int64_t kDeadline;
36 static const int64_t kInterval; 36 static const int64_t kInterval;
37 37
38 void SetUp() override { 38 void SetUp() override {
39 now_src_.reset(new base::SimpleTestTickClock()); 39 now_src_.reset(new base::SimpleTestTickClock());
40 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); 40 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
41 task_runner_ = 41 task_runner_ =
42 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); 42 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false));
43 std::unique_ptr<TestDelayBasedTimeSource> time_source( 43 std::unique_ptr<TestDelayBasedTimeSource> time_source(
44 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get())); 44 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get()));
45 delay_based_time_source_ = time_source.get(); 45 delay_based_time_source_ = time_source.get();
46 source_.reset(new BackToBackBeginFrameSource(std::move(time_source))); 46 source_.reset(new BackToBackBeginFrameSource(std::move(time_source)));
47 obs_ = base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>); 47 obs_ = base::WrapUnique(new ::testing::NiceMock<MockBeginFrameObserver>);
48 } 48 }
49 49
50 void TearDown() override { obs_.reset(); } 50 void TearDown() override { obs_.reset(); }
51 51
52 std::unique_ptr<base::SimpleTestTickClock> now_src_; 52 std::unique_ptr<base::SimpleTestTickClock> now_src_;
53 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 53 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
54 std::unique_ptr<BackToBackBeginFrameSource> source_; 54 std::unique_ptr<BackToBackBeginFrameSource> source_;
55 std::unique_ptr<MockBeginFrameObserver> obs_; 55 std::unique_ptr<MockBeginFrameObserver> obs_;
56 TestDelayBasedTimeSource* delay_based_time_source_; // Owned by |now_src_|. 56 TestDelayBasedTimeSource* delay_based_time_source_; // Owned by |now_src_|.
57 }; 57 };
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 // Ticks at the time the last frame finished, so ignores the last change to 223 // Ticks at the time the last frame finished, so ignores the last change to
224 // "now". 224 // "now".
225 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100, 225 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
226 1100 + kDeadline, kInterval); 226 1100 + kDeadline, kInterval);
227 227
228 EXPECT_TRUE(task_runner_->HasPendingTasks()); 228 EXPECT_TRUE(task_runner_->HasPendingTasks());
229 task_runner_->RunPendingTasks(); 229 task_runner_->RunPendingTasks();
230 } 230 }
231 231
232 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { 232 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) {
233 StrictMock<MockBeginFrameObserver> obs1, obs2; 233 NiceMock<MockBeginFrameObserver> obs1, obs2;
234 234
235 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 235 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
236 source_->AddObserver(&obs1); 236 source_->AddObserver(&obs1);
237 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 237 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
238 source_->AddObserver(&obs2); 238 source_->AddObserver(&obs2);
239 239
240 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 240 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
241 kInterval); 241 kInterval);
242 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline, 242 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
243 kInterval); 243 kInterval);
(...skipping 15 matching lines...) Expand all
259 BeginFrameAck(source_->source_id(), 2, 2, true)); 259 BeginFrameAck(source_->source_id(), 2, 2, true));
260 source_->DidFinishFrame(&obs2, 260 source_->DidFinishFrame(&obs2,
261 BeginFrameAck(source_->source_id(), 2, 2, true)); 261 BeginFrameAck(source_->source_id(), 2, 2, true));
262 EXPECT_TRUE(task_runner_->HasPendingTasks()); 262 EXPECT_TRUE(task_runner_->HasPendingTasks());
263 source_->RemoveObserver(&obs1); 263 source_->RemoveObserver(&obs1);
264 source_->RemoveObserver(&obs2); 264 source_->RemoveObserver(&obs2);
265 task_runner_->RunPendingTasks(); 265 task_runner_->RunPendingTasks();
266 } 266 }
267 267
268 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) { 268 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) {
269 StrictMock<MockBeginFrameObserver> obs1, obs2; 269 NiceMock<MockBeginFrameObserver> obs1, obs2;
270 270
271 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 271 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
272 source_->AddObserver(&obs1); 272 source_->AddObserver(&obs1);
273 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 273 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
274 kInterval); 274 kInterval);
275 task_runner_->RunPendingTasks(); 275 task_runner_->RunPendingTasks();
276 276
277 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 277 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
278 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 278 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
279 source_->AddObserver(&obs2); 279 source_->AddObserver(&obs2);
(...skipping 23 matching lines...) Expand all
303 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline, 303 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline,
304 kInterval); 304 kInterval);
305 task_runner_->RunPendingTasks(); 305 task_runner_->RunPendingTasks();
306 306
307 source_->DidFinishFrame(&obs2, 307 source_->DidFinishFrame(&obs2,
308 BeginFrameAck(source_->source_id(), 4, 4, true)); 308 BeginFrameAck(source_->source_id(), 4, 4, true));
309 source_->RemoveObserver(&obs2); 309 source_->RemoveObserver(&obs2);
310 } 310 }
311 311
312 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) { 312 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) {
313 StrictMock<MockBeginFrameObserver> obs1, obs2; 313 NiceMock<MockBeginFrameObserver> obs1, obs2;
314 314
315 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 315 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
316 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 316 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
317 source_->AddObserver(&obs1); 317 source_->AddObserver(&obs1);
318 source_->AddObserver(&obs2); 318 source_->AddObserver(&obs2);
319 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 319 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
320 kInterval); 320 kInterval);
321 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline, 321 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
322 kInterval); 322 kInterval);
323 task_runner_->RunPendingTasks(); 323 task_runner_->RunPendingTasks();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 455
456 // Change the vsync params, but the new interval will be ignored. 456 // Change the vsync params, but the new interval will be ignored.
457 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400), 457 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400),
458 base::TimeDelta::FromMicroseconds(1)); 458 base::TimeDelta::FromMicroseconds(1));
459 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 50495, 60394, 9999); 459 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 50495, 60394, 9999);
460 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 60394, 70393, 9999); 460 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 60394, 70393, 9999);
461 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395)); 461 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395));
462 } 462 }
463 463
464 TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) { 464 TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) {
465 StrictMock<MockBeginFrameObserver> obs1, obs2; 465 NiceMock<MockBeginFrameObserver> obs1, obs2;
466 466
467 // now_src_ starts off at 1000. 467 // now_src_ starts off at 1000.
468 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010)); 468 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010));
469 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 469 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
470 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, source_->source_id(), 1, 10000, 20000, 470 EXPECT_BEGIN_FRAME_USED_MISSED(obs1, source_->source_id(), 1, 10000, 20000,
471 10000); 471 10000);
472 source_->AddObserver(&obs1); // Should cause the last tick to be sent 472 source_->AddObserver(&obs1); // Should cause the last tick to be sent
473 // No tasks should need to be run for this to occur. 473 // No tasks should need to be run for this to occur.
474 474
475 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 20000, 30000, 10000); 475 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 20000, 30000, 10000);
(...skipping 14 matching lines...) Expand all
490 490
491 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 40000, 50000, 10000); 491 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 40000, 50000, 10000);
492 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000)); 492 task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
493 493
494 source_->RemoveObserver(&obs2); 494 source_->RemoveObserver(&obs2);
495 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000)); 495 task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(50000));
496 EXPECT_FALSE(task_runner_->HasPendingTasks()); 496 EXPECT_FALSE(task_runner_->HasPendingTasks());
497 } 497 }
498 498
499 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) { 499 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) {
500 StrictMock<MockBeginFrameObserver> obs; 500 NiceMock<MockBeginFrameObserver> obs;
501 501
502 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 502 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
503 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000); 503 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
504 source_->AddObserver(&obs); 504 source_->AddObserver(&obs);
505 505
506 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 506 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
507 base::TimeDelta::FromInternalValue(10000)); 507 base::TimeDelta::FromInternalValue(10000));
508 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 508 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
509 509
510 // No begin frame received. 510 // No begin frame received.
511 task_runner_->RunPendingTasks(); 511 task_runner_->RunPendingTasks();
512 512
513 // Begin frame received. 513 // Begin frame received.
514 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000), 514 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
515 base::TimeDelta::FromInternalValue(10000)); 515 base::TimeDelta::FromInternalValue(10000));
516 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 516 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
517 EXPECT_BEGIN_FRAME_USED(obs, source_->source_id(), 2, 10000, 20000, 10000); 517 EXPECT_BEGIN_FRAME_USED(obs, source_->source_id(), 2, 10000, 20000, 10000);
518 task_runner_->RunPendingTasks(); 518 task_runner_->RunPendingTasks();
519 } 519 }
520 520
521 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) { 521 TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) {
522 StrictMock<MockBeginFrameObserver> obs; 522 NiceMock<MockBeginFrameObserver> obs;
523 523
524 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 524 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
525 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000); 525 EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
526 source_->AddObserver(&obs); 526 source_->AddObserver(&obs);
527 source_->RemoveObserver(&obs); 527 source_->RemoveObserver(&obs);
528 528
529 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000), 529 source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
530 base::TimeDelta::FromInternalValue(10000)); 530 base::TimeDelta::FromInternalValue(10000));
531 now_src_->Advance(base::TimeDelta::FromInternalValue(4000)); 531 now_src_->Advance(base::TimeDelta::FromInternalValue(4000));
532 532
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 // not notify observer. 593 // not notify observer.
594 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 594 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
595 EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1); 595 EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
596 ExternalBeginFrameSource source2(client_.get()); 596 ExternalBeginFrameSource source2(client_.get());
597 source2.AddObserver(obs_.get()); 597 source2.AddObserver(obs_.get());
598 source2.OnBeginFrame(args); 598 source2.OnBeginFrame(args);
599 } 599 }
600 600
601 } // namespace 601 } // namespace
602 } // namespace cc 602 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/surface_layer_impl_unittest.cc ('k') | cc/surfaces/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698