Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/test/test_mock_time_task_runner.h" | 9 #include "base/test/test_mock_time_task_runner.h" |
| 10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 // the first one is used for both. | 236 // the first one is used for both. |
| 237 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); | 237 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); |
| 238 | 238 |
| 239 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); | 239 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); |
| 240 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); | 240 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); |
| 241 task_runner()->FastForwardBy(timeout1); | 241 task_runner()->FastForwardBy(timeout1); |
| 242 task_runner()->RunUntilIdle(); | 242 task_runner()->RunUntilIdle(); |
| 243 EXPECT_FALSE(compositor()->IsLocked()); | 243 EXPECT_FALSE(compositor()->IsLocked()); |
| 244 } | 244 } |
| 245 | 245 |
| 246 TEST_F(CompositorTestWithMockedTime, AllowAndExtendTimeout) { | |
| 247 testing::StrictMock<MockCompositorLockClient> lock_client1; | |
| 248 std::unique_ptr<CompositorLock> lock1; | |
| 249 testing::StrictMock<MockCompositorLockClient> lock_client2; | |
| 250 std::unique_ptr<CompositorLock> lock2; | |
| 251 | |
| 252 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(1); | |
| 253 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(10); | |
| 254 | |
| 255 // The first lock has a short timeout. | |
| 256 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); | |
| 257 EXPECT_TRUE(compositor()->IsLocked()); | |
| 258 | |
| 259 // Allow locks to extend timeout. | |
| 260 compositor()->set_allow_locks_to_extend_timeout(true); | |
| 261 // The second lock has a longer timeout, so the second one is used for both. | |
| 262 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); | |
| 263 compositor()->set_allow_locks_to_extend_timeout(false); | |
| 264 | |
| 265 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
Times(0) here
wutao
2017/05/10 00:06:41
Done.
| |
| 266 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); | |
| 267 task_runner()->FastForwardBy(timeout1); | |
| 268 task_runner()->RunUntilIdle(); | |
| 269 EXPECT_TRUE(compositor()->IsLocked()); | |
| 270 | |
| 271 task_runner()->FastForwardBy(timeout2 - timeout1); | |
|
danakj
2017/05/09 22:23:19
EXPECT_CALL Times(1) here
wutao
2017/05/10 00:06:42
Done.
| |
| 272 task_runner()->RunUntilIdle(); | |
| 273 EXPECT_FALSE(compositor()->IsLocked()); | |
| 274 } | |
| 275 | |
| 276 TEST_F(CompositorTestWithMockedTime, ExtendingTimeoutStartingCreatedTime) { | |
| 277 testing::StrictMock<MockCompositorLockClient> lock_client1; | |
| 278 std::unique_ptr<CompositorLock> lock1; | |
| 279 testing::StrictMock<MockCompositorLockClient> lock_client2; | |
| 280 std::unique_ptr<CompositorLock> lock2; | |
| 281 | |
| 282 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(5); | |
| 283 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(10); | |
| 284 | |
| 285 // The first lock has a short timeout. | |
| 286 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); | |
| 287 EXPECT_TRUE(compositor()->IsLocked()); | |
| 288 | |
| 289 base::TimeDelta time_elapse = base::TimeDelta::FromMilliseconds(1); | |
| 290 task_runner()->FastForwardBy(time_elapse); | |
| 291 task_runner()->RunUntilIdle(); | |
| 292 | |
| 293 // Allow locks to extend timeout. | |
| 294 compositor()->set_allow_locks_to_extend_timeout(true); | |
| 295 // The second lock has a longer timeout, so the second one is used for both | |
| 296 // and start from the time second lock created. | |
| 297 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); | |
| 298 compositor()->set_allow_locks_to_extend_timeout(false); | |
| 299 | |
| 300 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
Times(0) for both clients here right?
wutao
2017/05/10 00:06:42
Done.
| |
| 301 task_runner()->FastForwardBy(timeout1 - time_elapse); | |
| 302 task_runner()->RunUntilIdle(); | |
| 303 EXPECT_TRUE(compositor()->IsLocked()); | |
| 304 | |
| 305 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
and Times(1) here for both?
wutao
2017/05/10 00:06:42
Done.
| |
| 306 task_runner()->FastForwardBy(timeout2 - (timeout1 - time_elapse)); | |
| 307 task_runner()->RunUntilIdle(); | |
| 308 EXPECT_FALSE(compositor()->IsLocked()); | |
| 309 } | |
| 310 | |
| 311 TEST_F(CompositorTestWithMockedTime, AllowButNotExtendTimeout) { | |
| 312 testing::StrictMock<MockCompositorLockClient> lock_client1; | |
| 313 std::unique_ptr<CompositorLock> lock1; | |
| 314 testing::StrictMock<MockCompositorLockClient> lock_client2; | |
| 315 std::unique_ptr<CompositorLock> lock2; | |
| 316 | |
| 317 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(10); | |
| 318 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(1); | |
| 319 | |
| 320 // The first lock has a longer timeout. | |
| 321 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); | |
| 322 EXPECT_TRUE(compositor()->IsLocked()); | |
| 323 | |
| 324 // Allow locks to extend timeout. | |
| 325 compositor()->set_allow_locks_to_extend_timeout(true); | |
| 326 // The second lock has a short timeout, so the first one is used for both. | |
| 327 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); | |
| 328 compositor()->set_allow_locks_to_extend_timeout(false); | |
| 329 | |
| 330 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
0
wutao
2017/05/10 00:06:41
Done.
| |
| 331 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); | |
| 332 task_runner()->FastForwardBy(timeout2); | |
| 333 task_runner()->RunUntilIdle(); | |
| 334 EXPECT_TRUE(compositor()->IsLocked()); | |
| 335 | |
| 336 task_runner()->FastForwardBy(timeout1 - timeout2); | |
|
danakj
2017/05/09 22:23:19
Times(1) down here for both
wutao
2017/05/10 00:06:41
Done.
| |
| 337 task_runner()->RunUntilIdle(); | |
| 338 EXPECT_FALSE(compositor()->IsLocked()); | |
| 339 } | |
| 340 | |
| 341 TEST_F(CompositorTestWithMockedTime, AllowingExtendDoesNotUseDeadClient) { | |
| 342 testing::StrictMock<MockCompositorLockClient> lock_client1; | |
| 343 std::unique_ptr<CompositorLock> lock1; | |
| 344 testing::StrictMock<MockCompositorLockClient> lock_client2; | |
| 345 std::unique_ptr<CompositorLock> lock2; | |
| 346 | |
| 347 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(1); | |
| 348 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(10); | |
| 349 | |
| 350 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); | |
| 351 EXPECT_TRUE(compositor()->IsLocked()); | |
| 352 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
Also EXPECT_CALL(client2).Times(0)
wutao
2017/05/10 00:06:42
Done.
| |
| 353 task_runner()->FastForwardBy(timeout1); | |
| 354 task_runner()->RunUntilIdle(); | |
| 355 EXPECT_FALSE(compositor()->IsLocked()); | |
| 356 | |
| 357 // Allow locks to extend timeout. | |
| 358 compositor()->set_allow_locks_to_extend_timeout(true); | |
| 359 // |lock1| is timeout. The second lock can timeout on its own. | |
|
danakj
2017/05/09 22:23:19
is timed out already.
wutao
2017/05/10 00:06:42
Done.
| |
| 360 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); | |
| 361 compositor()->set_allow_locks_to_extend_timeout(false); | |
| 362 EXPECT_TRUE(compositor()->IsLocked()); | |
| 363 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); | |
|
danakj
2017/05/09 22:23:19
Also EXPECT_CALL(client1).Times(0)
wutao
2017/05/10 00:06:42
Done.
| |
| 364 task_runner()->FastForwardBy(timeout2); | |
| 365 task_runner()->RunUntilIdle(); | |
| 366 EXPECT_FALSE(compositor()->IsLocked()); | |
| 367 } | |
| 368 | |
| 246 TEST_F(CompositorTestWithMockedTime, LockIsDestroyedDoesntTimeout) { | 369 TEST_F(CompositorTestWithMockedTime, LockIsDestroyedDoesntTimeout) { |
| 247 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1); | 370 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1); |
| 248 | 371 |
| 249 testing::StrictMock<MockCompositorLockClient> lock_client1; | 372 testing::StrictMock<MockCompositorLockClient> lock_client1; |
| 250 std::unique_ptr<CompositorLock> lock1; | 373 std::unique_ptr<CompositorLock> lock1; |
| 251 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout); | 374 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout); |
| 252 EXPECT_TRUE(compositor()->IsLocked()); | 375 EXPECT_TRUE(compositor()->IsLocked()); |
| 253 // The CompositorLockClient is destroyed when |lock1| is released. | 376 // The CompositorLockClient is destroyed when |lock1| is released. |
| 254 lock1 = nullptr; | 377 lock1 = nullptr; |
| 255 // The client isn't called as a result. | 378 // The client isn't called as a result. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 EXPECT_EQ(gfx::kNullAcceleratedWidget, | 459 EXPECT_EQ(gfx::kNullAcceleratedWidget, |
| 337 compositor()->ReleaseAcceleratedWidget()); | 460 compositor()->ReleaseAcceleratedWidget()); |
| 338 compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); | 461 compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); |
| 339 compositor()->SetVisible(true); | 462 compositor()->SetVisible(true); |
| 340 compositor()->ScheduleDraw(); | 463 compositor()->ScheduleDraw(); |
| 341 DrawWaiterForTest::WaitForCompositingEnded(compositor()); | 464 DrawWaiterForTest::WaitForCompositingEnded(compositor()); |
| 342 compositor()->SetRootLayer(nullptr); | 465 compositor()->SetRootLayer(nullptr); |
| 343 } | 466 } |
| 344 | 467 |
| 345 } // namespace ui | 468 } // namespace ui |
| OLD | NEW |