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 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 gfx::Rect rect(size); | 626 gfx::Rect rect(size); |
627 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 627 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
628 | 628 |
629 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 629 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
630 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 630 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
631 uint8_t data2[4] = { 5, 5, 5, 5 }; | 631 uint8_t data2[4] = { 5, 5, 5, 5 }; |
632 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 632 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
633 | 633 |
634 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 634 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
635 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 635 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
636 child_resource_provider_->AcquireImageRasterBuffer(id3); | 636 child_resource_provider_->AcquireImage(id3); |
637 child_resource_provider_->ReleaseImageRasterBuffer(id3); | 637 int stride; |
| 638 child_resource_provider_->MapImage(id3, &stride); |
| 639 child_resource_provider_->UnmapImage(id3); |
638 | 640 |
639 GLuint external_texture_id = child_context_->createExternalTexture(); | 641 GLuint external_texture_id = child_context_->createExternalTexture(); |
640 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); | 642 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); |
641 | 643 |
642 gpu::Mailbox external_mailbox; | 644 gpu::Mailbox external_mailbox; |
643 child_context_->genMailboxCHROMIUM(external_mailbox.name); | 645 child_context_->genMailboxCHROMIUM(external_mailbox.name); |
644 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, | 646 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, |
645 external_mailbox.name); | 647 external_mailbox.name); |
646 const GLuint external_sync_point = child_context_->insertSyncPoint(); | 648 const GLuint external_sync_point = child_context_->insertSyncPoint(); |
647 ResourceProvider::ResourceId id4 = | 649 ResourceProvider::ResourceId id4 = |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
973 gfx::Rect rect(size); | 975 gfx::Rect rect(size); |
974 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 976 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
975 | 977 |
976 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 978 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
977 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 979 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
978 uint8_t data2[4] = { 5, 5, 5, 5 }; | 980 uint8_t data2[4] = { 5, 5, 5, 5 }; |
979 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 981 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
980 | 982 |
981 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 983 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
982 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 984 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
| 985 child_resource_provider_->AcquireImage(id3); |
983 uint8_t data3[4] = { 6, 7, 8, 9 }; | 986 uint8_t data3[4] = { 6, 7, 8, 9 }; |
984 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); | 987 int stride; |
985 RasterBuffer* raster_buffer = | 988 void* data = child_resource_provider_->MapImage(id3, &stride); |
986 child_resource_provider_->AcquireImageRasterBuffer(id3); | 989 memcpy(data, data3, sizeof(data3)); |
987 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | 990 child_resource_provider_->UnmapImage(id3); |
988 canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); | |
989 raster_buffer->ReleaseSkCanvas(canvas); | |
990 canvas.clear(); | |
991 child_resource_provider_->ReleaseImageRasterBuffer(id3); | |
992 | 991 |
993 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 992 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
994 shared_memory->CreateAndMapAnonymous(1); | 993 shared_memory->CreateAndMapAnonymous(1); |
995 base::SharedMemory* shared_memory_ptr = shared_memory.get(); | 994 base::SharedMemory* shared_memory_ptr = shared_memory.get(); |
996 ResourceProvider::ResourceId id4 = | 995 ResourceProvider::ResourceId id4 = |
997 child_resource_provider_->CreateResourceFromTextureMailbox( | 996 child_resource_provider_->CreateResourceFromTextureMailbox( |
998 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), | 997 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), |
999 SingleReleaseCallbackImpl::Create(base::Bind( | 998 SingleReleaseCallbackImpl::Create(base::Bind( |
1000 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); | 999 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); |
1001 | 1000 |
(...skipping 2042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3044 resource_provider->SetPixels(id, pixels, rect, rect, offset); | 3043 resource_provider->SetPixels(id, pixels, rect, rect, offset); |
3045 | 3044 |
3046 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3045 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3047 resource_provider->DeleteResource(id); | 3046 resource_provider->DeleteResource(id); |
3048 | 3047 |
3049 Mock::VerifyAndClearExpectations(context); | 3048 Mock::VerifyAndClearExpectations(context); |
3050 | 3049 |
3051 // Same for async version. | 3050 // Same for async version. |
3052 id = resource_provider->CreateResource( | 3051 id = resource_provider->CreateResource( |
3053 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3052 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3054 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); | 3053 resource_provider->AcquirePixelBuffer(id); |
3055 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | |
3056 raster_buffer->ReleaseSkCanvas(canvas); | |
3057 canvas.clear(); | |
3058 | 3054 |
3059 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3055 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3060 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3056 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3061 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3057 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3062 .Times(1); | 3058 .Times(1); |
3063 resource_provider->BeginSetPixels(id); | 3059 resource_provider->BeginSetPixels(id); |
3064 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 3060 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
3065 | 3061 |
3066 resource_provider->ReleasePixelRasterBuffer(id); | 3062 resource_provider->ReleasePixelBuffer(id); |
3067 | 3063 |
3068 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3064 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3069 resource_provider->DeleteResource(id); | 3065 resource_provider->DeleteResource(id); |
3070 | 3066 |
3071 Mock::VerifyAndClearExpectations(context); | 3067 Mock::VerifyAndClearExpectations(context); |
3072 } | 3068 } |
3073 | 3069 |
3074 TEST_P(ResourceProviderTest, TextureAllocationHint) { | 3070 TEST_P(ResourceProviderTest, TextureAllocationHint) { |
3075 // Only for GL textures. | 3071 // Only for GL textures. |
3076 if (GetParam() != ResourceProvider::GLTexture) | 3072 if (GetParam() != ResourceProvider::GLTexture) |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3209 ResourceProvider::Create(output_surface.get(), | 3205 ResourceProvider::Create(output_surface.get(), |
3210 shared_bitmap_manager_.get(), | 3206 shared_bitmap_manager_.get(), |
3211 NULL, | 3207 NULL, |
3212 0, | 3208 0, |
3213 false, | 3209 false, |
3214 1, | 3210 1, |
3215 false)); | 3211 false)); |
3216 | 3212 |
3217 id = resource_provider->CreateResource( | 3213 id = resource_provider->CreateResource( |
3218 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3214 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3219 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); | 3215 resource_provider->AcquirePixelBuffer(id); |
3220 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | |
3221 raster_buffer->ReleaseSkCanvas(canvas); | |
3222 canvas.clear(); | |
3223 | 3216 |
3224 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3217 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3225 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3218 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3226 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3219 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3227 .Times(1); | 3220 .Times(1); |
3228 resource_provider->BeginSetPixels(id); | 3221 resource_provider->BeginSetPixels(id); |
3229 | 3222 |
3230 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 3223 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
3231 | 3224 |
3232 resource_provider->ReleasePixelRasterBuffer(id); | 3225 resource_provider->ReleasePixelBuffer(id); |
3233 | 3226 |
3234 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3227 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3235 resource_provider->DeleteResource(id); | 3228 resource_provider->DeleteResource(id); |
3236 | 3229 |
3237 Mock::VerifyAndClearExpectations(context); | 3230 Mock::VerifyAndClearExpectations(context); |
3238 } | 3231 } |
3239 | 3232 |
3240 TEST_P(ResourceProviderTest, ForcingAsyncUploadToComplete) { | 3233 TEST_P(ResourceProviderTest, ForcingAsyncUploadToComplete) { |
3241 // Only for GL textures. | 3234 // Only for GL textures. |
3242 if (GetParam() != ResourceProvider::GLTexture) | 3235 if (GetParam() != ResourceProvider::GLTexture) |
(...skipping 16 matching lines...) Expand all Loading... |
3259 ResourceProvider::Create(output_surface.get(), | 3252 ResourceProvider::Create(output_surface.get(), |
3260 shared_bitmap_manager_.get(), | 3253 shared_bitmap_manager_.get(), |
3261 NULL, | 3254 NULL, |
3262 0, | 3255 0, |
3263 false, | 3256 false, |
3264 1, | 3257 1, |
3265 false)); | 3258 false)); |
3266 | 3259 |
3267 id = resource_provider->CreateResource( | 3260 id = resource_provider->CreateResource( |
3268 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3261 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3269 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); | 3262 resource_provider->AcquirePixelBuffer(id); |
3270 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | |
3271 raster_buffer->ReleaseSkCanvas(canvas); | |
3272 canvas.clear(); | |
3273 | 3263 |
3274 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3264 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3275 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3265 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3276 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3266 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3277 .Times(1); | 3267 .Times(1); |
3278 resource_provider->BeginSetPixels(id); | 3268 resource_provider->BeginSetPixels(id); |
3279 | 3269 |
3280 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); | 3270 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); |
3281 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); | 3271 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); |
3282 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); | 3272 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, 0)).Times(1); |
3283 resource_provider->ForceSetPixelsToComplete(id); | 3273 resource_provider->ForceSetPixelsToComplete(id); |
3284 | 3274 |
3285 resource_provider->ReleasePixelRasterBuffer(id); | 3275 resource_provider->ReleasePixelBuffer(id); |
3286 | 3276 |
3287 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3277 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3288 resource_provider->DeleteResource(id); | 3278 resource_provider->DeleteResource(id); |
3289 | 3279 |
3290 Mock::VerifyAndClearExpectations(context); | 3280 Mock::VerifyAndClearExpectations(context); |
3291 } | 3281 } |
3292 | 3282 |
3293 TEST_P(ResourceProviderTest, PixelBufferLostContext) { | 3283 TEST_P(ResourceProviderTest, PixelBufferLostContext) { |
3294 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3284 scoped_ptr<AllocationTrackingContext3D> context_owned( |
3295 new NiceMock<AllocationTrackingContext3D>); | 3285 new NiceMock<AllocationTrackingContext3D>); |
(...skipping 18 matching lines...) Expand all Loading... |
3314 1, | 3304 1, |
3315 false)); | 3305 false)); |
3316 | 3306 |
3317 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); | 3307 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); |
3318 | 3308 |
3319 id = resource_provider->CreateResource( | 3309 id = resource_provider->CreateResource( |
3320 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3310 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3321 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 3311 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
3322 GL_INNOCENT_CONTEXT_RESET_ARB); | 3312 GL_INNOCENT_CONTEXT_RESET_ARB); |
3323 | 3313 |
3324 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); | 3314 resource_provider->AcquirePixelBuffer(id); |
3325 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | 3315 resource_provider->ReleasePixelBuffer(id); |
3326 EXPECT_TRUE(canvas.get() == NULL); | |
3327 raster_buffer->ReleaseSkCanvas(canvas); | |
3328 canvas.clear(); | |
3329 resource_provider->ReleasePixelRasterBuffer(id); | |
3330 Mock::VerifyAndClearExpectations(context); | 3316 Mock::VerifyAndClearExpectations(context); |
3331 } | 3317 } |
3332 | 3318 |
3333 TEST_P(ResourceProviderTest, Image_GLTexture) { | 3319 TEST_P(ResourceProviderTest, Image_GLTexture) { |
3334 // Only for GL textures. | 3320 // Only for GL textures. |
3335 if (GetParam() != ResourceProvider::GLTexture) | 3321 if (GetParam() != ResourceProvider::GLTexture) |
3336 return; | 3322 return; |
3337 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3323 scoped_ptr<AllocationTrackingContext3D> context_owned( |
3338 new StrictMock<AllocationTrackingContext3D>); | 3324 new StrictMock<AllocationTrackingContext3D>); |
3339 AllocationTrackingContext3D* context = context_owned.get(); | 3325 AllocationTrackingContext3D* context = context_owned.get(); |
(...skipping 23 matching lines...) Expand all Loading... |
3363 id = resource_provider->CreateResource( | 3349 id = resource_provider->CreateResource( |
3364 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3350 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3365 | 3351 |
3366 const int kStride = 4; | 3352 const int kStride = 4; |
3367 void* dummy_mapped_buffer_address = NULL; | 3353 void* dummy_mapped_buffer_address = NULL; |
3368 EXPECT_CALL( | 3354 EXPECT_CALL( |
3369 *context, | 3355 *context, |
3370 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) | 3356 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) |
3371 .WillOnce(Return(kImageId)) | 3357 .WillOnce(Return(kImageId)) |
3372 .RetiresOnSaturation(); | 3358 .RetiresOnSaturation(); |
| 3359 resource_provider->AcquireImage(id); |
| 3360 |
3373 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, | 3361 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, |
3374 GL_IMAGE_ROWBYTES_CHROMIUM, | 3362 GL_IMAGE_ROWBYTES_CHROMIUM, |
3375 _)) | 3363 _)) |
3376 .WillOnce(SetArgPointee<2>(kStride)) | 3364 .WillOnce(SetArgPointee<2>(kStride)) |
3377 .RetiresOnSaturation(); | 3365 .RetiresOnSaturation(); |
3378 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3366 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3379 .WillOnce(Return(dummy_mapped_buffer_address)) | 3367 .WillOnce(Return(dummy_mapped_buffer_address)) |
3380 .RetiresOnSaturation(); | 3368 .RetiresOnSaturation(); |
3381 resource_provider->AcquireImageRasterBuffer(id); | 3369 int stride; |
3382 resource_provider->ReleaseImageRasterBuffer(id); | 3370 resource_provider->MapImage(id, &stride); |
| 3371 |
| 3372 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) |
| 3373 .Times(1) |
| 3374 .RetiresOnSaturation(); |
| 3375 resource_provider->UnmapImage(id); |
3383 | 3376 |
3384 EXPECT_CALL(*context, NextTextureId()) | 3377 EXPECT_CALL(*context, NextTextureId()) |
3385 .WillOnce(Return(kTextureId)) | 3378 .WillOnce(Return(kTextureId)) |
3386 .RetiresOnSaturation(); | 3379 .RetiresOnSaturation(); |
3387 // Once in CreateTextureId and once in BindForSampling | 3380 // Once in CreateTextureId and once in BindForSampling |
3388 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) | 3381 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(2) |
3389 .RetiresOnSaturation(); | 3382 .RetiresOnSaturation(); |
3390 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3383 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3391 .Times(1) | 3384 .Times(1) |
3392 .RetiresOnSaturation(); | 3385 .RetiresOnSaturation(); |
3393 { | 3386 { |
3394 ResourceProvider::ScopedSamplerGL lock_gl( | 3387 ResourceProvider::ScopedSamplerGL lock_gl( |
3395 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); | 3388 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); |
3396 EXPECT_EQ(kTextureId, lock_gl.texture_id()); | 3389 EXPECT_EQ(kTextureId, lock_gl.texture_id()); |
3397 } | 3390 } |
3398 | 3391 |
3399 EXPECT_CALL( | 3392 EXPECT_CALL( |
3400 *context, | 3393 *context, |
3401 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | 3394 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
3402 .WillOnce(SetArgPointee<2>(kStride)) | 3395 .WillOnce(SetArgPointee<2>(kStride)) |
3403 .RetiresOnSaturation(); | 3396 .RetiresOnSaturation(); |
3404 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3397 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3405 .WillOnce(Return(dummy_mapped_buffer_address)) | 3398 .WillOnce(Return(dummy_mapped_buffer_address)) |
3406 .RetiresOnSaturation(); | 3399 .RetiresOnSaturation(); |
3407 resource_provider->AcquireImageRasterBuffer(id); | 3400 resource_provider->MapImage(id, &stride); |
3408 resource_provider->ReleaseImageRasterBuffer(id); | 3401 |
| 3402 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) |
| 3403 .Times(1) |
| 3404 .RetiresOnSaturation(); |
| 3405 resource_provider->UnmapImage(id); |
3409 | 3406 |
3410 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) | 3407 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1) |
3411 .RetiresOnSaturation(); | 3408 .RetiresOnSaturation(); |
3412 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3409 EXPECT_CALL(*context, releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3413 .Times(1) | 3410 .Times(1) |
3414 .RetiresOnSaturation(); | 3411 .RetiresOnSaturation(); |
3415 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | 3412 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
3416 .Times(1) | 3413 .Times(1) |
3417 .RetiresOnSaturation(); | 3414 .RetiresOnSaturation(); |
3418 EXPECT_CALL(*context, RetireTextureId(kTextureId)) | 3415 EXPECT_CALL(*context, RetireTextureId(kTextureId)) |
(...skipping 28 matching lines...) Expand all Loading... |
3447 ResourceProvider::Create(output_surface.get(), | 3444 ResourceProvider::Create(output_surface.get(), |
3448 shared_bitmap_manager_.get(), | 3445 shared_bitmap_manager_.get(), |
3449 NULL, | 3446 NULL, |
3450 0, | 3447 0, |
3451 false, | 3448 false, |
3452 1, | 3449 1, |
3453 false)); | 3450 false)); |
3454 | 3451 |
3455 id = resource_provider->CreateResource( | 3452 id = resource_provider->CreateResource( |
3456 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3453 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
| 3454 resource_provider->AcquireImage(id); |
3457 | 3455 |
3458 SkBitmap bitmap; | 3456 int stride; |
3459 bitmap.allocN32Pixels(size.width(), size.height()); | 3457 void* data = resource_provider->MapImage(id, &stride); |
3460 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3458 ASSERT_TRUE(!!data); |
3461 RasterBuffer* raster_buffer = resource_provider->AcquireImageRasterBuffer(id); | 3459 memcpy(data, &kBadBeef, sizeof(kBadBeef)); |
3462 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | 3460 resource_provider->UnmapImage(id); |
3463 ASSERT_TRUE(!!canvas); | |
3464 canvas->writePixels(bitmap, 0, 0); | |
3465 raster_buffer->ReleaseSkCanvas(canvas); | |
3466 canvas.clear(); | |
3467 resource_provider->ReleaseImageRasterBuffer(id); | |
3468 | 3461 |
3469 { | 3462 { |
3470 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); | 3463 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); |
3471 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3464 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
3472 EXPECT_EQ(sk_bitmap->width(), size.width()); | 3465 EXPECT_EQ(sk_bitmap->width(), size.width()); |
3473 EXPECT_EQ(sk_bitmap->height(), size.height()); | 3466 EXPECT_EQ(sk_bitmap->height(), size.height()); |
3474 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | 3467 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
3475 } | 3468 } |
3476 | 3469 |
| 3470 resource_provider->ReleaseImage(id); |
3477 resource_provider->DeleteResource(id); | 3471 resource_provider->DeleteResource(id); |
3478 } | 3472 } |
3479 | 3473 |
3480 TEST_P(ResourceProviderTest, CopyResource_GLTexture) { | 3474 TEST_P(ResourceProviderTest, CopyResource_GLTexture) { |
3481 if (GetParam() != ResourceProvider::GLTexture) | 3475 if (GetParam() != ResourceProvider::GLTexture) |
3482 return; | 3476 return; |
3483 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3477 scoped_ptr<AllocationTrackingContext3D> context_owned( |
3484 new StrictMock<AllocationTrackingContext3D>); | 3478 new StrictMock<AllocationTrackingContext3D>); |
3485 AllocationTrackingContext3D* context = context_owned.get(); | 3479 AllocationTrackingContext3D* context = context_owned.get(); |
3486 context_owned->set_support_sync_query(true); | 3480 context_owned->set_support_sync_query(true); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3520 .WillOnce(Return(kImageId)) | 3514 .WillOnce(Return(kImageId)) |
3521 .RetiresOnSaturation(); | 3515 .RetiresOnSaturation(); |
3522 EXPECT_CALL( | 3516 EXPECT_CALL( |
3523 *context, | 3517 *context, |
3524 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | 3518 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
3525 .WillOnce(SetArgPointee<2>(kStride)) | 3519 .WillOnce(SetArgPointee<2>(kStride)) |
3526 .RetiresOnSaturation(); | 3520 .RetiresOnSaturation(); |
3527 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3521 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3528 .WillOnce(Return(dummy_mapped_buffer_address)) | 3522 .WillOnce(Return(dummy_mapped_buffer_address)) |
3529 .RetiresOnSaturation(); | 3523 .RetiresOnSaturation(); |
3530 resource_provider->AcquireImageRasterBuffer(source_id); | 3524 resource_provider->AcquireImage(source_id); |
3531 resource_provider->ReleaseImageRasterBuffer(source_id); | 3525 int stride; |
| 3526 resource_provider->MapImage(source_id, &stride); |
| 3527 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) |
| 3528 .Times(1) |
| 3529 .RetiresOnSaturation(); |
| 3530 resource_provider->UnmapImage(source_id); |
3532 Mock::VerifyAndClearExpectations(context); | 3531 Mock::VerifyAndClearExpectations(context); |
3533 | 3532 |
3534 dest_id = resource_provider->CreateResource( | 3533 dest_id = resource_provider->CreateResource( |
3535 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3534 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3536 | 3535 |
3537 EXPECT_CALL(*context, NextTextureId()) | 3536 EXPECT_CALL(*context, NextTextureId()) |
3538 .WillOnce(Return(kDestTextureId)) | 3537 .WillOnce(Return(kDestTextureId)) |
3539 .RetiresOnSaturation(); | 3538 .RetiresOnSaturation(); |
3540 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) | 3539 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) |
3541 .Times(1) | 3540 .Times(1) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3583 ResourceProvider::Create(output_surface.get(), | 3582 ResourceProvider::Create(output_surface.get(), |
3584 shared_bitmap_manager_.get(), | 3583 shared_bitmap_manager_.get(), |
3585 NULL, | 3584 NULL, |
3586 0, | 3585 0, |
3587 false, | 3586 false, |
3588 1, | 3587 1, |
3589 false)); | 3588 false)); |
3590 | 3589 |
3591 source_id = resource_provider->CreateResource( | 3590 source_id = resource_provider->CreateResource( |
3592 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3591 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
| 3592 resource_provider->AcquireImage(source_id); |
3593 | 3593 |
3594 SkBitmap bitmap; | 3594 int stride; |
3595 bitmap.allocN32Pixels(size.width(), size.height()); | 3595 void* data = resource_provider->MapImage(source_id, &stride); |
3596 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3596 ASSERT_TRUE(!!data); |
3597 RasterBuffer* raster_buffer = | 3597 memcpy(data, &kBadBeef, sizeof(kBadBeef)); |
3598 resource_provider->AcquireImageRasterBuffer(source_id); | 3598 resource_provider->UnmapImage(source_id); |
3599 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); | |
3600 ASSERT_TRUE(!!canvas); | |
3601 canvas->writePixels(bitmap, 0, 0); | |
3602 raster_buffer->ReleaseSkCanvas(canvas); | |
3603 canvas.clear(); | |
3604 resource_provider->ReleaseImageRasterBuffer(source_id); | |
3605 | 3599 |
3606 dest_id = resource_provider->CreateResource( | 3600 dest_id = resource_provider->CreateResource( |
3607 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 3601 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3608 | 3602 |
3609 resource_provider->CopyResource(source_id, dest_id); | 3603 resource_provider->CopyResource(source_id, dest_id); |
3610 | 3604 |
3611 { | 3605 { |
3612 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | 3606 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), |
3613 dest_id); | 3607 dest_id); |
3614 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3608 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3818 resource_provider->AllocateForTesting(id); | 3812 resource_provider->AllocateForTesting(id); |
3819 Mock::VerifyAndClearExpectations(context); | 3813 Mock::VerifyAndClearExpectations(context); |
3820 | 3814 |
3821 DCHECK_EQ(10u, context->PeekTextureId()); | 3815 DCHECK_EQ(10u, context->PeekTextureId()); |
3822 resource_provider->DeleteResource(id); | 3816 resource_provider->DeleteResource(id); |
3823 } | 3817 } |
3824 } | 3818 } |
3825 | 3819 |
3826 } // namespace | 3820 } // namespace |
3827 } // namespace cc | 3821 } // namespace cc |
OLD | NEW |