| 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/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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 | 166 |
| 167 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); | 167 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); |
| 168 source.SetBeginFrameSourcePaused(false); | 168 source.SetBeginFrameSourcePaused(false); |
| 169 | 169 |
| 170 EXPECT_BEGIN_FRAME_USED(obs2, 300, 400, 100); | 170 EXPECT_BEGIN_FRAME_USED(obs2, 300, 400, 100); |
| 171 SEND_BEGIN_FRAME_USED(source, 300, 400, 100); | 171 SEND_BEGIN_FRAME_USED(source, 300, 400, 100); |
| 172 | 172 |
| 173 source.RemoveObserver(&obs2); | 173 source.RemoveObserver(&obs2); |
| 174 } | 174 } |
| 175 | 175 |
| 176 // BackToBackBeginFrameSource testing ----------------------------------------- | 176 class BackToBackBeginFrameSourceTest : public ::testing::Test { |
| 177 class TestBackToBackBeginFrameSource : public BackToBackBeginFrameSource { | |
| 178 public: | |
| 179 TestBackToBackBeginFrameSource(base::SimpleTestTickClock* now_src, | |
| 180 base::SingleThreadTaskRunner* task_runner) | |
| 181 : BackToBackBeginFrameSource(task_runner), now_src_(now_src) {} | |
| 182 | |
| 183 protected: | 177 protected: |
| 184 base::TimeTicks Now() override { return now_src_->NowTicks(); } | |
| 185 | |
| 186 // Not owned. | |
| 187 base::SimpleTestTickClock* now_src_; | |
| 188 }; | |
| 189 | |
| 190 class BackToBackBeginFrameSourceTest : public ::testing::Test { | |
| 191 public: | |
| 192 static const int64_t kDeadline; | 178 static const int64_t kDeadline; |
| 193 static const int64_t kInterval; | 179 static const int64_t kInterval; |
| 194 | 180 |
| 195 std::unique_ptr<base::SimpleTestTickClock> now_src_; | |
| 196 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; | |
| 197 std::unique_ptr<TestBackToBackBeginFrameSource> source_; | |
| 198 std::unique_ptr<MockBeginFrameObserver> obs_; | |
| 199 | |
| 200 void SetUp() override { | 181 void SetUp() override { |
| 201 now_src_.reset(new base::SimpleTestTickClock()); | 182 now_src_.reset(new base::SimpleTestTickClock()); |
| 202 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); | 183 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); |
| 203 task_runner_ = | 184 task_runner_ = |
| 204 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); | 185 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); |
| 205 source_.reset( | 186 std::unique_ptr<TestDelayBasedTimeSource> time_source( |
| 206 new TestBackToBackBeginFrameSource(now_src_.get(), task_runner_.get())); | 187 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get())); |
| 207 obs_ = | 188 source_.reset(new SyntheticBeginFrameSource(std::move(time_source))); |
| 208 base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>()); | 189 source_->SetUnthrottled(true); |
| 190 obs_ = base::WrapUnique(new ::testing::StrictMock<MockBeginFrameObserver>); |
| 209 } | 191 } |
| 210 | 192 |
| 211 void TearDown() override { obs_.reset(); } | 193 void TearDown() override { obs_.reset(); } |
| 194 |
| 195 std::unique_ptr<base::SimpleTestTickClock> now_src_; |
| 196 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
| 197 std::unique_ptr<SyntheticBeginFrameSource> source_; |
| 198 std::unique_ptr<MockBeginFrameObserver> obs_; |
| 212 }; | 199 }; |
| 213 | 200 |
| 214 const int64_t BackToBackBeginFrameSourceTest::kDeadline = | 201 const int64_t BackToBackBeginFrameSourceTest::kDeadline = |
| 215 BeginFrameArgs::DefaultInterval().ToInternalValue(); | 202 BeginFrameArgs::DefaultInterval().ToInternalValue(); |
| 216 | 203 |
| 217 const int64_t BackToBackBeginFrameSourceTest::kInterval = | 204 const int64_t BackToBackBeginFrameSourceTest::kInterval = |
| 218 BeginFrameArgs::DefaultInterval().ToInternalValue(); | 205 BeginFrameArgs::DefaultInterval().ToInternalValue(); |
| 219 | 206 |
| 220 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { | 207 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { |
| 221 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 208 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 233 TEST_F(BackToBackBeginFrameSourceTest, | 220 TEST_F(BackToBackBeginFrameSourceTest, |
| 234 DidFinishFrameThenRemoveObserverProducesNoFrame) { | 221 DidFinishFrameThenRemoveObserverProducesNoFrame) { |
| 235 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 222 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 236 source_->AddObserver(obs_.get()); | 223 source_->AddObserver(obs_.get()); |
| 237 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 224 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 238 task_runner_->RunPendingTasks(); | 225 task_runner_->RunPendingTasks(); |
| 239 | 226 |
| 240 source_->RemoveObserver(obs_.get()); | 227 source_->RemoveObserver(obs_.get()); |
| 241 source_->DidFinishFrame(obs_.get(), 0); | 228 source_->DidFinishFrame(obs_.get(), 0); |
| 242 | 229 |
| 230 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the |
| 231 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_| |
| 232 // is removed. |
| 233 task_runner_->RunPendingTasks(); |
| 243 EXPECT_FALSE(task_runner_->HasPendingTasks()); | 234 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 244 } | 235 } |
| 245 | 236 |
| 246 TEST_F(BackToBackBeginFrameSourceTest, | 237 TEST_F(BackToBackBeginFrameSourceTest, |
| 247 RemoveObserverThenDidFinishFrameProducesNoFrame) { | 238 RemoveObserverThenDidFinishFrameProducesNoFrame) { |
| 248 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 239 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 249 source_->AddObserver(obs_.get()); | 240 source_->AddObserver(obs_.get()); |
| 250 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 241 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 251 task_runner_->RunPendingTasks(); | 242 task_runner_->RunPendingTasks(); |
| 252 | 243 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 269 source_->RemoveObserver(obs_.get()); | 260 source_->RemoveObserver(obs_.get()); |
| 270 | 261 |
| 271 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 262 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 272 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 263 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 273 source_->AddObserver(obs_.get()); | 264 source_->AddObserver(obs_.get()); |
| 274 | 265 |
| 275 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 266 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 276 source_->DidFinishFrame(obs_.get(), 0); | 267 source_->DidFinishFrame(obs_.get(), 0); |
| 277 | 268 |
| 278 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 269 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 279 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); | 270 // The begin frame is posted at the time when the observer was added, |
| 271 // so it ignores changes to "now" afterward. |
| 272 EXPECT_BEGIN_FRAME_USED(*obs_, 1110, 1110 + kDeadline, kInterval); |
| 280 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 273 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 281 task_runner_->RunPendingTasks(); | 274 task_runner_->RunPendingTasks(); |
| 282 } | 275 } |
| 283 | 276 |
| 284 TEST_F(BackToBackBeginFrameSourceTest, | 277 TEST_F(BackToBackBeginFrameSourceTest, |
| 285 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { | 278 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { |
| 286 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 279 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 287 source_->AddObserver(obs_.get()); | 280 source_->AddObserver(obs_.get()); |
| 288 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 281 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 289 task_runner_->RunPendingTasks(); | 282 task_runner_->RunPendingTasks(); |
| 290 | 283 |
| 291 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 284 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 292 source_->DidFinishFrame(obs_.get(), 0); | 285 source_->DidFinishFrame(obs_.get(), 0); |
| 293 | 286 |
| 294 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 287 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 295 source_->RemoveObserver(obs_.get()); | 288 source_->RemoveObserver(obs_.get()); |
| 296 | 289 |
| 297 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 290 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 298 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 291 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 299 source_->AddObserver(obs_.get()); | 292 source_->AddObserver(obs_.get()); |
| 300 | 293 |
| 301 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 294 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 302 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); | 295 // Ticks at the time at which the observer was added, ignoring the |
| 296 // last change to "now". |
| 297 EXPECT_BEGIN_FRAME_USED(*obs_, 1120, 1120 + kDeadline, kInterval); |
| 303 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 298 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 304 task_runner_->RunPendingTasks(); | 299 task_runner_->RunPendingTasks(); |
| 305 } | 300 } |
| 306 | 301 |
| 307 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { | 302 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { |
| 308 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 303 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 309 source_->AddObserver(obs_.get()); | 304 source_->AddObserver(obs_.get()); |
| 310 source_->RemoveObserver(obs_.get()); | 305 source_->RemoveObserver(obs_.get()); |
| 311 source_->DidFinishFrame(obs_.get(), 0); | 306 source_->DidFinishFrame(obs_.get(), 0); |
| 312 EXPECT_FALSE(task_runner_->RunPendingTasks()); | 307 EXPECT_FALSE(task_runner_->RunPendingTasks()); |
| 313 } | 308 } |
| 314 | 309 |
| 315 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) { | 310 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) { |
| 316 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 311 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 317 source_->AddObserver(obs_.get()); | 312 source_->AddObserver(obs_.get()); |
| 318 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 313 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 314 // Runs the pending begin frame. |
| 319 task_runner_->RunPendingTasks(); | 315 task_runner_->RunPendingTasks(); |
| 316 // While running the begin frame, the next frame was cancelled, this |
| 317 // runs the next frame, sees it was cancelled, and goes to sleep. |
| 318 task_runner_->RunPendingTasks(); |
| 319 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 320 | 320 |
| 321 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 321 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 322 | 322 |
| 323 source_->DidFinishFrame(obs_.get(), 3); | 323 source_->DidFinishFrame(obs_.get(), 3); |
| 324 EXPECT_FALSE(task_runner_->HasPendingTasks()); | 324 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 325 source_->DidFinishFrame(obs_.get(), 2); | 325 source_->DidFinishFrame(obs_.get(), 2); |
| 326 EXPECT_FALSE(task_runner_->HasPendingTasks()); | 326 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 327 source_->DidFinishFrame(obs_.get(), 1); | 327 source_->DidFinishFrame(obs_.get(), 1); |
| 328 EXPECT_FALSE(task_runner_->HasPendingTasks()); | 328 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 329 | 329 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 356 | 356 |
| 357 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { | 357 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { |
| 358 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 358 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 359 source_->AddObserver(obs_.get()); | 359 source_->AddObserver(obs_.get()); |
| 360 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 360 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 361 task_runner_->RunPendingTasks(); | 361 task_runner_->RunPendingTasks(); |
| 362 | 362 |
| 363 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 363 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 364 source_->DidFinishFrame(obs_.get(), 0); | 364 source_->DidFinishFrame(obs_.get(), 0); |
| 365 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); | 365 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); |
| 366 EXPECT_BEGIN_FRAME_USED(*obs_, 1150, 1150 + kDeadline, kInterval); | 366 // Ticks at the time the last frame finished, so ignores the last change to |
| 367 // "now". |
| 368 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); |
| 367 | 369 |
| 368 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 370 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 369 task_runner_->RunPendingTasks(); | 371 task_runner_->RunPendingTasks(); |
| 370 } | 372 } |
| 371 | 373 |
| 372 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { | 374 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { |
| 373 StrictMock<MockBeginFrameObserver> obs1, obs2; | 375 StrictMock<MockBeginFrameObserver> obs1, obs2; |
| 374 | 376 |
| 375 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); | 377 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); |
| 376 source_->AddObserver(&obs1); | 378 source_->AddObserver(&obs1); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); | 413 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); |
| 412 task_runner_->RunPendingTasks(); | 414 task_runner_->RunPendingTasks(); |
| 413 | 415 |
| 414 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 416 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 415 source_->DidFinishFrame(&obs1, 0); | 417 source_->DidFinishFrame(&obs1, 0); |
| 416 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval); | 418 EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval); |
| 417 task_runner_->RunPendingTasks(); | 419 task_runner_->RunPendingTasks(); |
| 418 | 420 |
| 419 source_->DidFinishFrame(&obs1, 0); | 421 source_->DidFinishFrame(&obs1, 0); |
| 420 source_->RemoveObserver(&obs1); | 422 source_->RemoveObserver(&obs1); |
| 423 // Finishing the frame for |obs1| posts a begin frame task, which will be |
| 424 // aborted since |obs1| is removed. Clear that from the task runner. |
| 425 task_runner_->RunPendingTasks(); |
| 421 | 426 |
| 422 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 427 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 423 source_->DidFinishFrame(&obs2, 0); | 428 source_->DidFinishFrame(&obs2, 0); |
| 424 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval); | 429 EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval); |
| 425 task_runner_->RunPendingTasks(); | 430 task_runner_->RunPendingTasks(); |
| 426 | 431 |
| 427 source_->DidFinishFrame(&obs2, 0); | 432 source_->DidFinishFrame(&obs2, 0); |
| 428 source_->RemoveObserver(&obs2); | 433 source_->RemoveObserver(&obs2); |
| 429 } | 434 } |
| 430 | 435 |
| 436 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) { |
| 437 StrictMock<MockBeginFrameObserver> obs1, obs2; |
| 438 |
| 439 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); |
| 440 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); |
| 441 source_->AddObserver(&obs1); |
| 442 source_->AddObserver(&obs2); |
| 443 EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval); |
| 444 EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval); |
| 445 task_runner_->RunPendingTasks(); |
| 446 |
| 447 // |obs1| finishes first. |
| 448 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 449 source_->DidFinishFrame(&obs1, 0); |
| 450 |
| 451 // |obs2| finishes also, before getting to the newly posted begin frame. |
| 452 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 453 source_->DidFinishFrame(&obs2, 0); |
| 454 |
| 455 // Because the begin frame source already ticked when |obs1| finished, |
| 456 // we see it as the frame time for both observers. |
| 457 EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval); |
| 458 EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval); |
| 459 task_runner_->RunPendingTasks(); |
| 460 |
| 461 source_->DidFinishFrame(&obs1, 0); |
| 462 source_->RemoveObserver(&obs1); |
| 463 source_->DidFinishFrame(&obs2, 0); |
| 464 source_->RemoveObserver(&obs2); |
| 465 } |
| 466 |
| 431 // SyntheticBeginFrameSource testing ------------------------------------------ | 467 // SyntheticBeginFrameSource testing ------------------------------------------ |
| 432 class SyntheticBeginFrameSourceTest : public ::testing::Test { | 468 class SyntheticBeginFrameSourceTest : public ::testing::Test { |
| 433 public: | 469 public: |
| 434 std::unique_ptr<base::SimpleTestTickClock> now_src_; | 470 std::unique_ptr<base::SimpleTestTickClock> now_src_; |
| 435 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; | 471 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
| 436 std::unique_ptr<TestSyntheticBeginFrameSource> source_; | 472 std::unique_ptr<SyntheticBeginFrameSource> source_; |
| 437 std::unique_ptr<MockBeginFrameObserver> obs_; | 473 std::unique_ptr<MockBeginFrameObserver> obs_; |
| 438 | 474 |
| 439 void SetUp() override { | 475 void SetUp() override { |
| 440 now_src_.reset(new base::SimpleTestTickClock()); | 476 now_src_.reset(new base::SimpleTestTickClock()); |
| 441 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); | 477 now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); |
| 442 task_runner_ = | 478 task_runner_ = |
| 443 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); | 479 make_scoped_refptr(new OrderedSimpleTaskRunner(now_src_.get(), false)); |
| 444 source_.reset(new TestSyntheticBeginFrameSource( | 480 std::unique_ptr<DelayBasedTimeSource> time_source( |
| 445 now_src_.get(), task_runner_.get(), | 481 new TestDelayBasedTimeSource(now_src_.get(), task_runner_.get())); |
| 446 base::TimeDelta::FromMicroseconds(10000))); | 482 time_source->SetTimebaseAndInterval( |
| 447 obs_ = base::WrapUnique(new MockBeginFrameObserver()); | 483 base::TimeTicks(), base::TimeDelta::FromMicroseconds(10000)); |
| 484 source_.reset(new SyntheticBeginFrameSource(std::move(time_source))); |
| 485 obs_.reset(new MockBeginFrameObserver); |
| 448 } | 486 } |
| 449 | 487 |
| 450 void TearDown() override { obs_.reset(); } | 488 void TearDown() override { obs_.reset(); } |
| 451 }; | 489 }; |
| 452 | 490 |
| 453 TEST_F(SyntheticBeginFrameSourceTest, | 491 TEST_F(SyntheticBeginFrameSourceTest, |
| 454 AddObserverCallsOnBeginFrameWithMissedTick) { | 492 AddObserverCallsOnBeginFrameWithMissedTick) { |
| 455 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); | 493 now_src_->Advance(base::TimeDelta::FromMicroseconds(9010)); |
| 456 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 494 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 457 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000); | 495 EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 base::TimeDelta::FromInternalValue(10000)); | 648 base::TimeDelta::FromInternalValue(10000)); |
| 611 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); | 649 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); |
| 612 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); | 650 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); |
| 613 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); | 651 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); |
| 614 source_->AddObserver(&obs); | 652 source_->AddObserver(&obs); |
| 615 source_->RemoveObserver(&obs); | 653 source_->RemoveObserver(&obs); |
| 616 } | 654 } |
| 617 | 655 |
| 618 } // namespace | 656 } // namespace |
| 619 } // namespace cc | 657 } // namespace cc |
| OLD | NEW |