| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/gfx/image/image_skia.h" | 5 #include "ui/gfx/image/image_skia.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 | 371 |
| 372 test::TestOnThread image_on_thread(&image); | 372 test::TestOnThread image_on_thread(&image); |
| 373 // an image that was never accessed on this thread can be | 373 // an image that was never accessed on this thread can be |
| 374 // read by other thread. | 374 // read by other thread. |
| 375 image_on_thread.StartAndJoin(); | 375 image_on_thread.StartAndJoin(); |
| 376 EXPECT_TRUE(image_on_thread.can_read()); | 376 EXPECT_TRUE(image_on_thread.can_read()); |
| 377 EXPECT_TRUE(image_on_thread.can_modify()); | 377 EXPECT_TRUE(image_on_thread.can_modify()); |
| 378 EXPECT_FALSE(image.CanRead()); | 378 EXPECT_FALSE(image.CanRead()); |
| 379 EXPECT_FALSE(image.CanModify()); | 379 EXPECT_FALSE(image.CanModify()); |
| 380 | 380 |
| 381 image.DetachStorageFromThread(); | 381 image.DetachStorageFromSequence(); |
| 382 // An image is accessed by this thread, | 382 // An image is accessed by this thread, |
| 383 // so other thread cannot read/modify it. | 383 // so other thread cannot read/modify it. |
| 384 image.image_reps(); | 384 image.image_reps(); |
| 385 test::TestOnThread image_on_thread2(&image); | 385 test::TestOnThread image_on_thread2(&image); |
| 386 image_on_thread2.StartAndJoin(); | 386 image_on_thread2.StartAndJoin(); |
| 387 EXPECT_FALSE(image_on_thread2.can_read()); | 387 EXPECT_FALSE(image_on_thread2.can_read()); |
| 388 EXPECT_FALSE(image_on_thread2.can_modify()); | 388 EXPECT_FALSE(image_on_thread2.can_modify()); |
| 389 EXPECT_TRUE(image.CanRead()); | 389 EXPECT_TRUE(image.CanRead()); |
| 390 EXPECT_TRUE(image.CanModify()); | 390 EXPECT_TRUE(image.CanModify()); |
| 391 | 391 |
| 392 image.DetachStorageFromThread(); | 392 image.DetachStorageFromSequence(); |
| 393 std::unique_ptr<ImageSkia> deep_copy(image.DeepCopy()); | 393 std::unique_ptr<ImageSkia> deep_copy(image.DeepCopy()); |
| 394 EXPECT_FALSE(deep_copy->IsThreadSafe()); | 394 EXPECT_FALSE(deep_copy->IsThreadSafe()); |
| 395 test::TestOnThread deepcopy_on_thread(deep_copy.get()); | 395 test::TestOnThread deepcopy_on_thread(deep_copy.get()); |
| 396 deepcopy_on_thread.StartAndJoin(); | 396 deepcopy_on_thread.StartAndJoin(); |
| 397 EXPECT_TRUE(deepcopy_on_thread.can_read()); | 397 EXPECT_TRUE(deepcopy_on_thread.can_read()); |
| 398 EXPECT_TRUE(deepcopy_on_thread.can_modify()); | 398 EXPECT_TRUE(deepcopy_on_thread.can_modify()); |
| 399 EXPECT_FALSE(deep_copy->CanRead()); | 399 EXPECT_FALSE(deep_copy->CanRead()); |
| 400 EXPECT_FALSE(deep_copy->CanModify()); | 400 EXPECT_FALSE(deep_copy->CanModify()); |
| 401 | 401 |
| 402 std::unique_ptr<ImageSkia> deep_copy2(image.DeepCopy()); | 402 std::unique_ptr<ImageSkia> deep_copy2(image.DeepCopy()); |
| 403 EXPECT_EQ(1U, deep_copy2->image_reps().size()); | 403 EXPECT_EQ(1U, deep_copy2->image_reps().size()); |
| 404 // Access it from current thread so that it can't be | 404 // Access it from current thread so that it can't be |
| 405 // accessed from another thread. | 405 // accessed from another thread. |
| 406 deep_copy2->image_reps(); | 406 deep_copy2->image_reps(); |
| 407 EXPECT_FALSE(deep_copy2->IsThreadSafe()); | 407 EXPECT_FALSE(deep_copy2->IsThreadSafe()); |
| 408 test::TestOnThread deepcopy2_on_thread(deep_copy2.get()); | 408 test::TestOnThread deepcopy2_on_thread(deep_copy2.get()); |
| 409 deepcopy2_on_thread.StartAndJoin(); | 409 deepcopy2_on_thread.StartAndJoin(); |
| 410 EXPECT_FALSE(deepcopy2_on_thread.can_read()); | 410 EXPECT_FALSE(deepcopy2_on_thread.can_read()); |
| 411 EXPECT_FALSE(deepcopy2_on_thread.can_modify()); | 411 EXPECT_FALSE(deepcopy2_on_thread.can_modify()); |
| 412 EXPECT_TRUE(deep_copy2->CanRead()); | 412 EXPECT_TRUE(deep_copy2->CanRead()); |
| 413 EXPECT_TRUE(deep_copy2->CanModify()); | 413 EXPECT_TRUE(deep_copy2->CanModify()); |
| 414 | 414 |
| 415 image.DetachStorageFromThread(); | 415 image.DetachStorageFromSequence(); |
| 416 image.SetReadOnly(); | 416 image.SetReadOnly(); |
| 417 // A read-only ImageSkia with no source is thread safe. | 417 // A read-only ImageSkia with no source is thread safe. |
| 418 EXPECT_TRUE(image.IsThreadSafe()); | 418 EXPECT_TRUE(image.IsThreadSafe()); |
| 419 test::TestOnThread readonly_on_thread(&image); | 419 test::TestOnThread readonly_on_thread(&image); |
| 420 readonly_on_thread.StartAndJoin(); | 420 readonly_on_thread.StartAndJoin(); |
| 421 EXPECT_TRUE(readonly_on_thread.can_read()); | 421 EXPECT_TRUE(readonly_on_thread.can_read()); |
| 422 EXPECT_FALSE(readonly_on_thread.can_modify()); | 422 EXPECT_FALSE(readonly_on_thread.can_modify()); |
| 423 EXPECT_TRUE(image.CanRead()); | 423 EXPECT_TRUE(image.CanRead()); |
| 424 EXPECT_FALSE(image.CanModify()); | 424 EXPECT_FALSE(image.CanModify()); |
| 425 | 425 |
| 426 image.DetachStorageFromThread(); | 426 image.DetachStorageFromSequence(); |
| 427 image.MakeThreadSafe(); | 427 image.MakeThreadSafe(); |
| 428 EXPECT_TRUE(image.IsThreadSafe()); | 428 EXPECT_TRUE(image.IsThreadSafe()); |
| 429 test::TestOnThread threadsafe_on_thread(&image); | 429 test::TestOnThread threadsafe_on_thread(&image); |
| 430 threadsafe_on_thread.StartAndJoin(); | 430 threadsafe_on_thread.StartAndJoin(); |
| 431 EXPECT_TRUE(threadsafe_on_thread.can_read()); | 431 EXPECT_TRUE(threadsafe_on_thread.can_read()); |
| 432 EXPECT_FALSE(threadsafe_on_thread.can_modify()); | 432 EXPECT_FALSE(threadsafe_on_thread.can_modify()); |
| 433 EXPECT_TRUE(image.CanRead()); | 433 EXPECT_TRUE(image.CanRead()); |
| 434 EXPECT_FALSE(image.CanModify()); | 434 EXPECT_FALSE(image.CanModify()); |
| 435 } | 435 } |
| 436 | 436 |
| 437 TEST_F(ImageSkiaTest, SourceOnThreadTest) { | 437 TEST_F(ImageSkiaTest, SourceOnThreadTest) { |
| 438 ImageSkia image(new DynamicSource(Size(100, 200)), Size(100, 200)); | 438 ImageSkia image(new DynamicSource(Size(100, 200)), Size(100, 200)); |
| 439 EXPECT_FALSE(image.IsThreadSafe()); | 439 EXPECT_FALSE(image.IsThreadSafe()); |
| 440 | 440 |
| 441 test::TestOnThread image_on_thread(&image); | 441 test::TestOnThread image_on_thread(&image); |
| 442 image_on_thread.StartAndJoin(); | 442 image_on_thread.StartAndJoin(); |
| 443 // an image that was never accessed on this thread can be | 443 // an image that was never accessed on this thread can be |
| 444 // read by other thread. | 444 // read by other thread. |
| 445 EXPECT_TRUE(image_on_thread.can_read()); | 445 EXPECT_TRUE(image_on_thread.can_read()); |
| 446 EXPECT_TRUE(image_on_thread.can_modify()); | 446 EXPECT_TRUE(image_on_thread.can_modify()); |
| 447 EXPECT_FALSE(image.CanRead()); | 447 EXPECT_FALSE(image.CanRead()); |
| 448 EXPECT_FALSE(image.CanModify()); | 448 EXPECT_FALSE(image.CanModify()); |
| 449 | 449 |
| 450 image.DetachStorageFromThread(); | 450 image.DetachStorageFromSequence(); |
| 451 // An image is accessed by this thread, | 451 // An image is accessed by this thread, |
| 452 // so other thread cannot read/modify it. | 452 // so other thread cannot read/modify it. |
| 453 image.image_reps(); | 453 image.image_reps(); |
| 454 test::TestOnThread image_on_thread2(&image); | 454 test::TestOnThread image_on_thread2(&image); |
| 455 image_on_thread2.StartAndJoin(); | 455 image_on_thread2.StartAndJoin(); |
| 456 EXPECT_FALSE(image_on_thread2.can_read()); | 456 EXPECT_FALSE(image_on_thread2.can_read()); |
| 457 EXPECT_FALSE(image_on_thread2.can_modify()); | 457 EXPECT_FALSE(image_on_thread2.can_modify()); |
| 458 EXPECT_TRUE(image.CanRead()); | 458 EXPECT_TRUE(image.CanRead()); |
| 459 EXPECT_TRUE(image.CanModify()); | 459 EXPECT_TRUE(image.CanModify()); |
| 460 | 460 |
| 461 image.DetachStorageFromThread(); | 461 image.DetachStorageFromSequence(); |
| 462 image.SetReadOnly(); | 462 image.SetReadOnly(); |
| 463 EXPECT_FALSE(image.IsThreadSafe()); | 463 EXPECT_FALSE(image.IsThreadSafe()); |
| 464 test::TestOnThread readonly_on_thread(&image); | 464 test::TestOnThread readonly_on_thread(&image); |
| 465 readonly_on_thread.StartAndJoin(); | 465 readonly_on_thread.StartAndJoin(); |
| 466 EXPECT_TRUE(readonly_on_thread.can_read()); | 466 EXPECT_TRUE(readonly_on_thread.can_read()); |
| 467 EXPECT_FALSE(readonly_on_thread.can_modify()); | 467 EXPECT_FALSE(readonly_on_thread.can_modify()); |
| 468 EXPECT_FALSE(image.CanRead()); | 468 EXPECT_FALSE(image.CanRead()); |
| 469 EXPECT_FALSE(image.CanModify()); | 469 EXPECT_FALSE(image.CanModify()); |
| 470 | 470 |
| 471 image.DetachStorageFromThread(); | 471 image.DetachStorageFromSequence(); |
| 472 image.MakeThreadSafe(); | 472 image.MakeThreadSafe(); |
| 473 EXPECT_TRUE(image.IsThreadSafe()); | 473 EXPECT_TRUE(image.IsThreadSafe()); |
| 474 // Check if image reps are generated for supported scale factors. | 474 // Check if image reps are generated for supported scale factors. |
| 475 EXPECT_EQ(ImageSkia::GetSupportedScales().size(), | 475 EXPECT_EQ(ImageSkia::GetSupportedScales().size(), |
| 476 image.image_reps().size()); | 476 image.image_reps().size()); |
| 477 test::TestOnThread threadsafe_on_thread(&image); | 477 test::TestOnThread threadsafe_on_thread(&image); |
| 478 threadsafe_on_thread.StartAndJoin(); | 478 threadsafe_on_thread.StartAndJoin(); |
| 479 EXPECT_TRUE(threadsafe_on_thread.can_read()); | 479 EXPECT_TRUE(threadsafe_on_thread.can_read()); |
| 480 EXPECT_FALSE(threadsafe_on_thread.can_modify()); | 480 EXPECT_FALSE(threadsafe_on_thread.can_modify()); |
| 481 EXPECT_TRUE(image.CanRead()); | 481 EXPECT_TRUE(image.CanRead()); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 EXPECT_EQ(1U, image.image_reps().size()); | 623 EXPECT_EQ(1U, image.image_reps().size()); |
| 624 | 624 |
| 625 const ImageSkiaRep& rep12 = image.GetRepresentation(1.2f); | 625 const ImageSkiaRep& rep12 = image.GetRepresentation(1.2f); |
| 626 EXPECT_EQ(1.0f, rep12.scale()); | 626 EXPECT_EQ(1.0f, rep12.scale()); |
| 627 EXPECT_EQ("100x200", rep12.pixel_size().ToString()); | 627 EXPECT_EQ("100x200", rep12.pixel_size().ToString()); |
| 628 EXPECT_TRUE(rep12.unscaled()); | 628 EXPECT_TRUE(rep12.unscaled()); |
| 629 EXPECT_EQ(1U, image.image_reps().size()); | 629 EXPECT_EQ(1U, image.image_reps().size()); |
| 630 } | 630 } |
| 631 | 631 |
| 632 } // namespace gfx | 632 } // namespace gfx |
| OLD | NEW |