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

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: fixed cc_perftests compile error 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
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1696 matching lines...) Expand 10 before | Expand all | Expand 10 after
2609 resource_provider->SetPixels(id, pixels, rect, rect, offset); 2610 resource_provider->SetPixels(id, pixels, rect, rect, offset);
2610 2611
2611 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2612 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2612 resource_provider->DeleteResource(id); 2613 resource_provider->DeleteResource(id);
2613 2614
2614 Mock::VerifyAndClearExpectations(context); 2615 Mock::VerifyAndClearExpectations(context);
2615 2616
2616 // Same for async version. 2617 // Same for async version.
2617 id = resource_provider->CreateResource( 2618 id = resource_provider->CreateResource(
2618 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2619 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2619 resource_provider->AcquirePixelBuffer(id); 2620 resource_provider->AcquirePixelRasterBuffer(id);
2620 2621
2621 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2622 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2622 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2623 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2623 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2624 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2624 .Times(1); 2625 .Times(1);
2625 resource_provider->BeginSetPixels(id); 2626 resource_provider->BeginSetPixels(id);
2626 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2627 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id));
2627 2628
2628 resource_provider->ReleasePixelBuffer(id); 2629 resource_provider->ReleasePixelRasterBuffer(id);
2629 2630
2630 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2631 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2631 resource_provider->DeleteResource(id); 2632 resource_provider->DeleteResource(id);
2632 2633
2633 Mock::VerifyAndClearExpectations(context); 2634 Mock::VerifyAndClearExpectations(context);
2634 } 2635 }
2635 2636
2636 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageAny) { 2637 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageAny) {
2637 // Only for GL textures. 2638 // Only for GL textures.
2638 if (GetParam() != ResourceProvider::GLTexture) 2639 if (GetParam() != ResourceProvider::GLTexture)
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2725 gfx::Size size(2, 2); 2726 gfx::Size size(2, 2);
2726 ResourceFormat format = RGBA_8888; 2727 ResourceFormat format = RGBA_8888;
2727 ResourceProvider::ResourceId id = 0; 2728 ResourceProvider::ResourceId id = 0;
2728 int texture_id = 123; 2729 int texture_id = 123;
2729 2730
2730 scoped_ptr<ResourceProvider> resource_provider( 2731 scoped_ptr<ResourceProvider> resource_provider(
2731 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2732 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2732 2733
2733 id = resource_provider->CreateResource( 2734 id = resource_provider->CreateResource(
2734 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2735 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2735 resource_provider->AcquirePixelBuffer(id); 2736 resource_provider->AcquirePixelRasterBuffer(id);
2736 2737
2737 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2738 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2738 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2739 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2739 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2740 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2740 .Times(1); 2741 .Times(1);
2741 resource_provider->BeginSetPixels(id); 2742 resource_provider->BeginSetPixels(id);
2742 2743
2743 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2744 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id));
2744 2745
2745 resource_provider->ReleasePixelBuffer(id); 2746 resource_provider->ReleasePixelRasterBuffer(id);
2746 2747
2747 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2748 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2748 resource_provider->DeleteResource(id); 2749 resource_provider->DeleteResource(id);
2749 2750
2750 Mock::VerifyAndClearExpectations(context); 2751 Mock::VerifyAndClearExpectations(context);
2751 } 2752 }
2752 2753
2753 TEST_P(ResourceProviderTest, PixelBuffer_Bitmap) { 2754 TEST_P(ResourceProviderTest, PixelBuffer_Bitmap) {
2754 if (GetParam() != ResourceProvider::Bitmap) 2755 if (GetParam() != ResourceProvider::Bitmap)
2755 return; 2756 return;
2756 FakeOutputSurfaceClient output_surface_client; 2757 FakeOutputSurfaceClient output_surface_client;
2757 scoped_ptr<OutputSurface> output_surface( 2758 scoped_ptr<OutputSurface> output_surface(
2758 FakeOutputSurface::CreateSoftware(make_scoped_ptr( 2759 FakeOutputSurface::CreateSoftware(make_scoped_ptr(
2759 new SoftwareOutputDevice))); 2760 new SoftwareOutputDevice)));
2760 CHECK(output_surface->BindToClient(&output_surface_client)); 2761 CHECK(output_surface->BindToClient(&output_surface_client));
2761 2762
2762 gfx::Size size(1, 1); 2763 gfx::Size size(1, 1);
2763 ResourceFormat format = RGBA_8888; 2764 ResourceFormat format = RGBA_8888;
2764 ResourceProvider::ResourceId id = 0; 2765 ResourceProvider::ResourceId id = 0;
2765 const uint32_t kBadBeef = 0xbadbeef; 2766 const uint32_t kBadBeef = 0xbadbeef;
2766 2767
2767 scoped_ptr<ResourceProvider> resource_provider( 2768 scoped_ptr<ResourceProvider> resource_provider(
2768 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2769 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2769 2770
2770 id = resource_provider->CreateResource( 2771 id = resource_provider->CreateResource(
2771 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2772 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2772 resource_provider->AcquirePixelBuffer(id); 2773 resource_provider->AcquirePixelRasterBuffer(id);
2773 2774
2774 void* data = resource_provider->MapPixelBuffer(id); 2775 SkBitmap bitmap;
2775 ASSERT_TRUE(!!data); 2776 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
2776 memcpy(data, &kBadBeef, sizeof(kBadBeef)); 2777 bitmap.allocPixels();
2777 resource_provider->UnmapPixelBuffer(id); 2778 *(bitmap.getAddr32(0, 0)) = kBadBeef;
2779 SkCanvas* canvas = resource_provider->MapPixelRasterBuffer(id);
2780 canvas->writePixels(bitmap, 0, 0);
2781 resource_provider->UnmapPixelRasterBuffer(id);
2778 2782
2779 resource_provider->BeginSetPixels(id); 2783 resource_provider->BeginSetPixels(id);
2780 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); 2784 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id));
2781 2785
2782 resource_provider->ReleasePixelBuffer(id); 2786 resource_provider->ReleasePixelRasterBuffer(id);
2783 2787
2784 { 2788 {
2785 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 2789 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
2786 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 2790 const SkBitmap* sk_bitmap = lock.sk_bitmap();
2787 EXPECT_EQ(sk_bitmap->width(), size.width()); 2791 EXPECT_EQ(sk_bitmap->width(), size.width());
2788 EXPECT_EQ(sk_bitmap->height(), size.height()); 2792 EXPECT_EQ(sk_bitmap->height(), size.height());
2789 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); 2793 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef);
2790 } 2794 }
2791 2795
2792 resource_provider->DeleteResource(id); 2796 resource_provider->DeleteResource(id);
(...skipping 15 matching lines...) Expand all
2808 gfx::Size size(2, 2); 2812 gfx::Size size(2, 2);
2809 ResourceFormat format = RGBA_8888; 2813 ResourceFormat format = RGBA_8888;
2810 ResourceProvider::ResourceId id = 0; 2814 ResourceProvider::ResourceId id = 0;
2811 int texture_id = 123; 2815 int texture_id = 123;
2812 2816
2813 scoped_ptr<ResourceProvider> resource_provider( 2817 scoped_ptr<ResourceProvider> resource_provider(
2814 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2818 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2815 2819
2816 id = resource_provider->CreateResource( 2820 id = resource_provider->CreateResource(
2817 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2821 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2818 resource_provider->AcquirePixelBuffer(id); 2822 resource_provider->AcquirePixelRasterBuffer(id);
2819 2823
2820 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 2824 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
2821 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 2825 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
2822 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) 2826 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _))
2823 .Times(1); 2827 .Times(1);
2824 resource_provider->BeginSetPixels(id); 2828 resource_provider->BeginSetPixels(id);
2825 2829
2826 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); 2830 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1);
2827 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); 2831 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1);
2828 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); 2832 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1);
2829 resource_provider->ForceSetPixelsToComplete(id); 2833 resource_provider->ForceSetPixelsToComplete(id);
2830 2834
2831 resource_provider->ReleasePixelBuffer(id); 2835 resource_provider->ReleasePixelRasterBuffer(id);
2832 2836
2833 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 2837 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
2834 resource_provider->DeleteResource(id); 2838 resource_provider->DeleteResource(id);
2835 2839
2836 Mock::VerifyAndClearExpectations(context); 2840 Mock::VerifyAndClearExpectations(context);
2837 } 2841 }
2838 2842
2839 TEST_P(ResourceProviderTest, PixelBufferLostContext) { 2843 TEST_P(ResourceProviderTest, PixelBufferLostContext) {
2840 scoped_ptr<AllocationTrackingContext3D> context_owned( 2844 scoped_ptr<AllocationTrackingContext3D> context_owned(
2841 new NiceMock<AllocationTrackingContext3D>); 2845 new NiceMock<AllocationTrackingContext3D>);
(...skipping 11 matching lines...) Expand all
2853 2857
2854 scoped_ptr<ResourceProvider> resource_provider( 2858 scoped_ptr<ResourceProvider> resource_provider(
2855 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2859 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2856 2860
2857 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); 2861 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id));
2858 2862
2859 id = resource_provider->CreateResource( 2863 id = resource_provider->CreateResource(
2860 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2864 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2861 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 2865 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
2862 GL_INNOCENT_CONTEXT_RESET_ARB); 2866 GL_INNOCENT_CONTEXT_RESET_ARB);
2863 resource_provider->AcquirePixelBuffer(id); 2867
2864 uint8_t* buffer = resource_provider->MapPixelBuffer(id); 2868 resource_provider->AcquirePixelRasterBuffer(id);
2865 EXPECT_TRUE(buffer == NULL); 2869 SkCanvas* raster_canvas = resource_provider->MapPixelRasterBuffer(id);
2866 resource_provider->UnmapPixelBuffer(id); 2870 EXPECT_TRUE(raster_canvas == NULL);
2867 resource_provider->ReleasePixelBuffer(id); 2871 resource_provider->UnmapPixelRasterBuffer(id);
2872 resource_provider->ReleasePixelRasterBuffer(id);
2868 Mock::VerifyAndClearExpectations(context); 2873 Mock::VerifyAndClearExpectations(context);
2869 } 2874 }
2870 2875
2871 TEST_P(ResourceProviderTest, Image_GLTexture) { 2876 TEST_P(ResourceProviderTest, Image_GLTexture) {
2872 // Only for GL textures. 2877 // Only for GL textures.
2873 if (GetParam() != ResourceProvider::GLTexture) 2878 if (GetParam() != ResourceProvider::GLTexture)
2874 return; 2879 return;
2875 scoped_ptr<AllocationTrackingContext3D> context_owned( 2880 scoped_ptr<AllocationTrackingContext3D> context_owned(
2876 new StrictMock<AllocationTrackingContext3D>); 2881 new StrictMock<AllocationTrackingContext3D>);
2877 AllocationTrackingContext3D* context = context_owned.get(); 2882 AllocationTrackingContext3D* context = context_owned.get();
2878 2883
2879 FakeOutputSurfaceClient output_surface_client; 2884 FakeOutputSurfaceClient output_surface_client;
2880 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 2885 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
2881 context_owned.PassAs<TestWebGraphicsContext3D>())); 2886 context_owned.PassAs<TestWebGraphicsContext3D>()));
2882 CHECK(output_surface->BindToClient(&output_surface_client)); 2887 CHECK(output_surface->BindToClient(&output_surface_client));
2883 2888
2884 const int kWidth = 2; 2889 const int kWidth = 2;
2885 const int kHeight = 2; 2890 const int kHeight = 2;
2886 gfx::Size size(kWidth, kHeight); 2891 gfx::Size size(kWidth, kHeight);
2887 ResourceFormat format = RGBA_8888; 2892 ResourceFormat format = RGBA_8888;
2888 ResourceProvider::ResourceId id = 0; 2893 ResourceProvider::ResourceId id = 0;
2889 const unsigned kTextureId = 123u; 2894 const unsigned kTextureId = 123u;
2890 const unsigned kImageId = 234u; 2895 const unsigned kImageId = 234u;
2891 2896
2892 scoped_ptr<ResourceProvider> resource_provider( 2897 scoped_ptr<ResourceProvider> resource_provider(
2893 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2898 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2894 2899
2895 id = resource_provider->CreateResource( 2900 id = resource_provider->CreateResource(
2896 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2901 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2902
2903 const int kStride = 4;
2904 void* dummy_mapped_buffer_address = NULL;
2897 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES)) 2905 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES))
2898 .WillOnce(Return(kImageId)) 2906 .WillOnce(Return(kImageId))
2899 .RetiresOnSaturation(); 2907 .RetiresOnSaturation();
2900 resource_provider->AcquireImage(id);
2901
2902 void* dummy_mapped_buffer_address = NULL;
2903 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2904 .WillOnce(Return(dummy_mapped_buffer_address))
2905 .RetiresOnSaturation();
2906 resource_provider->MapImage(id);
2907
2908 const int kStride = 4;
2909 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, 2908 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId,
2910 GL_IMAGE_ROWBYTES_CHROMIUM, 2909 GL_IMAGE_ROWBYTES_CHROMIUM,
2911 _)) 2910 _))
2912 .WillOnce(SetArgPointee<2>(kStride)) 2911 .WillOnce(SetArgPointee<2>(kStride))
2913 .RetiresOnSaturation(); 2912 .RetiresOnSaturation();
2914 int stride = resource_provider->GetImageStride(id); 2913 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2915 EXPECT_EQ(kStride, stride); 2914 .WillOnce(Return(dummy_mapped_buffer_address))
2915 .RetiresOnSaturation();
2916 resource_provider->MapImageRasterBuffer(id);
2916 2917
2917 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) 2918 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
2918 .Times(1) 2919 .Times(1)
2919 .RetiresOnSaturation(); 2920 .RetiresOnSaturation();
2920 resource_provider->UnmapImage(id); 2921 resource_provider->UnmapImageRasterBuffer(id);
2921 2922
2922 EXPECT_CALL(*context, NextTextureId()) 2923 EXPECT_CALL(*context, NextTextureId())
2923 .WillOnce(Return(kTextureId)) 2924 .WillOnce(Return(kTextureId))
2924 .RetiresOnSaturation(); 2925 .RetiresOnSaturation();
2925 // Once in CreateTextureId and once in BindForSampling 2926 // Once in CreateTextureId and once in BindForSampling
2926 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) 2927 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2)
2927 .RetiresOnSaturation(); 2928 .RetiresOnSaturation();
2928 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2929 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2929 .Times(1) 2930 .Times(1)
2930 .RetiresOnSaturation(); 2931 .RetiresOnSaturation();
2931 { 2932 {
2932 ResourceProvider::ScopedSamplerGL lock_gl( 2933 ResourceProvider::ScopedSamplerGL lock_gl(
2933 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); 2934 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
2934 EXPECT_EQ(kTextureId, lock_gl.texture_id()); 2935 EXPECT_EQ(kTextureId, lock_gl.texture_id());
2935 } 2936 }
2936 2937
2938 EXPECT_CALL(
2939 *context,
2940 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _))
2941 .WillOnce(SetArgPointee<2>(kStride))
2942 .RetiresOnSaturation();
2937 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE)) 2943 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE))
2938 .WillOnce(Return(dummy_mapped_buffer_address)) 2944 .WillOnce(Return(dummy_mapped_buffer_address))
2939 .RetiresOnSaturation(); 2945 .RetiresOnSaturation();
2940 resource_provider->MapImage(id); 2946 resource_provider->MapImageRasterBuffer(id);
2941 2947
2942 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) 2948 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
2943 .Times(1) 2949 .Times(1)
2944 .RetiresOnSaturation(); 2950 .RetiresOnSaturation();
2945 resource_provider->UnmapImage(id); 2951 resource_provider->UnmapImageRasterBuffer(id);
2946 2952
2947 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) 2953 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1)
2948 .RetiresOnSaturation(); 2954 .RetiresOnSaturation();
2949 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2955 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2950 .Times(1) 2956 .Times(1)
2951 .RetiresOnSaturation(); 2957 .RetiresOnSaturation();
2952 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) 2958 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
2953 .Times(1) 2959 .Times(1)
2954 .RetiresOnSaturation(); 2960 .RetiresOnSaturation();
2955 EXPECT_CALL(*context, RetireTextureId(kTextureId)) 2961 EXPECT_CALL(*context, RetireTextureId(kTextureId))
2956 .Times(1) 2962 .Times(1)
2957 .RetiresOnSaturation(); 2963 .RetiresOnSaturation();
2958 { 2964 {
2959 ResourceProvider::ScopedSamplerGL lock_gl( 2965 ResourceProvider::ScopedSamplerGL lock_gl(
2960 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); 2966 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
2961 EXPECT_EQ(kTextureId, lock_gl.texture_id()); 2967 EXPECT_EQ(kTextureId, lock_gl.texture_id());
2962 } 2968 }
2963 2969
2964 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) 2970 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId))
2965 .Times(1) 2971 .Times(1)
2966 .RetiresOnSaturation(); 2972 .RetiresOnSaturation();
2967 resource_provider->ReleaseImage(id);
2968 } 2973 }
2969 2974
2970 TEST_P(ResourceProviderTest, Image_Bitmap) { 2975 TEST_P(ResourceProviderTest, Image_Bitmap) {
2971 if (GetParam() != ResourceProvider::Bitmap) 2976 if (GetParam() != ResourceProvider::Bitmap)
2972 return; 2977 return;
2973 FakeOutputSurfaceClient output_surface_client; 2978 FakeOutputSurfaceClient output_surface_client;
2974 scoped_ptr<OutputSurface> output_surface( 2979 scoped_ptr<OutputSurface> output_surface(
2975 FakeOutputSurface::CreateSoftware(make_scoped_ptr( 2980 FakeOutputSurface::CreateSoftware(make_scoped_ptr(
2976 new SoftwareOutputDevice))); 2981 new SoftwareOutputDevice)));
2977 CHECK(output_surface->BindToClient(&output_surface_client)); 2982 CHECK(output_surface->BindToClient(&output_surface_client));
2978 2983
2979 gfx::Size size(1, 1); 2984 gfx::Size size(1, 1);
2980 ResourceFormat format = RGBA_8888; 2985 ResourceFormat format = RGBA_8888;
2981 ResourceProvider::ResourceId id = 0; 2986 ResourceProvider::ResourceId id = 0;
2982 const uint32_t kBadBeef = 0xbadbeef; 2987 const uint32_t kBadBeef = 0xbadbeef;
2983 2988
2984 scoped_ptr<ResourceProvider> resource_provider( 2989 scoped_ptr<ResourceProvider> resource_provider(
2985 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2990 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2986 2991
2987 id = resource_provider->CreateResource( 2992 id = resource_provider->CreateResource(
2988 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); 2993 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
2989 resource_provider->AcquireImage(id);
2990 2994
2991 const int kStride = 0; 2995 SkBitmap bitmap;
2992 int stride = resource_provider->GetImageStride(id); 2996 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
2993 EXPECT_EQ(kStride, stride); 2997 bitmap.allocPixels();
2994 2998 *(bitmap.getAddr32(0, 0)) = kBadBeef;
2995 void* data = resource_provider->MapImage(id); 2999 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(id);
2996 ASSERT_TRUE(!!data); 3000 ASSERT_TRUE(!!canvas);
2997 memcpy(data, &kBadBeef, sizeof(kBadBeef)); 3001 canvas->writePixels(bitmap, 0, 0);
2998 resource_provider->UnmapImage(id); 3002 resource_provider->UnmapImageRasterBuffer(id);
2999 3003
3000 { 3004 {
3001 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 3005 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
3002 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 3006 const SkBitmap* sk_bitmap = lock.sk_bitmap();
3003 EXPECT_EQ(sk_bitmap->width(), size.width()); 3007 EXPECT_EQ(sk_bitmap->width(), size.width());
3004 EXPECT_EQ(sk_bitmap->height(), size.height()); 3008 EXPECT_EQ(sk_bitmap->height(), size.height());
3005 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); 3009 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef);
3006 } 3010 }
3007 3011
3008 resource_provider->ReleaseImage(id);
3009 resource_provider->DeleteResource(id); 3012 resource_provider->DeleteResource(id);
3010 } 3013 }
3011 3014
3012 void InitializeGLAndCheck(ContextSharedData* shared_data, 3015 void InitializeGLAndCheck(ContextSharedData* shared_data,
3013 ResourceProvider* resource_provider, 3016 ResourceProvider* resource_provider,
3014 FakeOutputSurface* output_surface) { 3017 FakeOutputSurface* output_surface) {
3015 scoped_ptr<ResourceProviderContext> context_owned = 3018 scoped_ptr<ResourceProviderContext> context_owned =
3016 ResourceProviderContext::Create(shared_data); 3019 ResourceProviderContext::Create(shared_data);
3017 ResourceProviderContext* context = context_owned.get(); 3020 ResourceProviderContext* context = context_owned.get();
3018 3021
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
3186 resource_provider->AllocateForTesting(id); 3189 resource_provider->AllocateForTesting(id);
3187 Mock::VerifyAndClearExpectations(context); 3190 Mock::VerifyAndClearExpectations(context);
3188 3191
3189 DCHECK_EQ(10u, context->PeekTextureId()); 3192 DCHECK_EQ(10u, context->PeekTextureId());
3190 resource_provider->DeleteResource(id); 3193 resource_provider->DeleteResource(id);
3191 } 3194 }
3192 } 3195 }
3193 3196
3194 } // namespace 3197 } // namespace
3195 } // namespace cc 3198 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698