OLD | NEW |
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 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 gfx::Rect rect(size); | 603 gfx::Rect rect(size); |
604 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 604 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
605 | 605 |
606 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 606 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
607 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 607 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
608 uint8_t data2[4] = { 5, 5, 5, 5 }; | 608 uint8_t data2[4] = { 5, 5, 5, 5 }; |
609 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 609 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
610 | 610 |
611 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 611 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
612 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 612 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
613 child_resource_provider_->MapImageRasterBuffer(id3); | 613 child_resource_provider_->AcquireImageRasterBuffer(id3); |
614 child_resource_provider_->UnmapImageRasterBuffer(id3); | 614 child_resource_provider_->ReleaseImageRasterBuffer(id3); |
615 | 615 |
616 GLuint external_texture_id = child_context_->createExternalTexture(); | 616 GLuint external_texture_id = child_context_->createExternalTexture(); |
617 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); | 617 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); |
618 | 618 |
619 gpu::Mailbox external_mailbox; | 619 gpu::Mailbox external_mailbox; |
620 child_context_->genMailboxCHROMIUM(external_mailbox.name); | 620 child_context_->genMailboxCHROMIUM(external_mailbox.name); |
621 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, | 621 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, |
622 external_mailbox.name); | 622 external_mailbox.name); |
623 const GLuint external_sync_point = child_context_->insertSyncPoint(); | 623 const GLuint external_sync_point = child_context_->insertSyncPoint(); |
624 ResourceProvider::ResourceId id4 = | 624 ResourceProvider::ResourceId id4 = |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 | 952 |
953 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 953 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
954 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 954 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
955 uint8_t data2[4] = { 5, 5, 5, 5 }; | 955 uint8_t data2[4] = { 5, 5, 5, 5 }; |
956 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 956 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
957 | 957 |
958 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 958 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
959 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 959 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
960 uint8_t data3[4] = { 6, 7, 8, 9 }; | 960 uint8_t data3[4] = { 6, 7, 8, 9 }; |
961 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); | 961 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); |
962 SkCanvas* raster_canvas = child_resource_provider_->MapImageRasterBuffer(id3); | 962 RasterBuffer* raster_buffer = |
963 raster_canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); | 963 child_resource_provider_->AcquireImageRasterBuffer(id3); |
964 child_resource_provider_->UnmapImageRasterBuffer(id3); | 964 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
| 965 canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); |
| 966 raster_buffer->ReleaseSkCanvas(canvas); |
| 967 canvas.clear(); |
| 968 child_resource_provider_->ReleaseImageRasterBuffer(id3); |
965 | 969 |
966 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 970 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
967 shared_memory->CreateAndMapAnonymous(1); | 971 shared_memory->CreateAndMapAnonymous(1); |
968 base::SharedMemory* shared_memory_ptr = shared_memory.get(); | 972 base::SharedMemory* shared_memory_ptr = shared_memory.get(); |
969 ResourceProvider::ResourceId id4 = | 973 ResourceProvider::ResourceId id4 = |
970 child_resource_provider_->CreateResourceFromTextureMailbox( | 974 child_resource_provider_->CreateResourceFromTextureMailbox( |
971 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), | 975 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), |
972 SingleReleaseCallback::Create(base::Bind( | 976 SingleReleaseCallback::Create(base::Bind( |
973 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); | 977 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); |
974 | 978 |
(...skipping 1942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2917 resource_provider->SetPixels(id, pixels, rect, rect, offset); | 2921 resource_provider->SetPixels(id, pixels, rect, rect, offset); |
2918 | 2922 |
2919 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 2923 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
2920 resource_provider->DeleteResource(id); | 2924 resource_provider->DeleteResource(id); |
2921 | 2925 |
2922 Mock::VerifyAndClearExpectations(context); | 2926 Mock::VerifyAndClearExpectations(context); |
2923 | 2927 |
2924 // Same for async version. | 2928 // Same for async version. |
2925 id = resource_provider->CreateResource( | 2929 id = resource_provider->CreateResource( |
2926 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 2930 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2927 resource_provider->AcquirePixelRasterBuffer(id); | 2931 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); |
| 2932 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
| 2933 raster_buffer->ReleaseSkCanvas(canvas); |
| 2934 canvas.clear(); |
2928 | 2935 |
2929 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 2936 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2930 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 2937 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
2931 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 2938 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
2932 .Times(1); | 2939 .Times(1); |
2933 resource_provider->BeginSetPixels(id); | 2940 resource_provider->BeginSetPixels(id); |
2934 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 2941 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
2935 | 2942 |
2936 resource_provider->ReleasePixelRasterBuffer(id); | 2943 resource_provider->ReleasePixelRasterBuffer(id); |
2937 | 2944 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3005 gfx::Size size(2, 2); | 3012 gfx::Size size(2, 2); |
3006 ResourceFormat format = RGBA_8888; | 3013 ResourceFormat format = RGBA_8888; |
3007 ResourceProvider::ResourceId id = 0; | 3014 ResourceProvider::ResourceId id = 0; |
3008 int texture_id = 123; | 3015 int texture_id = 123; |
3009 | 3016 |
3010 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3017 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3011 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3018 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3012 | 3019 |
3013 id = resource_provider->CreateResource( | 3020 id = resource_provider->CreateResource( |
3014 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3021 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3015 resource_provider->AcquirePixelRasterBuffer(id); | 3022 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); |
| 3023 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
| 3024 raster_buffer->ReleaseSkCanvas(canvas); |
| 3025 canvas.clear(); |
3016 | 3026 |
3017 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3027 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3018 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3028 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3019 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3029 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3020 .Times(1); | 3030 .Times(1); |
3021 resource_provider->BeginSetPixels(id); | 3031 resource_provider->BeginSetPixels(id); |
3022 | 3032 |
3023 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 3033 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
3024 | 3034 |
3025 resource_provider->ReleasePixelRasterBuffer(id); | 3035 resource_provider->ReleasePixelRasterBuffer(id); |
(...skipping 20 matching lines...) Expand all Loading... |
3046 gfx::Size size(2, 2); | 3056 gfx::Size size(2, 2); |
3047 ResourceFormat format = RGBA_8888; | 3057 ResourceFormat format = RGBA_8888; |
3048 ResourceProvider::ResourceId id = 0; | 3058 ResourceProvider::ResourceId id = 0; |
3049 int texture_id = 123; | 3059 int texture_id = 123; |
3050 | 3060 |
3051 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3061 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3052 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3062 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3053 | 3063 |
3054 id = resource_provider->CreateResource( | 3064 id = resource_provider->CreateResource( |
3055 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3065 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3056 resource_provider->AcquirePixelRasterBuffer(id); | 3066 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); |
| 3067 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
| 3068 raster_buffer->ReleaseSkCanvas(canvas); |
| 3069 canvas.clear(); |
3057 | 3070 |
3058 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3071 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3059 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3072 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3060 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3073 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3061 .Times(1); | 3074 .Times(1); |
3062 resource_provider->BeginSetPixels(id); | 3075 resource_provider->BeginSetPixels(id); |
3063 | 3076 |
3064 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); | 3077 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); |
3065 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); | 3078 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); |
3066 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); | 3079 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); |
(...skipping 25 matching lines...) Expand all Loading... |
3092 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3105 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3093 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3106 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3094 | 3107 |
3095 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); | 3108 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); |
3096 | 3109 |
3097 id = resource_provider->CreateResource( | 3110 id = resource_provider->CreateResource( |
3098 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3111 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3099 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 3112 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
3100 GL_INNOCENT_CONTEXT_RESET_ARB); | 3113 GL_INNOCENT_CONTEXT_RESET_ARB); |
3101 | 3114 |
3102 resource_provider->AcquirePixelRasterBuffer(id); | 3115 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); |
3103 SkCanvas* raster_canvas = resource_provider->MapPixelRasterBuffer(id); | 3116 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
3104 EXPECT_TRUE(raster_canvas == NULL); | 3117 EXPECT_TRUE(canvas.get() == NULL); |
3105 resource_provider->UnmapPixelRasterBuffer(id); | 3118 raster_buffer->ReleaseSkCanvas(canvas); |
| 3119 canvas.clear(); |
3106 resource_provider->ReleasePixelRasterBuffer(id); | 3120 resource_provider->ReleasePixelRasterBuffer(id); |
3107 Mock::VerifyAndClearExpectations(context); | 3121 Mock::VerifyAndClearExpectations(context); |
3108 } | 3122 } |
3109 | 3123 |
3110 TEST_P(ResourceProviderTest, Image_GLTexture) { | 3124 TEST_P(ResourceProviderTest, Image_GLTexture) { |
3111 // Only for GL textures. | 3125 // Only for GL textures. |
3112 if (GetParam() != ResourceProvider::GLTexture) | 3126 if (GetParam() != ResourceProvider::GLTexture) |
3113 return; | 3127 return; |
3114 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3128 scoped_ptr<AllocationTrackingContext3D> context_owned( |
3115 new StrictMock<AllocationTrackingContext3D>); | 3129 new StrictMock<AllocationTrackingContext3D>); |
(...skipping 26 matching lines...) Expand all Loading... |
3142 .WillOnce(Return(kImageId)) | 3156 .WillOnce(Return(kImageId)) |
3143 .RetiresOnSaturation(); | 3157 .RetiresOnSaturation(); |
3144 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, | 3158 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, |
3145 GL_IMAGE_ROWBYTES_CHROMIUM, | 3159 GL_IMAGE_ROWBYTES_CHROMIUM, |
3146 _)) | 3160 _)) |
3147 .WillOnce(SetArgPointee<2>(kStride)) | 3161 .WillOnce(SetArgPointee<2>(kStride)) |
3148 .RetiresOnSaturation(); | 3162 .RetiresOnSaturation(); |
3149 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3163 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3150 .WillOnce(Return(dummy_mapped_buffer_address)) | 3164 .WillOnce(Return(dummy_mapped_buffer_address)) |
3151 .RetiresOnSaturation(); | 3165 .RetiresOnSaturation(); |
3152 resource_provider->MapImageRasterBuffer(id); | 3166 resource_provider->AcquireImageRasterBuffer(id); |
3153 | 3167 resource_provider->ReleaseImageRasterBuffer(id); |
3154 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) | |
3155 .Times(1) | |
3156 .RetiresOnSaturation(); | |
3157 resource_provider->UnmapImageRasterBuffer(id); | |
3158 | 3168 |
3159 EXPECT_CALL(*context, NextTextureId()) | 3169 EXPECT_CALL(*context, NextTextureId()) |
3160 .WillOnce(Return(kTextureId)) | 3170 .WillOnce(Return(kTextureId)) |
3161 .RetiresOnSaturation(); | 3171 .RetiresOnSaturation(); |
3162 // Once in CreateTextureId and once in BindForSampling | 3172 // Once in CreateTextureId and once in BindForSampling |
3163 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) | 3173 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) |
3164 .RetiresOnSaturation(); | 3174 .RetiresOnSaturation(); |
3165 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3175 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3166 .Times(1) | 3176 .Times(1) |
3167 .RetiresOnSaturation(); | 3177 .RetiresOnSaturation(); |
3168 { | 3178 { |
3169 ResourceProvider::ScopedSamplerGL lock_gl( | 3179 ResourceProvider::ScopedSamplerGL lock_gl( |
3170 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); | 3180 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); |
3171 EXPECT_EQ(kTextureId, lock_gl.texture_id()); | 3181 EXPECT_EQ(kTextureId, lock_gl.texture_id()); |
3172 } | 3182 } |
3173 | 3183 |
3174 EXPECT_CALL( | 3184 EXPECT_CALL( |
3175 *context, | 3185 *context, |
3176 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | 3186 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
3177 .WillOnce(SetArgPointee<2>(kStride)) | 3187 .WillOnce(SetArgPointee<2>(kStride)) |
3178 .RetiresOnSaturation(); | 3188 .RetiresOnSaturation(); |
3179 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3189 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3180 .WillOnce(Return(dummy_mapped_buffer_address)) | 3190 .WillOnce(Return(dummy_mapped_buffer_address)) |
3181 .RetiresOnSaturation(); | 3191 .RetiresOnSaturation(); |
3182 resource_provider->MapImageRasterBuffer(id); | 3192 resource_provider->AcquireImageRasterBuffer(id); |
3183 | 3193 resource_provider->ReleaseImageRasterBuffer(id); |
3184 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) | |
3185 .Times(1) | |
3186 .RetiresOnSaturation(); | |
3187 resource_provider->UnmapImageRasterBuffer(id); | |
3188 | 3194 |
3189 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) | 3195 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) |
3190 .RetiresOnSaturation(); | 3196 .RetiresOnSaturation(); |
3191 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3197 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3192 .Times(1) | 3198 .Times(1) |
3193 .RetiresOnSaturation(); | 3199 .RetiresOnSaturation(); |
3194 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3200 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3195 .Times(1) | 3201 .Times(1) |
3196 .RetiresOnSaturation(); | 3202 .RetiresOnSaturation(); |
3197 EXPECT_CALL(*context, RetireTextureId(kTextureId)) | 3203 EXPECT_CALL(*context, RetireTextureId(kTextureId)) |
(...skipping 26 matching lines...) Expand all Loading... |
3224 | 3230 |
3225 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3231 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3226 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3232 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3227 | 3233 |
3228 id = resource_provider->CreateResource( | 3234 id = resource_provider->CreateResource( |
3229 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3235 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3230 | 3236 |
3231 SkBitmap bitmap; | 3237 SkBitmap bitmap; |
3232 bitmap.allocN32Pixels(size.width(), size.height()); | 3238 bitmap.allocN32Pixels(size.width(), size.height()); |
3233 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3239 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3234 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(id); | 3240 RasterBuffer* raster_buffer = resource_provider->AcquireImageRasterBuffer(id); |
| 3241 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
3235 ASSERT_TRUE(!!canvas); | 3242 ASSERT_TRUE(!!canvas); |
3236 canvas->writePixels(bitmap, 0, 0); | 3243 canvas->writePixels(bitmap, 0, 0); |
3237 resource_provider->UnmapImageRasterBuffer(id); | 3244 raster_buffer->ReleaseSkCanvas(canvas); |
| 3245 canvas.clear(); |
| 3246 resource_provider->ReleaseImageRasterBuffer(id); |
3238 | 3247 |
3239 { | 3248 { |
3240 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); | 3249 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); |
3241 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3250 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
3242 EXPECT_EQ(sk_bitmap->width(), size.width()); | 3251 EXPECT_EQ(sk_bitmap->width(), size.width()); |
3243 EXPECT_EQ(sk_bitmap->height(), size.height()); | 3252 EXPECT_EQ(sk_bitmap->height(), size.height()); |
3244 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | 3253 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
3245 } | 3254 } |
3246 | 3255 |
3247 resource_provider->DeleteResource(id); | 3256 resource_provider->DeleteResource(id); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3284 .WillOnce(Return(kImageId)) | 3293 .WillOnce(Return(kImageId)) |
3285 .RetiresOnSaturation(); | 3294 .RetiresOnSaturation(); |
3286 EXPECT_CALL( | 3295 EXPECT_CALL( |
3287 *context, | 3296 *context, |
3288 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | 3297 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
3289 .WillOnce(SetArgPointee<2>(kStride)) | 3298 .WillOnce(SetArgPointee<2>(kStride)) |
3290 .RetiresOnSaturation(); | 3299 .RetiresOnSaturation(); |
3291 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3300 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3292 .WillOnce(Return(dummy_mapped_buffer_address)) | 3301 .WillOnce(Return(dummy_mapped_buffer_address)) |
3293 .RetiresOnSaturation(); | 3302 .RetiresOnSaturation(); |
3294 resource_provider->MapImageRasterBuffer(source_id); | 3303 resource_provider->AcquireImageRasterBuffer(source_id); |
3295 Mock::VerifyAndClearExpectations(context); | 3304 resource_provider->ReleaseImageRasterBuffer(source_id); |
3296 | |
3297 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) | |
3298 .Times(1) | |
3299 .RetiresOnSaturation(); | |
3300 resource_provider->UnmapImageRasterBuffer(source_id); | |
3301 Mock::VerifyAndClearExpectations(context); | 3305 Mock::VerifyAndClearExpectations(context); |
3302 | 3306 |
3303 dest_id = resource_provider->CreateResource( | 3307 dest_id = resource_provider->CreateResource( |
3304 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3308 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3305 | 3309 |
3306 EXPECT_CALL(*context, NextTextureId()) | 3310 EXPECT_CALL(*context, NextTextureId()) |
3307 .WillOnce(Return(kDestTextureId)) | 3311 .WillOnce(Return(kDestTextureId)) |
3308 .RetiresOnSaturation(); | 3312 .RetiresOnSaturation(); |
3309 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) | 3313 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) |
3310 .Times(1) | 3314 .Times(1) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3350 | 3354 |
3351 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3355 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3352 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3356 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3353 | 3357 |
3354 source_id = resource_provider->CreateResource( | 3358 source_id = resource_provider->CreateResource( |
3355 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3359 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3356 | 3360 |
3357 SkBitmap bitmap; | 3361 SkBitmap bitmap; |
3358 bitmap.allocN32Pixels(size.width(), size.height()); | 3362 bitmap.allocN32Pixels(size.width(), size.height()); |
3359 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3363 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3360 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(source_id); | 3364 RasterBuffer* raster_buffer = |
| 3365 resource_provider->AcquireImageRasterBuffer(source_id); |
| 3366 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
3361 ASSERT_TRUE(!!canvas); | 3367 ASSERT_TRUE(!!canvas); |
3362 canvas->writePixels(bitmap, 0, 0); | 3368 canvas->writePixels(bitmap, 0, 0); |
3363 resource_provider->UnmapImageRasterBuffer(source_id); | 3369 raster_buffer->ReleaseSkCanvas(canvas); |
| 3370 canvas.clear(); |
| 3371 resource_provider->ReleaseImageRasterBuffer(source_id); |
3364 | 3372 |
3365 dest_id = resource_provider->CreateResource( | 3373 dest_id = resource_provider->CreateResource( |
3366 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3374 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3367 | 3375 |
3368 resource_provider->CopyResource(source_id, dest_id); | 3376 resource_provider->CopyResource(source_id, dest_id); |
3369 | 3377 |
3370 { | 3378 { |
3371 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | 3379 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), |
3372 dest_id); | 3380 dest_id); |
3373 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3381 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3567 resource_provider->AllocateForTesting(id); | 3575 resource_provider->AllocateForTesting(id); |
3568 Mock::VerifyAndClearExpectations(context); | 3576 Mock::VerifyAndClearExpectations(context); |
3569 | 3577 |
3570 DCHECK_EQ(10u, context->PeekTextureId()); | 3578 DCHECK_EQ(10u, context->PeekTextureId()); |
3571 resource_provider->DeleteResource(id); | 3579 resource_provider->DeleteResource(id); |
3572 } | 3580 } |
3573 } | 3581 } |
3574 | 3582 |
3575 } // namespace | 3583 } // namespace |
3576 } // namespace cc | 3584 } // namespace cc |
OLD | NEW |