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

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

Issue 2591773002: [cc] BackToBackBFS: Disable time source if all pending observers removed (Closed)
Patch Set: add DCHECK Created 4 years 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/begin_frame_source.cc ('k') | no next file » | 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"
(...skipping 13 matching lines...) Expand all
24 static const int64_t kDeadline; 24 static const int64_t kDeadline;
25 static const int64_t kInterval; 25 static const int64_t kInterval;
26 26
27 void SetUp() override { 27 void SetUp() override {
28 now_src_.reset(new base::SimpleTestTickClock()); 28 now_src_.reset(new base::SimpleTestTickClock());
29 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); 29 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
30 task_runner_ = 30 task_runner_ =
31 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); 31 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false));
32 std::unique_ptr<TestDelayBasedTimeSource> time_source( 32 std::unique_ptr<TestDelayBasedTimeSource> time_source(
33 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get())); 33 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get()));
34 delay_based_time_source_ = time_source.get();
34 source_.reset(new BackToBackBeginFrameSource(std::move(time_source))); 35 source_.reset(new BackToBackBeginFrameSource(std::move(time_source)));
35 obs_ = base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>); 36 obs_ = base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>);
36 } 37 }
37 38
38 void TearDown() override { obs_.reset(); } 39 void TearDown() override { obs_.reset(); }
39 40
40 std::unique_ptr<base::SimpleTestTickClock> now_src_; 41 std::unique_ptr<base::SimpleTestTickClock> now_src_;
41 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 42 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
42 std::unique_ptr<BackToBackBeginFrameSource> source_; 43 std::unique_ptr<BackToBackBeginFrameSource> source_;
43 std::unique_ptr<MockBeginFrameObserver> obs_; 44 std::unique_ptr<MockBeginFrameObserver> obs_;
45 TestDelayBasedTimeSource* delay_based_time_source_; // Owned by |now_src_|.
44 }; 46 };
45 47
46 const int64_t BackToBackBeginFrameSourceTest::kDeadline = 48 const int64_t BackToBackBeginFrameSourceTest::kDeadline =
47 BeginFrameArgs::DefaultInterval().ToInternalValue(); 49 BeginFrameArgs::DefaultInterval().ToInternalValue();
48 50
49 const int64_t BackToBackBeginFrameSourceTest::kInterval = 51 const int64_t BackToBackBeginFrameSourceTest::kInterval =
50 BeginFrameArgs::DefaultInterval().ToInternalValue(); 52 BeginFrameArgs::DefaultInterval().ToInternalValue();
51 53
52 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { 54 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) {
53 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 55 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); 260 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
259 task_runner_->RunPendingTasks(); 261 task_runner_->RunPendingTasks();
260 262
261 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 263 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
262 source_->DidFinishFrame(&obs1, 0); 264 source_->DidFinishFrame(&obs1, 0);
263 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval); 265 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval);
264 task_runner_->RunPendingTasks(); 266 task_runner_->RunPendingTasks();
265 267
266 source_->DidFinishFrame(&obs1, 0); 268 source_->DidFinishFrame(&obs1, 0);
267 source_->RemoveObserver(&obs1); 269 source_->RemoveObserver(&obs1);
270 // Removing all finished observers should disable the time source.
271 EXPECT_FALSE(delay_based_time_source_->Active());
268 // Finishing the frame for |obs1| posts a begin frame task, which will be 272 // Finishing the frame for |obs1| posts a begin frame task, which will be
269 // aborted since |obs1| is removed. Clear that from the task runner. 273 // aborted since |obs1| is removed. Clear that from the task runner.
270 task_runner_->RunPendingTasks(); 274 task_runner_->RunPendingTasks();
271 275
272 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 276 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
273 source_->DidFinishFrame(&obs2, 0); 277 source_->DidFinishFrame(&obs2, 0);
274 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval); 278 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval);
275 task_runner_->RunPendingTasks(); 279 task_runner_->RunPendingTasks();
276 280
277 source_->DidFinishFrame(&obs2, 0); 281 source_->DidFinishFrame(&obs2, 0);
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 base::TimeDelta::FromInternalValue(10000)); 497 base::TimeDelta::FromInternalValue(10000));
494 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); 498 now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
495 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); 499 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
496 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); 500 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000);
497 source_->AddObserver(&obs); 501 source_->AddObserver(&obs);
498 source_->RemoveObserver(&obs); 502 source_->RemoveObserver(&obs);
499 } 503 }
500 504
501 } // namespace 505 } // namespace
502 } // namespace cc 506 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698