Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: cc/resources/resource_provider_unittest.cc

Issue 157293002: cc: Refactor WorkerPoolTaskClient::AcquireBufferForRaster (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updated unittests Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 gfx::Rect rect(size); 647 gfx::Rect rect(size);
648 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); 648 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d());
649 649
650 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 650 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource(
651 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 651 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
652 uint8_t data2[4] = { 5, 5, 5, 5 }; 652 uint8_t data2[4] = { 5, 5, 5, 5 };
653 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); 653 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d());
654 654
655 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( 655 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource(
656 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 656 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
657 child_resource_provider_->AcquireImage(id3); 657 child_resource_provider_->MapImageRasterBuffer(id3);
658 child_resource_provider_->MapImage(id3); 658 child_resource_provider_->UnmapImageRasterBuffer(id3);
659 child_resource_provider_->UnmapImage(id3);
660 659
661 GLuint external_texture_id = child_context_->createExternalTexture(); 660 GLuint external_texture_id = child_context_->createExternalTexture();
662 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); 661 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id);
663 662
664 gpu::Mailbox external_mailbox; 663 gpu::Mailbox external_mailbox;
665 child_context_->genMailboxCHROMIUM(external_mailbox.name); 664 child_context_->genMailboxCHROMIUM(external_mailbox.name);
666 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, 665 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES,
667 external_mailbox.name); 666 external_mailbox.name);
668 const GLuint external_sync_point = child_context_->insertSyncPoint(); 667 const GLuint external_sync_point = child_context_->insertSyncPoint();
669 ResourceProvider::ResourceId id4 = 668 ResourceProvider::ResourceId id4 =
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 gfx::Rect rect(size); 887 gfx::Rect rect(size);
889 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); 888 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d());
890 889
891 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 890 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource(
892 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 891 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
893 uint8_t data2[4] = { 5, 5, 5, 5 }; 892 uint8_t data2[4] = { 5, 5, 5, 5 };
894 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); 893 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d());
895 894
896 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( 895 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource(
897 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 896 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
898 child_resource_provider_->AcquireImage(id3);
899 void* data = child_resource_provider_->MapImage(id3);
900 uint8_t data3[4] = { 6, 7, 8, 9 }; 897 uint8_t data3[4] = { 6, 7, 8, 9 };
901 memcpy(data, data3, sizeof(data3)); 898 SkBitmap bitmap3;
902 child_resource_provider_->UnmapImage(id3); 899 bitmap3.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
900 bitmap3.setPixels(data3);
901 SkCanvas* raster_canvas = child_resource_provider_->MapImageRasterBuffer(id3);
902 raster_canvas->writePixels(bitmap3, 0, 0);
903 child_resource_provider_->UnmapImageRasterBuffer(id3);
903 904
904 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); 905 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
905 shared_memory->CreateAndMapAnonymous(1); 906 shared_memory->CreateAndMapAnonymous(1);
906 base::SharedMemory* shared_memory_ptr = shared_memory.get(); 907 base::SharedMemory* shared_memory_ptr = shared_memory.get();
907 ResourceProvider::ResourceId id4 = 908 ResourceProvider::ResourceId id4 =
908 child_resource_provider_->CreateResourceFromTextureMailbox( 909 child_resource_provider_->CreateResourceFromTextureMailbox(
909 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), 910 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)),
910 SingleReleaseCallback::Create(base::Bind( 911 SingleReleaseCallback::Create(base::Bind(
911 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); 912 &SharedMemoryReleaseCallback, base::Passed(&shared_memory))));
912 913
(...skipping 1691 matching lines...) Expand 10 before | Expand all | Expand 10 after
2604 resource_provider->SetPixels(id, pixels, rect, rect, offset); 2605 resource_provider->SetPixels(id, pixels, rect, rect, offset);
2605 2606
2606 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2607 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2607 resource_provider->DeleteResource(id); 2608 resource_provider->DeleteResource(id);
2608 2609
2609 Mock::VerifyAndClearExpectations(context); 2610 Mock::VerifyAndClearExpectations(context);
2610 2611
2611 // Same for async version. 2612 // Same for async version.
2612 id = resource_provider->CreateResource( 2613 id = resource_provider->CreateResource(
2613 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2614 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2614 resource_provider->AcquirePixelBuffer(id); 2615 resource_provider->AcquirePixelRasterBuffer(id);
2615 2616
2616 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2617 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2617 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2618 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2618 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2619 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2619 .Times(1); 2620 .Times(1);
2620 resource_provider->BeginSetPixels(id); 2621 resource_provider->BeginSetPixels(id);
2621 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2622 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id));
2622 2623
2623 resource_provider->ReleasePixelBuffer(id); 2624 resource_provider->ReleasePixelRasterBuffer(id);
2624 2625
2625 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2626 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2626 resource_provider->DeleteResource(id); 2627 resource_provider->DeleteResource(id);
2627 2628
2628 Mock::VerifyAndClearExpectations(context); 2629 Mock::VerifyAndClearExpectations(context);
2629 } 2630 }
2630 2631
2631 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageAny) { 2632 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageAny) {
2632 // Only for GL textures. 2633 // Only for GL textures.
2633 if (GetParam() != ResourceProvider::GLTexture) 2634 if (GetParam() != ResourceProvider::GLTexture)
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2720 gfx::Size size(2, 2); 2721 gfx::Size size(2, 2);
2721 ResourceFormat format = RGBA_8888; 2722 ResourceFormat format = RGBA_8888;
2722 ResourceProvider::ResourceId id = 0; 2723 ResourceProvider::ResourceId id = 0;
2723 int texture_id = 123; 2724 int texture_id = 123;
2724 2725
2725 scoped_ptr<ResourceProvider> resource_provider( 2726 scoped_ptr<ResourceProvider> resource_provider(
2726 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2727 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2727 2728
2728 id = resource_provider->CreateResource( 2729 id = resource_provider->CreateResource(
2729 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2730 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2730 resource_provider->AcquirePixelBuffer(id); 2731 resource_provider->AcquirePixelRasterBuffer(id);
2731 2732
2732 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2733 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2733 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2734 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2734 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2735 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2735 .Times(1); 2736 .Times(1);
2736 resource_provider->BeginSetPixels(id); 2737 resource_provider->BeginSetPixels(id);
2737 2738
2738 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2739 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id));
2739 2740
2740 resource_provider->ReleasePixelBuffer(id); 2741 resource_provider->ReleasePixelRasterBuffer(id);
2741 2742
2742 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2743 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2743 resource_provider->DeleteResource(id); 2744 resource_provider->DeleteResource(id);
2744 2745
2745 Mock::VerifyAndClearExpectations(context); 2746 Mock::VerifyAndClearExpectations(context);
2746 } 2747 }
2747 2748
2748 TEST_P(ResourceProviderTest, PixelBuffer_Bitmap) { 2749 TEST_P(ResourceProviderTest, PixelBuffer_Bitmap) {
2749 if (GetParam() != ResourceProvider::Bitmap) 2750 if (GetParam() != ResourceProvider::Bitmap)
2750 return; 2751 return;
2751 FakeOutputSurfaceClient output_surface_client; 2752 FakeOutputSurfaceClient output_surface_client;
2752 scoped_ptr<OutputSurface> output_surface( 2753 scoped_ptr<OutputSurface> output_surface(
2753 FakeOutputSurface::CreateSoftware(make_scoped_ptr( 2754 FakeOutputSurface::CreateSoftware(make_scoped_ptr(
2754 new SoftwareOutputDevice))); 2755 new SoftwareOutputDevice)));
2755 CHECK(output_surface->BindToClient(&output_surface_client)); 2756 CHECK(output_surface->BindToClient(&output_surface_client));
2756 2757
2757 gfx::Size size(1, 1); 2758 gfx::Size size(1, 1);
2758 ResourceFormat format = RGBA_8888; 2759 ResourceFormat format = RGBA_8888;
2759 ResourceProvider::ResourceId id = 0; 2760 ResourceProvider::ResourceId id = 0;
2760 const uint32_t kBadBeef = 0xbadbeef; 2761 const uint32_t kBadBeef = 0xbadbeef;
2761 2762
2762 scoped_ptr<ResourceProvider> resource_provider( 2763 scoped_ptr<ResourceProvider> resource_provider(
2763 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2764 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2764 2765
2765 id = resource_provider->CreateResource( 2766 id = resource_provider->CreateResource(
2766 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2767 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2767 resource_provider->AcquirePixelBuffer(id); 2768 resource_provider->AcquirePixelRasterBuffer(id);
2768 2769
2769 void* data = resource_provider->MapPixelBuffer(id); 2770 SkBitmap bitmap;
2770 ASSERT_TRUE(!!data); 2771 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
2771 memcpy(data, &kBadBeef, sizeof(kBadBeef)); 2772 bitmap.allocPixels();
2772 resource_provider->UnmapPixelBuffer(id); 2773 *(bitmap.getAddr32(0, 0)) = kBadBeef;
2774 SkCanvas* canvas = resource_provider->MapPixelRasterBuffer(id);
2775 canvas->writePixels(bitmap, 0, 0);
2776 resource_provider->UnmapPixelRasterBuffer(id);
2773 2777
2774 resource_provider->BeginSetPixels(id); 2778 resource_provider->BeginSetPixels(id);
2775 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2779 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id));
2776 2780
2777 resource_provider->ReleasePixelBuffer(id); 2781 resource_provider->ReleasePixelRasterBuffer(id);
2778 2782
2779 { 2783 {
2780 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 2784 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
2781 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 2785 const SkBitmap* sk_bitmap = lock.sk_bitmap();
2782 EXPECT_EQ(sk_bitmap->width(), size.width()); 2786 EXPECT_EQ(sk_bitmap->width(), size.width());
2783 EXPECT_EQ(sk_bitmap->height(), size.height()); 2787 EXPECT_EQ(sk_bitmap->height(), size.height());
2784 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); 2788 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef);
2785 } 2789 }
2786 2790
2787 resource_provider->DeleteResource(id); 2791 resource_provider->DeleteResource(id);
(...skipping 15 matching lines...) Expand all
2803 gfx::Size size(2, 2); 2807 gfx::Size size(2, 2);
2804 ResourceFormat format = RGBA_8888; 2808 ResourceFormat format = RGBA_8888;
2805 ResourceProvider::ResourceId id = 0; 2809 ResourceProvider::ResourceId id = 0;
2806 int texture_id = 123; 2810 int texture_id = 123;
2807 2811
2808 scoped_ptr<ResourceProvider> resource_provider( 2812 scoped_ptr<ResourceProvider> resource_provider(
2809 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2813 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2810 2814
2811 id = resource_provider->CreateResource( 2815 id = resource_provider->CreateResource(
2812 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2816 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2813 resource_provider->AcquirePixelBuffer(id); 2817 resource_provider->AcquirePixelRasterBuffer(id);
2814 2818
2815 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2819 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2816 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2820 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2817 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2821 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2818 .Times(1); 2822 .Times(1);
2819 resource_provider->BeginSetPixels(id); 2823 resource_provider->BeginSetPixels(id);
2820 2824
2821 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); 2825 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1);
2822 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); 2826 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1);
2823 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); 2827 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1);
2824 resource_provider->ForceSetPixelsToComplete(id); 2828 resource_provider->ForceSetPixelsToComplete(id);
2825 2829
2826 resource_provider->ReleasePixelBuffer(id); 2830 resource_provider->ReleasePixelRasterBuffer(id);
2827 2831
2828 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2832 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2829 resource_provider->DeleteResource(id); 2833 resource_provider->DeleteResource(id);
2830 2834
2831 Mock::VerifyAndClearExpectations(context); 2835 Mock::VerifyAndClearExpectations(context);
2832 } 2836 }
2833 2837
2834 TEST_P(ResourceProviderTest, PixelBufferLostContext) { 2838 TEST_P(ResourceProviderTest, PixelBufferLostContext) {
2835 scoped_ptr<AllocationTrackingContext3D> context_owned( 2839 scoped_ptr<AllocationTrackingContext3D> context_owned(
2836 new NiceMock<AllocationTrackingContext3D>); 2840 new NiceMock<AllocationTrackingContext3D>);
(...skipping 11 matching lines...) Expand all
2848 2852
2849 scoped_ptr<ResourceProvider> resource_provider( 2853 scoped_ptr<ResourceProvider> resource_provider(
2850 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2854 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2851 2855
2852 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); 2856 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id));
2853 2857
2854 id = resource_provider->CreateResource( 2858 id = resource_provider->CreateResource(
2855 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2859 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2856 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 2860 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
2857 GL_INNOCENT_CONTEXT_RESET_ARB); 2861 GL_INNOCENT_CONTEXT_RESET_ARB);
2858 resource_provider->AcquirePixelBuffer(id); 2862
2859 uint8_t* buffer = resource_provider->MapPixelBuffer(id); 2863 resource_provider->AcquirePixelRasterBuffer(id);
2860 EXPECT_TRUE(buffer == NULL); 2864 SkCanvas* raster_canvas = resource_provider->MapPixelRasterBuffer(id);
2861 resource_provider->UnmapPixelBuffer(id); 2865 EXPECT_TRUE(raster_canvas == NULL);
2862 resource_provider->ReleasePixelBuffer(id); 2866 resource_provider->UnmapPixelRasterBuffer(id);
2867 resource_provider->ReleasePixelRasterBuffer(id);
2863 Mock::VerifyAndClearExpectations(context); 2868 Mock::VerifyAndClearExpectations(context);
2864 } 2869 }
2865 2870
2866 TEST_P(ResourceProviderTest, Image_GLTexture) { 2871 TEST_P(ResourceProviderTest, Image_GLTexture) {
2867 // Only for GL textures. 2872 // Only for GL textures.
2868 if (GetParam() != ResourceProvider::GLTexture) 2873 if (GetParam() != ResourceProvider::GLTexture)
2869 return; 2874 return;
2870 scoped_ptr<AllocationTrackingContext3D> context_owned( 2875 scoped_ptr<AllocationTrackingContext3D> context_owned(
2871 new StrictMock<AllocationTrackingContext3D>); 2876 new StrictMock<AllocationTrackingContext3D>);
2872 AllocationTrackingContext3D* context = context_owned.get(); 2877 AllocationTrackingContext3D* context = context_owned.get();
2873 2878
2874 FakeOutputSurfaceClient output_surface_client; 2879 FakeOutputSurfaceClient output_surface_client;
2875 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 2880 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
2876 context_owned.PassAs<TestWebGraphicsContext3D>())); 2881 context_owned.PassAs<TestWebGraphicsContext3D>()));
2877 CHECK(output_surface->BindToClient(&output_surface_client)); 2882 CHECK(output_surface->BindToClient(&output_surface_client));
2878 2883
2879 const int kWidth = 2; 2884 const int kWidth = 2;
2880 const int kHeight = 2; 2885 const int kHeight = 2;
2881 gfx::Size size(kWidth, kHeight); 2886 gfx::Size size(kWidth, kHeight);
2882 ResourceFormat format = RGBA_8888; 2887 ResourceFormat format = RGBA_8888;
2883 ResourceProvider::ResourceId id = 0; 2888 ResourceProvider::ResourceId id = 0;
2884 const unsigned kTextureId = 123u; 2889 const unsigned kTextureId = 123u;
2885 const unsigned kImageId = 234u; 2890 const unsigned kImageId = 234u;
2886 2891
2887 scoped_ptr<ResourceProvider> resource_provider( 2892 scoped_ptr<ResourceProvider> resource_provider(
2888 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2893 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2889 2894
2890 id = resource_provider->CreateResource( 2895 id = resource_provider->CreateResource(
2891 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2896 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2897
2898 const int kStride = 4;
2899 void* dummy_mapped_buffer_address = NULL;
2892 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES)) 2900 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES))
2893 .WillOnce(Return(kImageId)) 2901 .WillOnce(Return(kImageId))
2894 .RetiresOnSaturation(); 2902 .RetiresOnSaturation();
2895 resource_provider->AcquireImage(id);
2896
2897 void* dummy_mapped_buffer_address = NULL;
2898 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2899 .WillOnce(Return(dummy_mapped_buffer_address))
2900 .RetiresOnSaturation();
2901 resource_provider->MapImage(id);
2902
2903 const int kStride = 4;
2904 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, 2903 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId,
2905 GL_IMAGE_ROWBYTES_CHROMIUM, 2904 GL_IMAGE_ROWBYTES_CHROMIUM,
2906 _)) 2905 _))
2907 .WillOnce(SetArgPointee<2>(kStride)) 2906 .WillOnce(SetArgPointee<2>(kStride))
2908 .RetiresOnSaturation(); 2907 .RetiresOnSaturation();
2909 int stride = resource_provider->GetImageStride(id); 2908 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2910 EXPECT_EQ(kStride, stride); 2909 .WillOnce(Return(dummy_mapped_buffer_address))
2910 .RetiresOnSaturation();
2911 resource_provider->MapImageRasterBuffer(id);
2911 2912
2912 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) 2913 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
2913 .Times(1) 2914 .Times(1)
2914 .RetiresOnSaturation(); 2915 .RetiresOnSaturation();
2915 resource_provider->UnmapImage(id); 2916 resource_provider->UnmapImageRasterBuffer(id);
2916 2917
2917 EXPECT_CALL(*context, NextTextureId()) 2918 EXPECT_CALL(*context, NextTextureId())
2918 .WillOnce(Return(kTextureId)) 2919 .WillOnce(Return(kTextureId))
2919 .RetiresOnSaturation(); 2920 .RetiresOnSaturation();
2920 // Once in CreateTextureId and once in BindForSampling 2921 // Once in CreateTextureId and once in BindForSampling
2921 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) 2922 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2)
2922 .RetiresOnSaturation(); 2923 .RetiresOnSaturation();
2923 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2924 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2924 .Times(1) 2925 .Times(1)
2925 .RetiresOnSaturation(); 2926 .RetiresOnSaturation();
2926 { 2927 {
2927 ResourceProvider::ScopedSamplerGL lock_gl( 2928 ResourceProvider::ScopedSamplerGL lock_gl(
2928 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); 2929 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
2929 EXPECT_EQ(kTextureId, lock_gl.texture_id()); 2930 EXPECT_EQ(kTextureId, lock_gl.texture_id());
2930 } 2931 }
2931 2932
2933 EXPECT_CALL(
2934 *context,
2935 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _))
2936 .WillOnce(SetArgPointee<2>(kStride))
2937 .RetiresOnSaturation();
2932 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE)) 2938 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2933 .WillOnce(Return(dummy_mapped_buffer_address)) 2939 .WillOnce(Return(dummy_mapped_buffer_address))
2934 .RetiresOnSaturation(); 2940 .RetiresOnSaturation();
2935 resource_provider->MapImage(id); 2941 resource_provider->MapImageRasterBuffer(id);
2936 2942
2937 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) 2943 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
2938 .Times(1) 2944 .Times(1)
2939 .RetiresOnSaturation(); 2945 .RetiresOnSaturation();
2940 resource_provider->UnmapImage(id); 2946 resource_provider->UnmapImageRasterBuffer(id);
2941 2947
2942 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) 2948 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1)
2943 .RetiresOnSaturation(); 2949 .RetiresOnSaturation();
2944 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2950 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2945 .Times(1) 2951 .Times(1)
2946 .RetiresOnSaturation(); 2952 .RetiresOnSaturation();
2947 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2953 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2948 .Times(1) 2954 .Times(1)
2949 .RetiresOnSaturation(); 2955 .RetiresOnSaturation();
2950 EXPECT_CALL(*context, RetireTextureId(kTextureId)) 2956 EXPECT_CALL(*context, RetireTextureId(kTextureId))
2951 .Times(1) 2957 .Times(1)
2952 .RetiresOnSaturation(); 2958 .RetiresOnSaturation();
2953 { 2959 {
2954 ResourceProvider::ScopedSamplerGL lock_gl( 2960 ResourceProvider::ScopedSamplerGL lock_gl(
2955 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); 2961 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
2956 EXPECT_EQ(kTextureId, lock_gl.texture_id()); 2962 EXPECT_EQ(kTextureId, lock_gl.texture_id());
2957 } 2963 }
2958 2964
2959 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) 2965 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId))
2960 .Times(1) 2966 .Times(1)
2961 .RetiresOnSaturation(); 2967 .RetiresOnSaturation();
2962 resource_provider->ReleaseImage(id);
2963 } 2968 }
2964 2969
2965 TEST_P(ResourceProviderTest, Image_Bitmap) { 2970 TEST_P(ResourceProviderTest, Image_Bitmap) {
2966 if (GetParam() != ResourceProvider::Bitmap) 2971 if (GetParam() != ResourceProvider::Bitmap)
2967 return; 2972 return;
2968 FakeOutputSurfaceClient output_surface_client; 2973 FakeOutputSurfaceClient output_surface_client;
2969 scoped_ptr<OutputSurface> output_surface( 2974 scoped_ptr<OutputSurface> output_surface(
2970 FakeOutputSurface::CreateSoftware(make_scoped_ptr( 2975 FakeOutputSurface::CreateSoftware(make_scoped_ptr(
2971 new SoftwareOutputDevice))); 2976 new SoftwareOutputDevice)));
2972 CHECK(output_surface->BindToClient(&output_surface_client)); 2977 CHECK(output_surface->BindToClient(&output_surface_client));
2973 2978
2974 gfx::Size size(1, 1); 2979 gfx::Size size(1, 1);
2975 ResourceFormat format = RGBA_8888; 2980 ResourceFormat format = RGBA_8888;
2976 ResourceProvider::ResourceId id = 0; 2981 ResourceProvider::ResourceId id = 0;
2977 const uint32_t kBadBeef = 0xbadbeef; 2982 const uint32_t kBadBeef = 0xbadbeef;
2978 2983
2979 scoped_ptr<ResourceProvider> resource_provider( 2984 scoped_ptr<ResourceProvider> resource_provider(
2980 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2985 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2981 2986
2982 id = resource_provider->CreateResource( 2987 id = resource_provider->CreateResource(
2983 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2988 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2984 resource_provider->AcquireImage(id);
2985 2989
2986 const int kStride = 0; 2990 SkBitmap bitmap;
2987 int stride = resource_provider->GetImageStride(id); 2991 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
2988 EXPECT_EQ(kStride, stride); 2992 bitmap.allocPixels();
2989 2993 *(bitmap.getAddr32(0, 0)) = kBadBeef;
2990 void* data = resource_provider->MapImage(id); 2994 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(id);
2991 ASSERT_TRUE(!!data); 2995 ASSERT_TRUE(!!canvas);
2992 memcpy(data, &kBadBeef, sizeof(kBadBeef)); 2996 canvas->writePixels(bitmap, 0, 0);
2993 resource_provider->UnmapImage(id); 2997 resource_provider->UnmapImageRasterBuffer(id);
2994 2998
2995 { 2999 {
2996 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 3000 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
2997 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 3001 const SkBitmap* sk_bitmap = lock.sk_bitmap();
2998 EXPECT_EQ(sk_bitmap->width(), size.width()); 3002 EXPECT_EQ(sk_bitmap->width(), size.width());
2999 EXPECT_EQ(sk_bitmap->height(), size.height()); 3003 EXPECT_EQ(sk_bitmap->height(), size.height());
3000 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); 3004 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef);
3001 } 3005 }
3002 3006
3003 resource_provider->ReleaseImage(id);
3004 resource_provider->DeleteResource(id); 3007 resource_provider->DeleteResource(id);
3005 } 3008 }
3006 3009
3007 void InitializeGLAndCheck(ContextSharedData* shared_data, 3010 void InitializeGLAndCheck(ContextSharedData* shared_data,
3008 ResourceProvider* resource_provider, 3011 ResourceProvider* resource_provider,
3009 FakeOutputSurface* output_surface) { 3012 FakeOutputSurface* output_surface) {
3010 scoped_ptr<ResourceProviderContext> context_owned = 3013 scoped_ptr<ResourceProviderContext> context_owned =
3011 ResourceProviderContext::Create(shared_data); 3014 ResourceProviderContext::Create(shared_data);
3012 ResourceProviderContext* context = context_owned.get(); 3015 ResourceProviderContext* context = context_owned.get();
3013 3016
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
3181 resource_provider->AllocateForTesting(id); 3184 resource_provider->AllocateForTesting(id);
3182 Mock::VerifyAndClearExpectations(context); 3185 Mock::VerifyAndClearExpectations(context);
3183 3186
3184 DCHECK_EQ(10u, context->PeekTextureId()); 3187 DCHECK_EQ(10u, context->PeekTextureId());
3185 resource_provider->DeleteResource(id); 3188 resource_provider->DeleteResource(id);
3186 } 3189 }
3187 } 3190 }
3188 3191
3189 } // namespace 3192 } // namespace
3190 } // namespace cc 3193 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698