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 3009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3020 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); | 3020 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); |
3021 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3021 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
3022 EXPECT_EQ(sk_bitmap->width(), size.width()); | 3022 EXPECT_EQ(sk_bitmap->width(), size.width()); |
3023 EXPECT_EQ(sk_bitmap->height(), size.height()); | 3023 EXPECT_EQ(sk_bitmap->height(), size.height()); |
3024 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | 3024 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
3025 } | 3025 } |
3026 | 3026 |
3027 resource_provider->DeleteResource(id); | 3027 resource_provider->DeleteResource(id); |
3028 } | 3028 } |
3029 | 3029 |
3030 TEST_P(ResourceProviderTest, CopyResource_GLTexture) { | |
3031 if (GetParam() != ResourceProvider::GLTexture) | |
3032 return; | |
3033 scoped_ptr<AllocationTrackingContext3D> context_owned( | |
3034 new StrictMock<AllocationTrackingContext3D>); | |
3035 AllocationTrackingContext3D* context = context_owned.get(); | |
3036 | |
3037 FakeOutputSurfaceClient output_surface_client; | |
3038 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | |
3039 context_owned.PassAs<TestWebGraphicsContext3D>())); | |
3040 CHECK(output_surface->BindToClient(&output_surface_client)); | |
piman
2014/04/14 18:39:34
nit: ASSERT_TRUE
reveman
2014/04/14 19:24:09
Done.
| |
3041 | |
3042 const int kWidth = 2; | |
3043 const int kHeight = 2; | |
3044 gfx::Size size(kWidth, kHeight); | |
3045 ResourceFormat format = RGBA_8888; | |
3046 ResourceProvider::ResourceId source_id = 0; | |
3047 ResourceProvider::ResourceId dest_id = 0; | |
3048 const unsigned kSourceTextureId = 123u; | |
3049 const unsigned kDestTextureId = 321u; | |
3050 const unsigned kImageId = 234u; | |
3051 | |
3052 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | |
3053 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1)); | |
3054 | |
3055 source_id = resource_provider->CreateResource( | |
3056 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | |
3057 | |
3058 const int kStride = 4; | |
3059 void* dummy_mapped_buffer_address = NULL; | |
3060 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES)) | |
3061 .WillOnce(Return(kImageId)) | |
3062 .RetiresOnSaturation(); | |
3063 EXPECT_CALL( | |
3064 *context, | |
3065 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | |
3066 .WillOnce(SetArgPointee<2>(kStride)) | |
3067 .RetiresOnSaturation(); | |
3068 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE)) | |
3069 .WillOnce(Return(dummy_mapped_buffer_address)) | |
3070 .RetiresOnSaturation(); | |
3071 resource_provider->MapImageRasterBuffer(source_id); | |
piman
2014/04/14 18:39:34
nit: it could be useful to add a Mock::VerifyAndCl
reveman
2014/04/14 19:24:09
Done.
| |
3072 | |
3073 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) | |
3074 .Times(1) | |
3075 .RetiresOnSaturation(); | |
3076 resource_provider->UnmapImageRasterBuffer(source_id); | |
piman
2014/04/14 18:39:34
and here
reveman
2014/04/14 19:24:09
Done.
| |
3077 | |
3078 dest_id = resource_provider->CreateResource( | |
3079 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | |
3080 | |
3081 EXPECT_CALL(*context, NextTextureId()) | |
3082 .WillOnce(Return(kDestTextureId)) | |
3083 .RetiresOnSaturation(); | |
3084 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) | |
3085 .Times(1) | |
3086 .RetiresOnSaturation(); | |
3087 EXPECT_CALL(*context, NextTextureId()) | |
3088 .WillOnce(Return(kSourceTextureId)) | |
3089 .RetiresOnSaturation(); | |
3090 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kSourceTextureId)) | |
3091 .Times(2) | |
3092 .RetiresOnSaturation(); | |
3093 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) | |
3094 .Times(1) | |
3095 .RetiresOnSaturation(); | |
3096 resource_provider->CopyResource(source_id, dest_id); | |
piman
2014/04/14 18:39:34
and here
reveman
2014/04/14 19:24:09
Done.
| |
3097 | |
3098 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) | |
3099 .Times(1) | |
3100 .RetiresOnSaturation(); | |
3101 EXPECT_CALL(*context, RetireTextureId(kSourceTextureId)) | |
3102 .Times(1) | |
3103 .RetiresOnSaturation(); | |
3104 EXPECT_CALL(*context, RetireTextureId(kDestTextureId)) | |
3105 .Times(1) | |
3106 .RetiresOnSaturation(); | |
3107 resource_provider->DeleteResource(source_id); | |
3108 resource_provider->DeleteResource(dest_id); | |
3109 } | |
3110 | |
3111 TEST_P(ResourceProviderTest, CopyResource_Bitmap) { | |
3112 if (GetParam() != ResourceProvider::Bitmap) | |
3113 return; | |
3114 FakeOutputSurfaceClient output_surface_client; | |
3115 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::CreateSoftware( | |
3116 make_scoped_ptr(new SoftwareOutputDevice))); | |
3117 CHECK(output_surface->BindToClient(&output_surface_client)); | |
3118 | |
3119 gfx::Size size(1, 1); | |
3120 ResourceFormat format = RGBA_8888; | |
3121 ResourceProvider::ResourceId source_id = 0; | |
3122 ResourceProvider::ResourceId dest_id = 0; | |
3123 const uint32_t kBadBeef = 0xbadbeef; | |
3124 | |
3125 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | |
3126 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1)); | |
3127 | |
3128 source_id = resource_provider->CreateResource( | |
3129 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | |
3130 | |
3131 SkBitmap bitmap; | |
3132 bitmap.allocN32Pixels(size.width(), size.height()); | |
3133 *(bitmap.getAddr32(0, 0)) = kBadBeef; | |
3134 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(source_id); | |
3135 ASSERT_TRUE(!!canvas); | |
3136 canvas->writePixels(bitmap, 0, 0); | |
3137 resource_provider->UnmapImageRasterBuffer(source_id); | |
3138 | |
3139 dest_id = resource_provider->CreateResource( | |
3140 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | |
3141 | |
3142 resource_provider->CopyResource(source_id, dest_id); | |
3143 | |
3144 { | |
3145 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | |
3146 dest_id); | |
3147 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | |
3148 EXPECT_EQ(sk_bitmap->width(), size.width()); | |
3149 EXPECT_EQ(sk_bitmap->height(), size.height()); | |
3150 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | |
3151 } | |
3152 | |
3153 resource_provider->DeleteResource(source_id); | |
3154 resource_provider->DeleteResource(dest_id); | |
3155 } | |
3156 | |
3030 void InitializeGLAndCheck(ContextSharedData* shared_data, | 3157 void InitializeGLAndCheck(ContextSharedData* shared_data, |
3031 ResourceProvider* resource_provider, | 3158 ResourceProvider* resource_provider, |
3032 FakeOutputSurface* output_surface) { | 3159 FakeOutputSurface* output_surface) { |
3033 scoped_ptr<ResourceProviderContext> context_owned = | 3160 scoped_ptr<ResourceProviderContext> context_owned = |
3034 ResourceProviderContext::Create(shared_data); | 3161 ResourceProviderContext::Create(shared_data); |
3035 ResourceProviderContext* context = context_owned.get(); | 3162 ResourceProviderContext* context = context_owned.get(); |
3036 | 3163 |
3037 scoped_refptr<TestContextProvider> context_provider = | 3164 scoped_refptr<TestContextProvider> context_provider = |
3038 TestContextProvider::Create( | 3165 TestContextProvider::Create( |
3039 context_owned.PassAs<TestWebGraphicsContext3D>()); | 3166 context_owned.PassAs<TestWebGraphicsContext3D>()); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3208 resource_provider->AllocateForTesting(id); | 3335 resource_provider->AllocateForTesting(id); |
3209 Mock::VerifyAndClearExpectations(context); | 3336 Mock::VerifyAndClearExpectations(context); |
3210 | 3337 |
3211 DCHECK_EQ(10u, context->PeekTextureId()); | 3338 DCHECK_EQ(10u, context->PeekTextureId()); |
3212 resource_provider->DeleteResource(id); | 3339 resource_provider->DeleteResource(id); |
3213 } | 3340 } |
3214 } | 3341 } |
3215 | 3342 |
3216 } // namespace | 3343 } // namespace |
3217 } // namespace cc | 3344 } // namespace cc |
OLD | NEW |