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 936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 947 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
948 uint8_t data2[4] = { 5, 5, 5, 5 }; | 948 uint8_t data2[4] = { 5, 5, 5, 5 }; |
949 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 949 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
950 | 950 |
951 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 951 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
952 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 952 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
953 uint8_t data3[4] = { 6, 7, 8, 9 }; | 953 uint8_t data3[4] = { 6, 7, 8, 9 }; |
954 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); | 954 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); |
955 RasterBuffer* raster_buffer = | 955 RasterBuffer* raster_buffer = |
956 child_resource_provider_->AcquireImageRasterBuffer(id3); | 956 child_resource_provider_->AcquireImageRasterBuffer(id3); |
957 SkCanvas* canvas = raster_buffer->AcquireSkCanvas(); | 957 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
958 canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); | 958 canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); |
959 raster_buffer->ReleaseSkCanvas(); | 959 raster_buffer->ReleaseSkCanvas(canvas.get()); |
| 960 canvas.clear(); |
960 child_resource_provider_->ReleaseImageRasterBuffer(id3); | 961 child_resource_provider_->ReleaseImageRasterBuffer(id3); |
961 | 962 |
962 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 963 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
963 shared_memory->CreateAndMapAnonymous(1); | 964 shared_memory->CreateAndMapAnonymous(1); |
964 base::SharedMemory* shared_memory_ptr = shared_memory.get(); | 965 base::SharedMemory* shared_memory_ptr = shared_memory.get(); |
965 ResourceProvider::ResourceId id4 = | 966 ResourceProvider::ResourceId id4 = |
966 child_resource_provider_->CreateResourceFromTextureMailbox( | 967 child_resource_provider_->CreateResourceFromTextureMailbox( |
967 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), | 968 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), |
968 SingleReleaseCallback::Create(base::Bind( | 969 SingleReleaseCallback::Create(base::Bind( |
969 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); | 970 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); |
(...skipping 1963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2933 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2934 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2934 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 2935 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
2935 | 2936 |
2936 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); | 2937 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); |
2937 | 2938 |
2938 id = resource_provider->CreateResource( | 2939 id = resource_provider->CreateResource( |
2939 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2940 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
2940 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 2941 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
2941 GL_INNOCENT_CONTEXT_RESET_ARB); | 2942 GL_INNOCENT_CONTEXT_RESET_ARB); |
2942 | 2943 |
2943 resource_provider->AcquirePixelRasterBuffer(id); | 2944 RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); |
2944 RasterBuffer* raster_buffer = resource_provider->MapPixelRasterBuffer(id); | 2945 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
2945 SkCanvas* canvas = raster_buffer->AcquireSkCanvas(); | 2946 EXPECT_TRUE(canvas.get() == NULL); |
2946 EXPECT_TRUE(canvas == NULL); | 2947 raster_buffer->ReleaseSkCanvas(canvas.get()); |
2947 raster_buffer->ReleaseSkCanvas(); | 2948 canvas.clear(); |
2948 resource_provider->UnmapPixelRasterBuffer(id); | |
2949 resource_provider->ReleasePixelRasterBuffer(id); | 2949 resource_provider->ReleasePixelRasterBuffer(id); |
2950 Mock::VerifyAndClearExpectations(context); | 2950 Mock::VerifyAndClearExpectations(context); |
2951 } | 2951 } |
2952 | 2952 |
2953 TEST_P(ResourceProviderTest, Image_GLTexture) { | 2953 TEST_P(ResourceProviderTest, Image_GLTexture) { |
2954 // Only for GL textures. | 2954 // Only for GL textures. |
2955 if (GetParam() != ResourceProvider::GLTexture) | 2955 if (GetParam() != ResourceProvider::GLTexture) |
2956 return; | 2956 return; |
2957 scoped_ptr<AllocationTrackingContext3D> context_owned( | 2957 scoped_ptr<AllocationTrackingContext3D> context_owned( |
2958 new StrictMock<AllocationTrackingContext3D>); | 2958 new StrictMock<AllocationTrackingContext3D>); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3068 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3068 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3069 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3069 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3070 | 3070 |
3071 id = resource_provider->CreateResource( | 3071 id = resource_provider->CreateResource( |
3072 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3072 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
3073 | 3073 |
3074 SkBitmap bitmap; | 3074 SkBitmap bitmap; |
3075 bitmap.allocN32Pixels(size.width(), size.height()); | 3075 bitmap.allocN32Pixels(size.width(), size.height()); |
3076 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3076 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3077 RasterBuffer* raster_buffer = resource_provider->AcquireImageRasterBuffer(id); | 3077 RasterBuffer* raster_buffer = resource_provider->AcquireImageRasterBuffer(id); |
3078 SkCanvas* canvas = raster_buffer->AcquireSkCanvas(); | 3078 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
3079 ASSERT_TRUE(!!canvas); | 3079 ASSERT_TRUE(!!canvas); |
3080 canvas->writePixels(bitmap, 0, 0); | 3080 canvas->writePixels(bitmap, 0, 0); |
3081 raster_buffer->ReleaseSkCanvas(); | 3081 raster_buffer->ReleaseSkCanvas(canvas.get()); |
| 3082 canvas.clear(); |
3082 resource_provider->ReleaseImageRasterBuffer(id); | 3083 resource_provider->ReleaseImageRasterBuffer(id); |
3083 | 3084 |
3084 { | 3085 { |
3085 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); | 3086 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); |
3086 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3087 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
3087 EXPECT_EQ(sk_bitmap->width(), size.width()); | 3088 EXPECT_EQ(sk_bitmap->width(), size.width()); |
3088 EXPECT_EQ(sk_bitmap->height(), size.height()); | 3089 EXPECT_EQ(sk_bitmap->height(), size.height()); |
3089 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | 3090 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
3090 } | 3091 } |
3091 | 3092 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3197 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3198 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3198 | 3199 |
3199 source_id = resource_provider->CreateResource( | 3200 source_id = resource_provider->CreateResource( |
3200 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3201 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
3201 | 3202 |
3202 SkBitmap bitmap; | 3203 SkBitmap bitmap; |
3203 bitmap.allocN32Pixels(size.width(), size.height()); | 3204 bitmap.allocN32Pixels(size.width(), size.height()); |
3204 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3205 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3205 RasterBuffer* raster_buffer = | 3206 RasterBuffer* raster_buffer = |
3206 resource_provider->AcquireImageRasterBuffer(source_id); | 3207 resource_provider->AcquireImageRasterBuffer(source_id); |
3207 SkCanvas* canvas = raster_buffer->AcquireSkCanvas(); | 3208 skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); |
3208 ASSERT_TRUE(!!canvas); | 3209 ASSERT_TRUE(!!canvas); |
3209 canvas->writePixels(bitmap, 0, 0); | 3210 canvas->writePixels(bitmap, 0, 0); |
3210 raster_buffer->ReleaseSkCanvas(); | 3211 raster_buffer->ReleaseSkCanvas(canvas.get()); |
| 3212 canvas.clear(); |
3211 resource_provider->ReleaseImageRasterBuffer(source_id); | 3213 resource_provider->ReleaseImageRasterBuffer(source_id); |
3212 | 3214 |
3213 dest_id = resource_provider->CreateResource( | 3215 dest_id = resource_provider->CreateResource( |
3214 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3216 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
3215 | 3217 |
3216 resource_provider->CopyResource(source_id, dest_id); | 3218 resource_provider->CopyResource(source_id, dest_id); |
3217 | 3219 |
3218 { | 3220 { |
3219 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | 3221 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), |
3220 dest_id); | 3222 dest_id); |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3415 resource_provider->AllocateForTesting(id); | 3417 resource_provider->AllocateForTesting(id); |
3416 Mock::VerifyAndClearExpectations(context); | 3418 Mock::VerifyAndClearExpectations(context); |
3417 | 3419 |
3418 DCHECK_EQ(10u, context->PeekTextureId()); | 3420 DCHECK_EQ(10u, context->PeekTextureId()); |
3419 resource_provider->DeleteResource(id); | 3421 resource_provider->DeleteResource(id); |
3420 } | 3422 } |
3421 } | 3423 } |
3422 | 3424 |
3423 } // namespace | 3425 } // namespace |
3424 } // namespace cc | 3426 } // namespace cc |
OLD | NEW |