| 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(0); |
| 266 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(0); |
| 267 task_runner()->FastForwardBy(timeout1); |
| 268 task_runner()->RunUntilIdle(); |
| 269 EXPECT_TRUE(compositor()->IsLocked()); |
| 270 |
| 271 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); |
| 272 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); |
| 273 task_runner()->FastForwardBy(timeout2 - timeout1); |
| 274 task_runner()->RunUntilIdle(); |
| 275 EXPECT_FALSE(compositor()->IsLocked()); |
| 276 } |
| 277 |
| 278 TEST_F(CompositorTestWithMockedTime, ExtendingTimeoutStartingCreatedTime) { |
| 279 testing::StrictMock<MockCompositorLockClient> lock_client1; |
| 280 std::unique_ptr<CompositorLock> lock1; |
| 281 testing::StrictMock<MockCompositorLockClient> lock_client2; |
| 282 std::unique_ptr<CompositorLock> lock2; |
| 283 |
| 284 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(5); |
| 285 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(10); |
| 286 |
| 287 // The first lock has a short timeout. |
| 288 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); |
| 289 EXPECT_TRUE(compositor()->IsLocked()); |
| 290 |
| 291 base::TimeDelta time_elapse = base::TimeDelta::FromMilliseconds(1); |
| 292 task_runner()->FastForwardBy(time_elapse); |
| 293 task_runner()->RunUntilIdle(); |
| 294 |
| 295 // Allow locks to extend timeout. |
| 296 compositor()->set_allow_locks_to_extend_timeout(true); |
| 297 // The second lock has a longer timeout, so the second one is used for both |
| 298 // and start from the time second lock created. |
| 299 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); |
| 300 compositor()->set_allow_locks_to_extend_timeout(false); |
| 301 |
| 302 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(0); |
| 303 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(0); |
| 304 task_runner()->FastForwardBy(timeout1 - time_elapse); |
| 305 task_runner()->RunUntilIdle(); |
| 306 EXPECT_TRUE(compositor()->IsLocked()); |
| 307 |
| 308 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); |
| 309 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); |
| 310 task_runner()->FastForwardBy(timeout2 - (timeout1 - time_elapse)); |
| 311 task_runner()->RunUntilIdle(); |
| 312 EXPECT_FALSE(compositor()->IsLocked()); |
| 313 } |
| 314 |
| 315 TEST_F(CompositorTestWithMockedTime, AllowButNotExtendTimeout) { |
| 316 testing::StrictMock<MockCompositorLockClient> lock_client1; |
| 317 std::unique_ptr<CompositorLock> lock1; |
| 318 testing::StrictMock<MockCompositorLockClient> lock_client2; |
| 319 std::unique_ptr<CompositorLock> lock2; |
| 320 |
| 321 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(10); |
| 322 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(1); |
| 323 |
| 324 // The first lock has a longer timeout. |
| 325 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); |
| 326 EXPECT_TRUE(compositor()->IsLocked()); |
| 327 |
| 328 // Allow locks to extend timeout. |
| 329 compositor()->set_allow_locks_to_extend_timeout(true); |
| 330 // The second lock has a short timeout, so the first one is used for both. |
| 331 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); |
| 332 compositor()->set_allow_locks_to_extend_timeout(false); |
| 333 |
| 334 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(0); |
| 335 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(0); |
| 336 task_runner()->FastForwardBy(timeout2); |
| 337 task_runner()->RunUntilIdle(); |
| 338 EXPECT_TRUE(compositor()->IsLocked()); |
| 339 |
| 340 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); |
| 341 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); |
| 342 task_runner()->FastForwardBy(timeout1 - timeout2); |
| 343 task_runner()->RunUntilIdle(); |
| 344 EXPECT_FALSE(compositor()->IsLocked()); |
| 345 } |
| 346 |
| 347 TEST_F(CompositorTestWithMockedTime, AllowingExtendDoesNotUseDeadClient) { |
| 348 testing::StrictMock<MockCompositorLockClient> lock_client1; |
| 349 std::unique_ptr<CompositorLock> lock1; |
| 350 testing::StrictMock<MockCompositorLockClient> lock_client2; |
| 351 std::unique_ptr<CompositorLock> lock2; |
| 352 |
| 353 base::TimeDelta timeout1 = base::TimeDelta::FromMilliseconds(1); |
| 354 base::TimeDelta timeout2 = base::TimeDelta::FromMilliseconds(10); |
| 355 |
| 356 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout1); |
| 357 EXPECT_TRUE(compositor()->IsLocked()); |
| 358 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(1); |
| 359 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(0); |
| 360 task_runner()->FastForwardBy(timeout1); |
| 361 task_runner()->RunUntilIdle(); |
| 362 EXPECT_FALSE(compositor()->IsLocked()); |
| 363 |
| 364 // Allow locks to extend timeout. |
| 365 compositor()->set_allow_locks_to_extend_timeout(true); |
| 366 // |lock1| is timed out already. The second lock can timeout on its own. |
| 367 lock2 = compositor()->GetCompositorLock(&lock_client2, timeout2); |
| 368 compositor()->set_allow_locks_to_extend_timeout(false); |
| 369 EXPECT_TRUE(compositor()->IsLocked()); |
| 370 EXPECT_CALL(lock_client1, CompositorLockTimedOut()).Times(0); |
| 371 EXPECT_CALL(lock_client2, CompositorLockTimedOut()).Times(1); |
| 372 task_runner()->FastForwardBy(timeout2); |
| 373 task_runner()->RunUntilIdle(); |
| 374 EXPECT_FALSE(compositor()->IsLocked()); |
| 375 } |
| 376 |
| 246 TEST_F(CompositorTestWithMockedTime, LockIsDestroyedDoesntTimeout) { | 377 TEST_F(CompositorTestWithMockedTime, LockIsDestroyedDoesntTimeout) { |
| 247 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1); | 378 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1); |
| 248 | 379 |
| 249 testing::StrictMock<MockCompositorLockClient> lock_client1; | 380 testing::StrictMock<MockCompositorLockClient> lock_client1; |
| 250 std::unique_ptr<CompositorLock> lock1; | 381 std::unique_ptr<CompositorLock> lock1; |
| 251 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout); | 382 lock1 = compositor()->GetCompositorLock(&lock_client1, timeout); |
| 252 EXPECT_TRUE(compositor()->IsLocked()); | 383 EXPECT_TRUE(compositor()->IsLocked()); |
| 253 // The CompositorLockClient is destroyed when |lock1| is released. | 384 // The CompositorLockClient is destroyed when |lock1| is released. |
| 254 lock1 = nullptr; | 385 lock1 = nullptr; |
| 255 // The client isn't called as a result. | 386 // 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, | 467 EXPECT_EQ(gfx::kNullAcceleratedWidget, |
| 337 compositor()->ReleaseAcceleratedWidget()); | 468 compositor()->ReleaseAcceleratedWidget()); |
| 338 compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); | 469 compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); |
| 339 compositor()->SetVisible(true); | 470 compositor()->SetVisible(true); |
| 340 compositor()->ScheduleDraw(); | 471 compositor()->ScheduleDraw(); |
| 341 DrawWaiterForTest::WaitForCompositingEnded(compositor()); | 472 DrawWaiterForTest::WaitForCompositingEnded(compositor()); |
| 342 compositor()->SetRootLayer(nullptr); | 473 compositor()->SetRootLayer(nullptr); |
| 343 } | 474 } |
| 344 | 475 |
| 345 } // namespace ui | 476 } // namespace ui |
| OLD | NEW |