| 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" |
| 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::Mock; | 17 using testing::Mock; |
| 18 using testing::StrictMock; | 18 using testing::StrictMock; |
| 19 | 19 |
| 20 namespace cc { | 20 namespace cc { |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 // BeginFrameObserverBase testing --------------------------------------- | |
| 24 class MockMinimalBeginFrameObserverBase : public BeginFrameObserverBase { | |
| 25 public: | |
| 26 MOCK_METHOD1(OnBeginFrameDerivedImpl, bool(const BeginFrameArgs&)); | |
| 27 MOCK_METHOD1(OnBeginFrameSourcePausedChanged, void(bool)); | |
| 28 int64_t dropped_begin_frame_args() const { return dropped_begin_frame_args_; } | |
| 29 }; | |
| 30 | |
| 31 TEST(BeginFrameObserverBaseTest, OnBeginFrameImplementation) { | |
| 32 using ::testing::Return; | |
| 33 MockMinimalBeginFrameObserverBase obs; | |
| 34 ::testing::InSequence ordered; // These calls should be ordered | |
| 35 | |
| 36 // Initial conditions | |
| 37 EXPECT_EQ(BeginFrameArgs(), obs.LastUsedBeginFrameArgs()); | |
| 38 EXPECT_EQ(0, obs.dropped_begin_frame_args()); | |
| 39 | |
| 40 #ifndef NDEBUG | |
| 41 EXPECT_DEATH({ obs.OnBeginFrame(BeginFrameArgs()); }, ""); | |
| 42 #endif | |
| 43 | |
| 44 BeginFrameArgs args1 = | |
| 45 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 100, 200, 300); | |
| 46 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args1)).WillOnce(Return(true)); | |
| 47 obs.OnBeginFrame(args1); | |
| 48 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); | |
| 49 EXPECT_EQ(0, obs.dropped_begin_frame_args()); | |
| 50 | |
| 51 #ifndef NDEBUG | |
| 52 EXPECT_DEATH({ | |
| 53 obs.OnBeginFrame(CreateBeginFrameArgsForTesting( | |
| 54 BEGINFRAME_FROM_HERE, 50, 200, 300)); | |
| 55 }, | |
| 56 ""); | |
| 57 #endif | |
| 58 | |
| 59 // Returning false shouldn't update the LastUsedBeginFrameArgs value. | |
| 60 BeginFrameArgs args2 = | |
| 61 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 200, 300, 400); | |
| 62 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args2)).WillOnce(Return(false)); | |
| 63 obs.OnBeginFrame(args2); | |
| 64 EXPECT_EQ(args1, obs.LastUsedBeginFrameArgs()); | |
| 65 EXPECT_EQ(1, obs.dropped_begin_frame_args()); | |
| 66 | |
| 67 BeginFrameArgs args3 = | |
| 68 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 150, 300, 400); | |
| 69 EXPECT_CALL(obs, OnBeginFrameDerivedImpl(args3)).WillOnce(Return(true)); | |
| 70 obs.OnBeginFrame(args3); | |
| 71 EXPECT_EQ(args3, obs.LastUsedBeginFrameArgs()); | |
| 72 EXPECT_EQ(1, obs.dropped_begin_frame_args()); | |
| 73 } | |
| 74 | |
| 75 // BeginFrameSource testing ---------------------------------------------- | 23 // BeginFrameSource testing ---------------------------------------------- |
| 76 TEST(BeginFrameSourceBaseTest, ObserverManipulation) { | 24 TEST(BeginFrameSourceBaseTest, ObserverManipulation) { |
| 77 MockBeginFrameObserver obs; | 25 MockBeginFrameObserver obs; |
| 78 MockBeginFrameObserver otherObs; | 26 MockBeginFrameObserver otherObs; |
| 79 FakeBeginFrameSource source; | 27 FakeBeginFrameSource source; |
| 80 | 28 |
| 81 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); | 29 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); |
| 82 source.AddObserver(&obs); | 30 source.AddObserver(&obs); |
| 83 EXPECT_TRUE(source.has_observers()); | 31 EXPECT_TRUE(source.has_observers()); |
| 84 | 32 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 | 114 |
| 167 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); | 115 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); |
| 168 source.SetBeginFrameSourcePaused(false); | 116 source.SetBeginFrameSourcePaused(false); |
| 169 | 117 |
| 170 EXPECT_BEGIN_FRAME_USED(obs2, 300, 400, 100); | 118 EXPECT_BEGIN_FRAME_USED(obs2, 300, 400, 100); |
| 171 SEND_BEGIN_FRAME_USED(source, 300, 400, 100); | 119 SEND_BEGIN_FRAME_USED(source, 300, 400, 100); |
| 172 | 120 |
| 173 source.RemoveObserver(&obs2); | 121 source.RemoveObserver(&obs2); |
| 174 } | 122 } |
| 175 | 123 |
| 176 class LoopingBeginFrameObserver : public BeginFrameObserverBase { | 124 class LoopingBeginFrameObserver : public BeginFrameObserver { |
| 177 public: | 125 public: |
| 178 BeginFrameSource* source_; | 126 BeginFrameSource* source_; |
| 179 | 127 |
| 180 void AsValueInto(base::trace_event::TracedValue* dict) const override { | 128 void AsValueInto(base::trace_event::TracedValue* dict) const override { |
| 181 dict->SetString("type", "LoopingBeginFrameObserver"); | 129 dict->SetString("type", "LoopingBeginFrameObserver"); |
| 182 dict->BeginDictionary("source"); | 130 dict->BeginDictionary("source"); |
| 183 source_->AsValueInto(dict); | 131 source_->AsValueInto(dict); |
| 184 dict->EndDictionary(); | 132 dict->EndDictionary(); |
| 185 } | 133 } |
| 186 | 134 |
| 187 protected: | 135 protected: |
| 188 // BeginFrameObserverBase | 136 // BeginFrameObserver |
| 189 bool OnBeginFrameDerivedImpl(const BeginFrameArgs& args) override { | 137 const BeginFrameArgs& LastUsedBeginFrameArgs() const override { |
| 190 return true; | 138 return dummy_begin_frame_args_; |
| 191 } | 139 } |
| 140 void OnBeginFrame(const BeginFrameArgs& args) override {} |
| 141 void OnBeginFrameSourcePausedChanged(bool paused) override {} |
| 192 | 142 |
| 193 void OnBeginFrameSourcePausedChanged(bool paused) override {} | 143 private: |
| 144 BeginFrameArgs dummy_begin_frame_args_; |
| 194 }; | 145 }; |
| 195 | 146 |
| 196 TEST(BeginFrameSourceBaseTest, DetectAsValueIntoLoop) { | 147 TEST(BeginFrameSourceBaseTest, DetectAsValueIntoLoop) { |
| 197 LoopingBeginFrameObserver obs; | 148 LoopingBeginFrameObserver obs; |
| 198 FakeBeginFrameSource source; | 149 FakeBeginFrameSource source; |
| 199 | 150 |
| 200 obs.source_ = &source; | 151 obs.source_ = &source; |
| 201 source.AddObserver(&obs); | 152 source.AddObserver(&obs); |
| 202 | 153 |
| 203 std::unique_ptr<base::trace_event::TracedValue> state( | 154 std::unique_ptr<base::trace_event::TracedValue> state( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 | 202 |
| 252 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { | 203 TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) { |
| 253 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 204 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 254 source_->AddObserver(obs_.get()); | 205 source_->AddObserver(obs_.get()); |
| 255 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 206 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 256 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 207 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 257 task_runner_->RunPendingTasks(); | 208 task_runner_->RunPendingTasks(); |
| 258 | 209 |
| 259 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); | 210 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); |
| 260 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 211 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 261 source_->DidFinishFrame(0); | 212 source_->DidFinishFrame(obs_.get()); |
| 262 task_runner_->RunPendingTasks(); | 213 task_runner_->RunPendingTasks(); |
| 263 } | 214 } |
| 264 | 215 |
| 265 TEST_F(BackToBackBeginFrameSourceTest, | 216 TEST_F(BackToBackBeginFrameSourceTest, |
| 266 DidFinishFrameThenRemoveObserverProducesNoFrame) { | 217 DidFinishFrameThenRemoveObserverProducesNoFrame) { |
| 267 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 218 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 268 source_->AddObserver(obs_.get()); | 219 source_->AddObserver(obs_.get()); |
| 269 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 220 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 270 task_runner_->RunPendingTasks(); | 221 task_runner_->RunPendingTasks(); |
| 271 | 222 |
| 272 source_->RemoveObserver(obs_.get()); | 223 source_->RemoveObserver(obs_.get()); |
| 273 source_->DidFinishFrame(0); | 224 source_->DidFinishFrame(obs_.get()); |
| 274 | 225 |
| 275 EXPECT_FALSE(task_runner_->HasPendingTasks()); | 226 EXPECT_FALSE(task_runner_->HasPendingTasks()); |
| 276 } | 227 } |
| 277 | 228 |
| 278 TEST_F(BackToBackBeginFrameSourceTest, | 229 TEST_F(BackToBackBeginFrameSourceTest, |
| 279 RemoveObserverThenDidFinishFrameProducesNoFrame) { | 230 RemoveObserverThenDidFinishFrameProducesNoFrame) { |
| 280 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 231 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 281 source_->AddObserver(obs_.get()); | 232 source_->AddObserver(obs_.get()); |
| 282 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 233 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 283 task_runner_->RunPendingTasks(); | 234 task_runner_->RunPendingTasks(); |
| 284 | 235 |
| 285 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 236 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 286 source_->DidFinishFrame(0); | 237 source_->DidFinishFrame(obs_.get()); |
| 287 source_->RemoveObserver(obs_.get()); | 238 source_->RemoveObserver(obs_.get()); |
| 288 | 239 |
| 289 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 240 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 290 task_runner_->RunPendingTasks(); | 241 task_runner_->RunPendingTasks(); |
| 291 } | 242 } |
| 292 | 243 |
| 293 TEST_F(BackToBackBeginFrameSourceTest, | 244 TEST_F(BackToBackBeginFrameSourceTest, |
| 294 TogglingObserverThenDidFinishFrameProducesCorrectFrame) { | 245 TogglingObserverThenDidFinishFrameProducesCorrectFrame) { |
| 295 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 246 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 296 source_->AddObserver(obs_.get()); | 247 source_->AddObserver(obs_.get()); |
| 297 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 248 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 298 task_runner_->RunPendingTasks(); | 249 task_runner_->RunPendingTasks(); |
| 299 | 250 |
| 300 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 251 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 301 source_->RemoveObserver(obs_.get()); | 252 source_->RemoveObserver(obs_.get()); |
| 302 | 253 |
| 303 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 254 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 304 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 255 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 305 source_->AddObserver(obs_.get()); | 256 source_->AddObserver(obs_.get()); |
| 306 | 257 |
| 307 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 258 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 308 source_->DidFinishFrame(0); | 259 source_->DidFinishFrame(obs_.get()); |
| 309 | 260 |
| 310 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 261 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 311 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); | 262 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); |
| 312 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 263 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 313 task_runner_->RunPendingTasks(); | 264 task_runner_->RunPendingTasks(); |
| 314 } | 265 } |
| 315 | 266 |
| 316 TEST_F(BackToBackBeginFrameSourceTest, | 267 TEST_F(BackToBackBeginFrameSourceTest, |
| 317 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { | 268 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { |
| 318 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 269 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 319 source_->AddObserver(obs_.get()); | 270 source_->AddObserver(obs_.get()); |
| 320 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 271 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 321 task_runner_->RunPendingTasks(); | 272 task_runner_->RunPendingTasks(); |
| 322 | 273 |
| 323 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 274 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 324 source_->DidFinishFrame(0); | 275 source_->DidFinishFrame(obs_.get()); |
| 325 | 276 |
| 326 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 277 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 327 source_->RemoveObserver(obs_.get()); | 278 source_->RemoveObserver(obs_.get()); |
| 328 | 279 |
| 329 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 280 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 330 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 281 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 331 source_->AddObserver(obs_.get()); | 282 source_->AddObserver(obs_.get()); |
| 332 | 283 |
| 333 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); | 284 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); |
| 334 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); | 285 EXPECT_BEGIN_FRAME_USED(*obs_, 1130, 1130 + kDeadline, kInterval); |
| 335 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 286 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 336 task_runner_->RunPendingTasks(); | 287 task_runner_->RunPendingTasks(); |
| 337 } | 288 } |
| 338 | 289 |
| 339 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { | 290 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { |
| 340 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 291 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 341 source_->AddObserver(obs_.get()); | 292 source_->AddObserver(obs_.get()); |
| 342 source_->RemoveObserver(obs_.get()); | 293 source_->RemoveObserver(obs_.get()); |
| 343 source_->DidFinishFrame(0); | 294 source_->DidFinishFrame(obs_.get()); |
| 344 EXPECT_FALSE(task_runner_->RunPendingTasks()); | 295 EXPECT_FALSE(task_runner_->RunPendingTasks()); |
| 345 } | 296 } |
| 346 | 297 |
| 347 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) { | |
| 348 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | |
| 349 source_->AddObserver(obs_.get()); | |
| 350 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | |
| 351 task_runner_->RunPendingTasks(); | |
| 352 | |
| 353 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | |
| 354 | |
| 355 source_->DidFinishFrame(3); | |
| 356 EXPECT_FALSE(task_runner_->HasPendingTasks()); | |
| 357 source_->DidFinishFrame(2); | |
| 358 EXPECT_FALSE(task_runner_->HasPendingTasks()); | |
| 359 source_->DidFinishFrame(1); | |
| 360 EXPECT_FALSE(task_runner_->HasPendingTasks()); | |
| 361 | |
| 362 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); | |
| 363 source_->DidFinishFrame(0); | |
| 364 EXPECT_EQ(base::TimeDelta(), task_runner_->DelayToNextTaskTime()); | |
| 365 task_runner_->RunPendingTasks(); | |
| 366 } | |
| 367 | |
| 368 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) { | 298 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) { |
| 369 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 299 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 370 source_->AddObserver(obs_.get()); | 300 source_->AddObserver(obs_.get()); |
| 371 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 301 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 372 task_runner_->RunPendingTasks(); | 302 task_runner_->RunPendingTasks(); |
| 373 | 303 |
| 374 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 304 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 375 source_->DidFinishFrame(0); | 305 source_->DidFinishFrame(obs_.get()); |
| 376 source_->DidFinishFrame(0); | 306 source_->DidFinishFrame(obs_.get()); |
| 377 source_->DidFinishFrame(0); | 307 source_->DidFinishFrame(obs_.get()); |
| 378 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); | 308 EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval); |
| 379 task_runner_->RunPendingTasks(); | 309 task_runner_->RunPendingTasks(); |
| 380 | 310 |
| 381 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 311 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 382 source_->DidFinishFrame(0); | 312 source_->DidFinishFrame(obs_.get()); |
| 383 source_->DidFinishFrame(0); | 313 source_->DidFinishFrame(obs_.get()); |
| 384 source_->DidFinishFrame(0); | 314 source_->DidFinishFrame(obs_.get()); |
| 385 EXPECT_BEGIN_FRAME_USED(*obs_, 1200, 1200 + kDeadline, kInterval); | 315 EXPECT_BEGIN_FRAME_USED(*obs_, 1200, 1200 + kDeadline, kInterval); |
| 386 task_runner_->RunPendingTasks(); | 316 task_runner_->RunPendingTasks(); |
| 387 } | 317 } |
| 388 | 318 |
| 389 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { | 319 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { |
| 390 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); | 320 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); |
| 391 source_->AddObserver(obs_.get()); | 321 source_->AddObserver(obs_.get()); |
| 392 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); | 322 EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval); |
| 393 task_runner_->RunPendingTasks(); | 323 task_runner_->RunPendingTasks(); |
| 394 | 324 |
| 395 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); | 325 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); |
| 396 source_->DidFinishFrame(0); | 326 source_->DidFinishFrame(obs_.get()); |
| 397 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); | 327 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); |
| 398 EXPECT_BEGIN_FRAME_USED(*obs_, 1150, 1150 + kDeadline, kInterval); | 328 EXPECT_BEGIN_FRAME_USED(*obs_, 1150, 1150 + kDeadline, kInterval); |
| 399 | 329 |
| 400 EXPECT_TRUE(task_runner_->HasPendingTasks()); | 330 EXPECT_TRUE(task_runner_->HasPendingTasks()); |
| 401 task_runner_->RunPendingTasks(); | 331 task_runner_->RunPendingTasks(); |
| 402 } | 332 } |
| 403 | 333 |
| 404 // SyntheticBeginFrameSource testing ------------------------------------------ | 334 // SyntheticBeginFrameSource testing ------------------------------------------ |
| 405 class SyntheticBeginFrameSourceTest : public ::testing::Test { | 335 class SyntheticBeginFrameSourceTest : public ::testing::Test { |
| 406 public: | 336 public: |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 base::TimeDelta::FromInternalValue(10000)); | 486 base::TimeDelta::FromInternalValue(10000)); |
| 557 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); | 487 now_src_->Advance(base::TimeDelta::FromInternalValue(5000)); |
| 558 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); | 488 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false); |
| 559 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); | 489 EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000); |
| 560 source_->AddObserver(&obs); | 490 source_->AddObserver(&obs); |
| 561 source_->RemoveObserver(&obs); | 491 source_->RemoveObserver(&obs); |
| 562 } | 492 } |
| 563 | 493 |
| 564 } // namespace | 494 } // namespace |
| 565 } // namespace cc | 495 } // namespace cc |
| OLD | NEW |