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

Side by Side Diff: cc/resource_provider_unittest.cc

Issue 11266030: Use gfx:: Geometry types for the resource provider and layer updater classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: uint8 Created 8 years, 1 month 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/resource_provider.cc ('k') | cc/resource_update.h » ('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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/resource_provider.h" 7 #include "cc/resource_provider.h"
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "cc/graphics_context.h" 10 #include "cc/graphics_context.h"
11 #include "cc/scoped_ptr_deque.h" 11 #include "cc/scoped_ptr_deque.h"
12 #include "cc/scoped_ptr_hash_map.h" 12 #include "cc/scoped_ptr_hash_map.h"
13 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread 13 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread
14 #include "cc/test/compositor_fake_web_graphics_context_3d.h" 14 #include "cc/test/compositor_fake_web_graphics_context_3d.h"
15 #include "cc/test/fake_web_compositor_output_surface.h" 15 #include "cc/test/fake_web_compositor_output_surface.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/khronos/GLES2/gl2.h" 17 #include "third_party/khronos/GLES2/gl2.h"
18 #include "third_party/khronos/GLES2/gl2ext.h" 18 #include "third_party/khronos/GLES2/gl2ext.h"
19 #include <public/WebGraphicsContext3D.h> 19 #include <public/WebGraphicsContext3D.h>
20 20
21 using namespace cc; 21 using namespace cc;
22 using namespace WebKit; 22 using namespace WebKit;
23 23
24 namespace { 24 namespace {
25 25
26 size_t textureSize(const IntSize& size, WGC3Denum format) 26 size_t textureSize(const gfx::Size& size, WGC3Denum format)
27 { 27 {
28 unsigned int componentsPerPixel = 4; 28 unsigned int componentsPerPixel = 4;
29 unsigned int bytesPerComponent = 1; 29 unsigned int bytesPerComponent = 1;
30 return size.width() * size.height() * componentsPerPixel * bytesPerComponent ; 30 return size.width() * size.height() * componentsPerPixel * bytesPerComponent ;
31 } 31 }
32 32
33 struct Texture { 33 struct Texture {
34 Texture(const IntSize& size, WGC3Denum format) 34 Texture(const gfx::Size& size, WGC3Denum format)
35 : size(size) 35 : size(size)
36 , format(format) 36 , format(format)
37 , data(new uint8_t[textureSize(size, format)]) 37 , data(new uint8_t[textureSize(size, format)])
38 { 38 {
39 } 39 }
40 40
41 IntSize size; 41 gfx::Size size;
42 WGC3Denum format; 42 WGC3Denum format;
43 scoped_array<uint8_t> data; 43 scoped_array<uint8_t> data;
44 }; 44 };
45 45
46 // Shared data between multiple ResourceProviderContext. This contains mailbox 46 // Shared data between multiple ResourceProviderContext. This contains mailbox
47 // contents as well as information about sync points. 47 // contents as well as information about sync points.
48 class ContextSharedData { 48 class ContextSharedData {
49 public: 49 public:
50 static scoped_ptr<ContextSharedData> create() { return make_scoped_ptr(new C ontextSharedData()); } 50 static scoped_ptr<ContextSharedData> create() { return make_scoped_ptr(new C ontextSharedData()); }
51 51
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 WGC3Denum format = GL_RGBA; 147 WGC3Denum format = GL_RGBA;
148 switch (internalformat) { 148 switch (internalformat) {
149 case GL_RGBA8_OES: 149 case GL_RGBA8_OES:
150 break; 150 break;
151 case GL_BGRA8_EXT: 151 case GL_BGRA8_EXT:
152 format = GL_BGRA_EXT; 152 format = GL_BGRA_EXT;
153 break; 153 break;
154 default: 154 default:
155 NOTREACHED(); 155 NOTREACHED();
156 } 156 }
157 allocateTexture(IntSize(width, height), format); 157 allocateTexture(gfx::Size(width, height), format);
158 } 158 }
159 159
160 virtual void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internal format, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denum type, const void* pixels) 160 virtual void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internal format, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denum type, const void* pixels)
161 { 161 {
162 ASSERT_TRUE(m_currentTexture); 162 ASSERT_TRUE(m_currentTexture);
163 ASSERT_EQ(target, GL_TEXTURE_2D); 163 ASSERT_EQ(target, GL_TEXTURE_2D);
164 ASSERT_FALSE(level); 164 ASSERT_FALSE(level);
165 ASSERT_EQ(internalformat, format); 165 ASSERT_EQ(internalformat, format);
166 ASSERT_FALSE(border); 166 ASSERT_FALSE(border);
167 ASSERT_EQ(type, GL_UNSIGNED_BYTE); 167 ASSERT_EQ(type, GL_UNSIGNED_BYTE);
168 allocateTexture(IntSize(width, height), format); 168 allocateTexture(gfx::Size(width, height), format);
169 if (pixels) 169 if (pixels)
170 setPixels(0, 0, width, height, pixels); 170 setPixels(0, 0, width, height, pixels);
171 } 171 }
172 172
173 virtual void texSubImage2D(WGC3Denum target, WGC3Dint level, WGC3Dint xoffse t, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3 Denum type, const void* pixels) 173 virtual void texSubImage2D(WGC3Denum target, WGC3Dint level, WGC3Dint xoffse t, WGC3Dint yoffset, WGC3Dsizei width, WGC3Dsizei height, WGC3Denum format, WGC3 Denum type, const void* pixels)
174 { 174 {
175 ASSERT_TRUE(m_currentTexture); 175 ASSERT_TRUE(m_currentTexture);
176 ASSERT_EQ(target, GL_TEXTURE_2D); 176 ASSERT_EQ(target, GL_TEXTURE_2D);
177 ASSERT_FALSE(level); 177 ASSERT_FALSE(level);
178 ASSERT_TRUE(m_textures.get(m_currentTexture)); 178 ASSERT_TRUE(m_textures.get(m_currentTexture));
(...skipping 19 matching lines...) Expand all
198 m_pendingProduceTextures.append(pending.Pass()); 198 m_pendingProduceTextures.append(pending.Pass());
199 } 199 }
200 200
201 virtual void consumeTextureCHROMIUM(WGC3Denum target, const WGC3Dbyte* mailb ox) 201 virtual void consumeTextureCHROMIUM(WGC3Denum target, const WGC3Dbyte* mailb ox)
202 { 202 {
203 ASSERT_TRUE(m_currentTexture); 203 ASSERT_TRUE(m_currentTexture);
204 ASSERT_EQ(target, GL_TEXTURE_2D); 204 ASSERT_EQ(target, GL_TEXTURE_2D);
205 m_textures.set(m_currentTexture, m_sharedData->consumeTexture(mailbox, m _lastWaitedSyncPoint)); 205 m_textures.set(m_currentTexture, m_sharedData->consumeTexture(mailbox, m _lastWaitedSyncPoint));
206 } 206 }
207 207
208 void getPixels(const IntSize& size, WGC3Denum format, uint8_t* pixels) 208 void getPixels(const gfx::Size& size, WGC3Denum format, uint8_t* pixels)
209 { 209 {
210 ASSERT_TRUE(m_currentTexture); 210 ASSERT_TRUE(m_currentTexture);
211 Texture* texture = m_textures.get(m_currentTexture); 211 Texture* texture = m_textures.get(m_currentTexture);
212 ASSERT_TRUE(texture); 212 ASSERT_TRUE(texture);
213 ASSERT_EQ(texture->size, size); 213 ASSERT_EQ(texture->size, size);
214 ASSERT_EQ(texture->format, format); 214 ASSERT_EQ(texture->format, format);
215 memcpy(pixels, texture->data.get(), textureSize(size, format)); 215 memcpy(pixels, texture->data.get(), textureSize(size, format));
216 } 216 }
217 217
218 int textureCount() 218 int textureCount()
219 { 219 {
220 return m_textures.size(); 220 return m_textures.size();
221 } 221 }
222 222
223 protected: 223 protected:
224 ResourceProviderContext(const Attributes& attrs, ContextSharedData* sharedDa ta) 224 ResourceProviderContext(const Attributes& attrs, ContextSharedData* sharedDa ta)
225 : CompositorFakeWebGraphicsContext3D(attrs) 225 : CompositorFakeWebGraphicsContext3D(attrs)
226 , m_sharedData(sharedData) 226 , m_sharedData(sharedData)
227 , m_currentTexture(0) 227 , m_currentTexture(0)
228 , m_lastWaitedSyncPoint(0) 228 , m_lastWaitedSyncPoint(0)
229 { } 229 { }
230 230
231 private: 231 private:
232 void allocateTexture(const IntSize& size, WGC3Denum format) 232 void allocateTexture(const gfx::Size& size, WGC3Denum format)
233 { 233 {
234 ASSERT_TRUE(m_currentTexture); 234 ASSERT_TRUE(m_currentTexture);
235 m_textures.set(m_currentTexture, make_scoped_ptr(new Texture(size, forma t))); 235 m_textures.set(m_currentTexture, make_scoped_ptr(new Texture(size, forma t)));
236 } 236 }
237 237
238 void setPixels(int xoffset, int yoffset, int width, int height, const void* pixels) 238 void setPixels(int xoffset, int yoffset, int width, int height, const void* pixels)
239 { 239 {
240 ASSERT_TRUE(m_currentTexture); 240 ASSERT_TRUE(m_currentTexture);
241 Texture* texture = m_textures.get(m_currentTexture); 241 Texture* texture = m_textures.get(m_currentTexture);
242 ASSERT_TRUE(texture); 242 ASSERT_TRUE(texture);
243 ASSERT_TRUE(xoffset >= 0 && xoffset+width <= texture->size.width()); 243 ASSERT_TRUE(xoffset >= 0 && xoffset+width <= texture->size.width());
244 ASSERT_TRUE(yoffset >= 0 && yoffset+height <= texture->size.height()); 244 ASSERT_TRUE(yoffset >= 0 && yoffset+height <= texture->size.height());
245 ASSERT_TRUE(pixels); 245 ASSERT_TRUE(pixels);
246 size_t inPitch = textureSize(IntSize(width, 1), texture->format); 246 size_t inPitch = textureSize(gfx::Size(width, 1), texture->format);
247 size_t outPitch = textureSize(IntSize(texture->size.width(), 1), texture ->format); 247 size_t outPitch = textureSize(gfx::Size(texture->size.width(), 1), textu re->format);
248 uint8_t* dest = texture->data.get() + yoffset * outPitch + textureSize(I ntSize(xoffset, 1), texture->format); 248 uint8_t* dest = texture->data.get() + yoffset * outPitch + textureSize(g fx::Size(xoffset, 1), texture->format);
249 const uint8_t* src = static_cast<const uint8_t*>(pixels); 249 const uint8_t* src = static_cast<const uint8_t*>(pixels);
250 for (int i = 0; i < height; ++i) { 250 for (int i = 0; i < height; ++i) {
251 memcpy(dest, src, inPitch); 251 memcpy(dest, src, inPitch);
252 dest += outPitch; 252 dest += outPitch;
253 src += inPitch; 253 src += inPitch;
254 } 254 }
255 } 255 }
256 256
257 typedef ScopedPtrHashMap<WebGLId, Texture> TextureMap; 257 typedef ScopedPtrHashMap<WebGLId, Texture> TextureMap;
258 struct PendingProduceTexture { 258 struct PendingProduceTexture {
(...skipping 13 matching lines...) Expand all
272 ResourceProviderTest() 272 ResourceProviderTest()
273 : m_sharedData(ContextSharedData::create()) 273 : m_sharedData(ContextSharedData::create())
274 , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderConte xt::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<Web Kit::WebGraphicsContext3D>())) 274 , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderConte xt::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<Web Kit::WebGraphicsContext3D>()))
275 , m_resourceProvider(ResourceProvider::create(m_context.get())) 275 , m_resourceProvider(ResourceProvider::create(m_context.get()))
276 { 276 {
277 m_resourceProvider->setDefaultResourceType(GetParam()); 277 m_resourceProvider->setDefaultResourceType(GetParam());
278 } 278 }
279 279
280 ResourceProviderContext* context() { return static_cast<ResourceProviderCont ext*>(m_context->context3D()); } 280 ResourceProviderContext* context() { return static_cast<ResourceProviderCont ext*>(m_context->context3D()); }
281 281
282 void getResourcePixels(ResourceProvider::ResourceId id, const IntSize& size, WGC3Denum format, uint8_t* pixels) 282 void getResourcePixels(ResourceProvider::ResourceId id, const gfx::Size& siz e, WGC3Denum format, uint8_t* pixels)
283 { 283 {
284 if (GetParam() == ResourceProvider::GLTexture) { 284 if (GetParam() == ResourceProvider::GLTexture) {
285 ResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(), id); 285 ResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(), id);
286 ASSERT_NE(0U, lockGL.textureId()); 286 ASSERT_NE(0U, lockGL.textureId());
287 context()->bindTexture(GL_TEXTURE_2D, lockGL.textureId()); 287 context()->bindTexture(GL_TEXTURE_2D, lockGL.textureId());
288 context()->getPixels(size, format, pixels); 288 context()->getPixels(size, format, pixels);
289 } else if (GetParam() == ResourceProvider::Bitmap) { 289 } else if (GetParam() == ResourceProvider::Bitmap) {
290 ResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProv ider.get(), id); 290 ResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProv ider.get(), id);
291 memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.sk Bitmap()->getSize()); 291 memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.sk Bitmap()->getSize());
292 } 292 }
293 } 293 }
294 294
295 void expectNumResources(int count) 295 void expectNumResources(int count)
296 { 296 {
297 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources())); 297 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources()));
298 if (GetParam() == ResourceProvider::GLTexture) 298 if (GetParam() == ResourceProvider::GLTexture)
299 EXPECT_EQ(count, context()->textureCount()); 299 EXPECT_EQ(count, context()->textureCount());
300 } 300 }
301 301
302 protected: 302 protected:
303 DebugScopedSetImplThread implThread; 303 DebugScopedSetImplThread implThread;
304 scoped_ptr<ContextSharedData> m_sharedData; 304 scoped_ptr<ContextSharedData> m_sharedData;
305 scoped_ptr<GraphicsContext> m_context; 305 scoped_ptr<GraphicsContext> m_context;
306 scoped_ptr<ResourceProvider> m_resourceProvider; 306 scoped_ptr<ResourceProvider> m_resourceProvider;
307 }; 307 };
308 308
309 TEST_P(ResourceProviderTest, Basic) 309 TEST_P(ResourceProviderTest, Basic)
310 { 310 {
311 IntSize size(1, 1); 311 gfx::Size size(1, 1);
312 WGC3Denum format = GL_RGBA; 312 WGC3Denum format = GL_RGBA;
313 int pool = 1; 313 int pool = 1;
314 size_t pixelSize = textureSize(size, format); 314 size_t pixelSize = textureSize(size, format);
315 ASSERT_EQ(4U, pixelSize); 315 ASSERT_EQ(4U, pixelSize);
316 316
317 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s ize, format, ResourceProvider::TextureUsageAny); 317 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s ize, format, ResourceProvider::TextureUsageAny);
318 expectNumResources(1); 318 expectNumResources(1);
319 319
320 uint8_t data[4] = {1, 2, 3, 4}; 320 uint8_t data[4] = {1, 2, 3, 4};
321 IntRect rect(IntPoint(), size); 321 gfx::Rect rect(gfx::Point(), size);
322 m_resourceProvider->upload(id, data, rect, rect, IntSize()); 322 m_resourceProvider->upload(id, data, rect, rect, gfx::Vector2d());
323 323
324 uint8_t result[4] = {0}; 324 uint8_t result[4] = {0};
325 getResourcePixels(id, size, format, result); 325 getResourcePixels(id, size, format, result);
326 EXPECT_EQ(0, memcmp(data, result, pixelSize)); 326 EXPECT_EQ(0, memcmp(data, result, pixelSize));
327 327
328 m_resourceProvider->deleteResource(id); 328 m_resourceProvider->deleteResource(id);
329 expectNumResources(0); 329 expectNumResources(0);
330 } 330 }
331 331
332 TEST_P(ResourceProviderTest, DeleteOwnedResources) 332 TEST_P(ResourceProviderTest, DeleteOwnedResources)
333 { 333 {
334 IntSize size(1, 1); 334 gfx::Size size(1, 1);
335 WGC3Denum format = GL_RGBA; 335 WGC3Denum format = GL_RGBA;
336 int pool = 1; 336 int pool = 1;
337 337
338 const int count = 3; 338 const int count = 3;
339 for (int i = 0; i < count; ++i) 339 for (int i = 0; i < count; ++i)
340 m_resourceProvider->createResource(pool, size, format, ResourceProvider: :TextureUsageAny); 340 m_resourceProvider->createResource(pool, size, format, ResourceProvider: :TextureUsageAny);
341 expectNumResources(3); 341 expectNumResources(3);
342 342
343 m_resourceProvider->deleteOwnedResources(pool+1); 343 m_resourceProvider->deleteOwnedResources(pool+1);
344 expectNumResources(3); 344 expectNumResources(3);
345 345
346 m_resourceProvider->deleteOwnedResources(pool); 346 m_resourceProvider->deleteOwnedResources(pool);
347 expectNumResources(0); 347 expectNumResources(0);
348 } 348 }
349 349
350 TEST_P(ResourceProviderTest, Upload) 350 TEST_P(ResourceProviderTest, Upload)
351 { 351 {
352 IntSize size(2, 2); 352 gfx::Size size(2, 2);
353 WGC3Denum format = GL_RGBA; 353 WGC3Denum format = GL_RGBA;
354 int pool = 1; 354 int pool = 1;
355 size_t pixelSize = textureSize(size, format); 355 size_t pixelSize = textureSize(size, format);
356 ASSERT_EQ(16U, pixelSize); 356 ASSERT_EQ(16U, pixelSize);
357 357
358 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s ize, format, ResourceProvider::TextureUsageAny); 358 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s ize, format, ResourceProvider::TextureUsageAny);
359 359
360 uint8_t image[16] = {0}; 360 uint8_t image[16] = {0};
361 IntRect imageRect(IntPoint(), size); 361 gfx::Rect imageRect(gfx::Point(), size);
362 m_resourceProvider->upload(id, image, imageRect, imageRect, IntSize()); 362 m_resourceProvider->upload(id, image, imageRect, imageRect, gfx::Vector2d()) ;
363 363
364 for (uint8_t i = 0 ; i < pixelSize; ++i) 364 for (uint8_t i = 0 ; i < pixelSize; ++i)
365 image[i] = i; 365 image[i] = i;
366 366
367 uint8_t result[16] = {0}; 367 uint8_t result[16] = {0};
368 { 368 {
369 IntRect sourceRect(0, 0, 1, 1); 369 gfx::Rect sourceRect(0, 0, 1, 1);
370 IntSize destOffset(0, 0); 370 gfx::Vector2d destOffset(0, 0);
371 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ; 371 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ;
372 372
373 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0, 373 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
374 0, 0, 0, 0, 0, 0, 0, 0}; 374 0, 0, 0, 0, 0, 0, 0, 0};
375 getResourcePixels(id, size, format, result); 375 getResourcePixels(id, size, format, result);
376 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); 376 EXPECT_EQ(0, memcmp(expected, result, pixelSize));
377 } 377 }
378 { 378 {
379 IntRect sourceRect(0, 0, 1, 1); 379 gfx::Rect sourceRect(0, 0, 1, 1);
380 IntSize destOffset(1, 1); 380 gfx::Vector2d destOffset(1, 1);
381 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ; 381 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ;
382 382
383 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0, 383 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
384 0, 0, 0, 0, 0, 1, 2, 3}; 384 0, 0, 0, 0, 0, 1, 2, 3};
385 getResourcePixels(id, size, format, result); 385 getResourcePixels(id, size, format, result);
386 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); 386 EXPECT_EQ(0, memcmp(expected, result, pixelSize));
387 } 387 }
388 { 388 {
389 IntRect sourceRect(1, 0, 1, 1); 389 gfx::Rect sourceRect(1, 0, 1, 1);
390 IntSize destOffset(0, 1); 390 gfx::Vector2d destOffset(0, 1);
391 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ; 391 m_resourceProvider->upload(id, image, imageRect, sourceRect, destOffset) ;
392 392
393 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0, 393 uint8_t expected[16] = {0, 1, 2, 3, 0, 0, 0, 0,
394 4, 5, 6, 7, 0, 1, 2, 3}; 394 4, 5, 6, 7, 0, 1, 2, 3};
395 getResourcePixels(id, size, format, result); 395 getResourcePixels(id, size, format, result);
396 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); 396 EXPECT_EQ(0, memcmp(expected, result, pixelSize));
397 } 397 }
398 { 398 {
399 IntRect offsetImageRect(IntPoint(100, 100), size); 399 gfx::Rect offsetImageRect(gfx::Point(100, 100), size);
400 IntRect sourceRect(100, 100, 1, 1); 400 gfx::Rect sourceRect(100, 100, 1, 1);
401 IntSize destOffset(1, 0); 401 gfx::Vector2d destOffset(1, 0);
402 m_resourceProvider->upload(id, image, offsetImageRect, sourceRect, destO ffset); 402 m_resourceProvider->upload(id, image, offsetImageRect, sourceRect, destO ffset);
403 403
404 uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3, 404 uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3,
405 4, 5, 6, 7, 0, 1, 2, 3}; 405 4, 5, 6, 7, 0, 1, 2, 3};
406 getResourcePixels(id, size, format, result); 406 getResourcePixels(id, size, format, result);
407 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); 407 EXPECT_EQ(0, memcmp(expected, result, pixelSize));
408 } 408 }
409 409
410 410
411 m_resourceProvider->deleteResource(id); 411 m_resourceProvider->deleteResource(id);
412 } 412 }
413 413
414 TEST_P(ResourceProviderTest, TransferResources) 414 TEST_P(ResourceProviderTest, TransferResources)
415 { 415 {
416 // Resource transfer is only supported with GL textures for now. 416 // Resource transfer is only supported with GL textures for now.
417 if (GetParam() != ResourceProvider::GLTexture) 417 if (GetParam() != ResourceProvider::GLTexture)
418 return; 418 return;
419 419
420 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi csContext3D>())); 420 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi csContext3D>()));
421 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create( childContext.get())); 421 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create( childContext.get()));
422 422
423 IntSize size(1, 1); 423 gfx::Size size(1, 1);
424 WGC3Denum format = GL_RGBA; 424 WGC3Denum format = GL_RGBA;
425 int pool = 1; 425 int pool = 1;
426 size_t pixelSize = textureSize(size, format); 426 size_t pixelSize = textureSize(size, format);
427 ASSERT_EQ(4U, pixelSize); 427 ASSERT_EQ(4U, pixelSize);
428 428
429 ResourceProvider::ResourceId id1 = childResourceProvider->createResource(poo l, size, format, ResourceProvider::TextureUsageAny); 429 ResourceProvider::ResourceId id1 = childResourceProvider->createResource(poo l, size, format, ResourceProvider::TextureUsageAny);
430 uint8_t data1[4] = {1, 2, 3, 4}; 430 uint8_t data1[4] = {1, 2, 3, 4};
431 IntRect rect(IntPoint(), size); 431 gfx::Rect rect(gfx::Point(), size);
432 childResourceProvider->upload(id1, data1, rect, rect, IntSize()); 432 childResourceProvider->upload(id1, data1, rect, rect, gfx::Vector2d());
433 433
434 ResourceProvider::ResourceId id2 = childResourceProvider->createResource(poo l, size, format, ResourceProvider::TextureUsageAny); 434 ResourceProvider::ResourceId id2 = childResourceProvider->createResource(poo l, size, format, ResourceProvider::TextureUsageAny);
435 uint8_t data2[4] = {5, 5, 5, 5}; 435 uint8_t data2[4] = {5, 5, 5, 5};
436 childResourceProvider->upload(id2, data2, rect, rect, IntSize()); 436 childResourceProvider->upload(id2, data2, rect, rect, gfx::Vector2d());
437 437
438 int childPool = 2; 438 int childPool = 2;
439 int childId = m_resourceProvider->createChild(childPool); 439 int childId = m_resourceProvider->createChild(childPool);
440 440
441 { 441 {
442 // Transfer some resources to the parent. 442 // Transfer some resources to the parent.
443 ResourceProvider::ResourceIdArray resourceIdsToTransfer; 443 ResourceProvider::ResourceIdArray resourceIdsToTransfer;
444 resourceIdsToTransfer.push_back(id1); 444 resourceIdsToTransfer.push_back(id1);
445 resourceIdsToTransfer.push_back(id2); 445 resourceIdsToTransfer.push_back(id2);
446 ResourceProvider::TransferableResourceList list = childResourceProvider- >prepareSendToParent(resourceIdsToTransfer); 446 ResourceProvider::TransferableResourceList list = childResourceProvider- >prepareSendToParent(resourceIdsToTransfer);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 530
531 TEST_P(ResourceProviderTest, DeleteTransferredResources) 531 TEST_P(ResourceProviderTest, DeleteTransferredResources)
532 { 532 {
533 // Resource transfer is only supported with GL textures for now. 533 // Resource transfer is only supported with GL textures for now.
534 if (GetParam() != ResourceProvider::GLTexture) 534 if (GetParam() != ResourceProvider::GLTexture)
535 return; 535 return;
536 536
537 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi csContext3D>())); 537 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi csContext3D>()));
538 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create( childContext.get())); 538 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create( childContext.get()));
539 539
540 IntSize size(1, 1); 540 gfx::Size size(1, 1);
541 WGC3Denum format = GL_RGBA; 541 WGC3Denum format = GL_RGBA;
542 int pool = 1; 542 int pool = 1;
543 size_t pixelSize = textureSize(size, format); 543 size_t pixelSize = textureSize(size, format);
544 ASSERT_EQ(4U, pixelSize); 544 ASSERT_EQ(4U, pixelSize);
545 545
546 ResourceProvider::ResourceId id = childResourceProvider->createResource(pool , size, format, ResourceProvider::TextureUsageAny); 546 ResourceProvider::ResourceId id = childResourceProvider->createResource(pool , size, format, ResourceProvider::TextureUsageAny);
547 uint8_t data[4] = {1, 2, 3, 4}; 547 uint8_t data[4] = {1, 2, 3, 4};
548 IntRect rect(IntPoint(), size); 548 gfx::Rect rect(gfx::Point(), size);
549 childResourceProvider->upload(id, data, rect, rect, IntSize()); 549 childResourceProvider->upload(id, data, rect, rect, gfx::Vector2d());
550 550
551 int childPool = 2; 551 int childPool = 2;
552 int childId = m_resourceProvider->createChild(childPool); 552 int childId = m_resourceProvider->createChild(childPool);
553 553
554 { 554 {
555 // Transfer some resource to the parent. 555 // Transfer some resource to the parent.
556 ResourceProvider::ResourceIdArray resourceIdsToTransfer; 556 ResourceProvider::ResourceIdArray resourceIdsToTransfer;
557 resourceIdsToTransfer.push_back(id); 557 resourceIdsToTransfer.push_back(id);
558 ResourceProvider::TransferableResourceList list = childResourceProvider- >prepareSendToParent(resourceIdsToTransfer); 558 ResourceProvider::TransferableResourceList list = childResourceProvider- >prepareSendToParent(resourceIdsToTransfer);
559 EXPECT_NE(0u, list.syncPoint); 559 EXPECT_NE(0u, list.syncPoint);
(...skipping 20 matching lines...) Expand all
580 } 580 }
581 EXPECT_EQ(0u, childResourceProvider->numResources()); 581 EXPECT_EQ(0u, childResourceProvider->numResources());
582 } 582 }
583 583
584 INSTANTIATE_TEST_CASE_P(ResourceProviderTests, 584 INSTANTIATE_TEST_CASE_P(ResourceProviderTests,
585 ResourceProviderTest, 585 ResourceProviderTest,
586 ::testing::Values(ResourceProvider::GLTexture, 586 ::testing::Values(ResourceProvider::GLTexture,
587 ResourceProvider::Bitmap)); 587 ResourceProvider::Bitmap));
588 588
589 } // namespace 589 } // namespace
OLDNEW
« no previous file with comments | « cc/resource_provider.cc ('k') | cc/resource_update.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698