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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "CCResourceProvider.h" | 7 #include "CCResourceProvider.h" |
8 | 8 |
9 #include "CCGraphicsContext.h" | 9 #include "CCGraphicsContext.h" |
10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread | 10 #include "CCSingleThreadProxy.h" // For DebugScopedSetImplThread |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 scoped_ptr<Texture> texture; | 258 scoped_ptr<Texture> texture; |
259 }; | 259 }; |
260 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList; | 260 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList; |
261 ContextSharedData* m_sharedData; | 261 ContextSharedData* m_sharedData; |
262 WebGLId m_currentTexture; | 262 WebGLId m_currentTexture; |
263 TextureMap m_textures; | 263 TextureMap m_textures; |
264 unsigned m_lastWaitedSyncPoint; | 264 unsigned m_lastWaitedSyncPoint; |
265 PendingProduceTextureList m_pendingProduceTextures; | 265 PendingProduceTextureList m_pendingProduceTextures; |
266 }; | 266 }; |
267 | 267 |
268 class CCResourceProviderTest : public testing::TestWithParam<CCResourceProvider:
:ResourceType> { | 268 class ResourceProviderTest : public testing::TestWithParam<ResourceProvider::Res
ourceType> { |
269 public: | 269 public: |
270 CCResourceProviderTest() | 270 ResourceProviderTest() |
271 : m_sharedData(ContextSharedData::create()) | 271 : m_sharedData(ContextSharedData::create()) |
272 , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderConte
xt::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<Web
Kit::WebGraphicsContext3D>())) | 272 , m_context(FakeWebCompositorOutputSurface::create(ResourceProviderConte
xt::create(m_sharedData.get()).PassAs<WebKit::WebGraphicsContext3D>().PassAs<Web
Kit::WebGraphicsContext3D>())) |
273 , m_resourceProvider(CCResourceProvider::create(m_context.get())) | 273 , m_resourceProvider(ResourceProvider::create(m_context.get())) |
274 { | 274 { |
275 m_resourceProvider->setDefaultResourceType(GetParam()); | 275 m_resourceProvider->setDefaultResourceType(GetParam()); |
276 } | 276 } |
277 | 277 |
278 ResourceProviderContext* context() { return static_cast<ResourceProviderCont
ext*>(m_context->context3D()); } | 278 ResourceProviderContext* context() { return static_cast<ResourceProviderCont
ext*>(m_context->context3D()); } |
279 | 279 |
280 void getResourcePixels(CCResourceProvider::ResourceId id, const IntSize& siz
e, WGC3Denum format, uint8_t* pixels) | 280 void getResourcePixels(ResourceProvider::ResourceId id, const IntSize& size,
WGC3Denum format, uint8_t* pixels) |
281 { | 281 { |
282 if (GetParam() == CCResourceProvider::GLTexture) { | 282 if (GetParam() == ResourceProvider::GLTexture) { |
283 CCResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get()
, id); | 283 ResourceProvider::ScopedReadLockGL lockGL(m_resourceProvider.get(),
id); |
284 ASSERT_NE(0U, lockGL.textureId()); | 284 ASSERT_NE(0U, lockGL.textureId()); |
285 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, lockGL.texture
Id()); | 285 context()->bindTexture(GraphicsContext3D::TEXTURE_2D, lockGL.texture
Id()); |
286 context()->getPixels(size, format, pixels); | 286 context()->getPixels(size, format, pixels); |
287 } else if (GetParam() == CCResourceProvider::Bitmap) { | 287 } else if (GetParam() == ResourceProvider::Bitmap) { |
288 CCResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourcePr
ovider.get(), id); | 288 ResourceProvider::ScopedReadLockSoftware lockSoftware(m_resourceProv
ider.get(), id); |
289 memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.sk
Bitmap()->getSize()); | 289 memcpy(pixels, lockSoftware.skBitmap()->getPixels(), lockSoftware.sk
Bitmap()->getSize()); |
290 } | 290 } |
291 } | 291 } |
292 | 292 |
293 void expectNumResources(int count) | 293 void expectNumResources(int count) |
294 { | 294 { |
295 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources())); | 295 EXPECT_EQ(count, static_cast<int>(m_resourceProvider->numResources())); |
296 if (GetParam() == CCResourceProvider::GLTexture) | 296 if (GetParam() == ResourceProvider::GLTexture) |
297 EXPECT_EQ(count, context()->textureCount()); | 297 EXPECT_EQ(count, context()->textureCount()); |
298 } | 298 } |
299 | 299 |
300 protected: | 300 protected: |
301 DebugScopedSetImplThread implThread; | 301 DebugScopedSetImplThread implThread; |
302 scoped_ptr<ContextSharedData> m_sharedData; | 302 scoped_ptr<ContextSharedData> m_sharedData; |
303 scoped_ptr<CCGraphicsContext> m_context; | 303 scoped_ptr<GraphicsContext> m_context; |
304 scoped_ptr<CCResourceProvider> m_resourceProvider; | 304 scoped_ptr<ResourceProvider> m_resourceProvider; |
305 }; | 305 }; |
306 | 306 |
307 TEST_P(CCResourceProviderTest, Basic) | 307 TEST_P(ResourceProviderTest, Basic) |
308 { | 308 { |
309 IntSize size(1, 1); | 309 IntSize size(1, 1); |
310 WGC3Denum format = GraphicsContext3D::RGBA; | 310 WGC3Denum format = GraphicsContext3D::RGBA; |
311 int pool = 1; | 311 int pool = 1; |
312 size_t pixelSize = textureSize(size, format); | 312 size_t pixelSize = textureSize(size, format); |
313 ASSERT_EQ(4U, pixelSize); | 313 ASSERT_EQ(4U, pixelSize); |
314 | 314 |
315 CCResourceProvider::ResourceId id = m_resourceProvider->createResource(pool,
size, format, CCResourceProvider::TextureUsageAny); | 315 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s
ize, format, ResourceProvider::TextureUsageAny); |
316 expectNumResources(1); | 316 expectNumResources(1); |
317 | 317 |
318 uint8_t data[4] = {1, 2, 3, 4}; | 318 uint8_t data[4] = {1, 2, 3, 4}; |
319 IntRect rect(IntPoint(), size); | 319 IntRect rect(IntPoint(), size); |
320 m_resourceProvider->upload(id, data, rect, rect, IntSize()); | 320 m_resourceProvider->upload(id, data, rect, rect, IntSize()); |
321 | 321 |
322 uint8_t result[4] = {0}; | 322 uint8_t result[4] = {0}; |
323 getResourcePixels(id, size, format, result); | 323 getResourcePixels(id, size, format, result); |
324 EXPECT_EQ(0, memcmp(data, result, pixelSize)); | 324 EXPECT_EQ(0, memcmp(data, result, pixelSize)); |
325 | 325 |
326 m_resourceProvider->deleteResource(id); | 326 m_resourceProvider->deleteResource(id); |
327 expectNumResources(0); | 327 expectNumResources(0); |
328 } | 328 } |
329 | 329 |
330 TEST_P(CCResourceProviderTest, DeleteOwnedResources) | 330 TEST_P(ResourceProviderTest, DeleteOwnedResources) |
331 { | 331 { |
332 IntSize size(1, 1); | 332 IntSize size(1, 1); |
333 WGC3Denum format = GraphicsContext3D::RGBA; | 333 WGC3Denum format = GraphicsContext3D::RGBA; |
334 int pool = 1; | 334 int pool = 1; |
335 | 335 |
336 const int count = 3; | 336 const int count = 3; |
337 for (int i = 0; i < count; ++i) | 337 for (int i = 0; i < count; ++i) |
338 m_resourceProvider->createResource(pool, size, format, CCResourceProvide
r::TextureUsageAny); | 338 m_resourceProvider->createResource(pool, size, format, ResourceProvider:
:TextureUsageAny); |
339 expectNumResources(3); | 339 expectNumResources(3); |
340 | 340 |
341 m_resourceProvider->deleteOwnedResources(pool+1); | 341 m_resourceProvider->deleteOwnedResources(pool+1); |
342 expectNumResources(3); | 342 expectNumResources(3); |
343 | 343 |
344 m_resourceProvider->deleteOwnedResources(pool); | 344 m_resourceProvider->deleteOwnedResources(pool); |
345 expectNumResources(0); | 345 expectNumResources(0); |
346 } | 346 } |
347 | 347 |
348 TEST_P(CCResourceProviderTest, Upload) | 348 TEST_P(ResourceProviderTest, Upload) |
349 { | 349 { |
350 IntSize size(2, 2); | 350 IntSize size(2, 2); |
351 WGC3Denum format = GraphicsContext3D::RGBA; | 351 WGC3Denum format = GraphicsContext3D::RGBA; |
352 int pool = 1; | 352 int pool = 1; |
353 size_t pixelSize = textureSize(size, format); | 353 size_t pixelSize = textureSize(size, format); |
354 ASSERT_EQ(16U, pixelSize); | 354 ASSERT_EQ(16U, pixelSize); |
355 | 355 |
356 CCResourceProvider::ResourceId id = m_resourceProvider->createResource(pool,
size, format, CCResourceProvider::TextureUsageAny); | 356 ResourceProvider::ResourceId id = m_resourceProvider->createResource(pool, s
ize, format, ResourceProvider::TextureUsageAny); |
357 | 357 |
358 uint8_t image[16] = {0}; | 358 uint8_t image[16] = {0}; |
359 IntRect imageRect(IntPoint(), size); | 359 IntRect imageRect(IntPoint(), size); |
360 m_resourceProvider->upload(id, image, imageRect, imageRect, IntSize()); | 360 m_resourceProvider->upload(id, image, imageRect, imageRect, IntSize()); |
361 | 361 |
362 for (uint8_t i = 0 ; i < pixelSize; ++i) | 362 for (uint8_t i = 0 ; i < pixelSize; ++i) |
363 image[i] = i; | 363 image[i] = i; |
364 | 364 |
365 uint8_t result[16] = {0}; | 365 uint8_t result[16] = {0}; |
366 { | 366 { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3, | 402 uint8_t expected[16] = {0, 1, 2, 3, 0, 1, 2, 3, |
403 4, 5, 6, 7, 0, 1, 2, 3}; | 403 4, 5, 6, 7, 0, 1, 2, 3}; |
404 getResourcePixels(id, size, format, result); | 404 getResourcePixels(id, size, format, result); |
405 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); | 405 EXPECT_EQ(0, memcmp(expected, result, pixelSize)); |
406 } | 406 } |
407 | 407 |
408 | 408 |
409 m_resourceProvider->deleteResource(id); | 409 m_resourceProvider->deleteResource(id); |
410 } | 410 } |
411 | 411 |
412 TEST_P(CCResourceProviderTest, TransferResources) | 412 TEST_P(ResourceProviderTest, TransferResources) |
413 { | 413 { |
414 // Resource transfer is only supported with GL textures for now. | 414 // Resource transfer is only supported with GL textures for now. |
415 if (GetParam() != CCResourceProvider::GLTexture) | 415 if (GetParam() != ResourceProvider::GLTexture) |
416 return; | 416 return; |
417 | 417 |
418 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c
reate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGrap
hicsContext3D>())); | 418 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre
ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi
csContext3D>())); |
419 scoped_ptr<CCResourceProvider> childResourceProvider(CCResourceProvider::cre
ate(childContext.get())); | 419 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); |
420 | 420 |
421 IntSize size(1, 1); | 421 IntSize size(1, 1); |
422 WGC3Denum format = GraphicsContext3D::RGBA; | 422 WGC3Denum format = GraphicsContext3D::RGBA; |
423 int pool = 1; | 423 int pool = 1; |
424 size_t pixelSize = textureSize(size, format); | 424 size_t pixelSize = textureSize(size, format); |
425 ASSERT_EQ(4U, pixelSize); | 425 ASSERT_EQ(4U, pixelSize); |
426 | 426 |
427 CCResourceProvider::ResourceId id1 = childResourceProvider->createResource(p
ool, size, format, CCResourceProvider::TextureUsageAny); | 427 ResourceProvider::ResourceId id1 = childResourceProvider->createResource(poo
l, size, format, ResourceProvider::TextureUsageAny); |
428 uint8_t data1[4] = {1, 2, 3, 4}; | 428 uint8_t data1[4] = {1, 2, 3, 4}; |
429 IntRect rect(IntPoint(), size); | 429 IntRect rect(IntPoint(), size); |
430 childResourceProvider->upload(id1, data1, rect, rect, IntSize()); | 430 childResourceProvider->upload(id1, data1, rect, rect, IntSize()); |
431 | 431 |
432 CCResourceProvider::ResourceId id2 = childResourceProvider->createResource(p
ool, size, format, CCResourceProvider::TextureUsageAny); | 432 ResourceProvider::ResourceId id2 = childResourceProvider->createResource(poo
l, size, format, ResourceProvider::TextureUsageAny); |
433 uint8_t data2[4] = {5, 5, 5, 5}; | 433 uint8_t data2[4] = {5, 5, 5, 5}; |
434 childResourceProvider->upload(id2, data2, rect, rect, IntSize()); | 434 childResourceProvider->upload(id2, data2, rect, rect, IntSize()); |
435 | 435 |
436 int childPool = 2; | 436 int childPool = 2; |
437 int childId = m_resourceProvider->createChild(childPool); | 437 int childId = m_resourceProvider->createChild(childPool); |
438 | 438 |
439 { | 439 { |
440 // Transfer some resources to the parent. | 440 // Transfer some resources to the parent. |
441 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 441 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
442 resourceIdsToTransfer.push_back(id1); | 442 resourceIdsToTransfer.push_back(id1); |
443 resourceIdsToTransfer.push_back(id2); | 443 resourceIdsToTransfer.push_back(id2); |
444 CCResourceProvider::TransferableResourceList list = childResourceProvide
r->prepareSendToParent(resourceIdsToTransfer); | 444 ResourceProvider::TransferableResourceList list = childResourceProvider-
>prepareSendToParent(resourceIdsToTransfer); |
445 EXPECT_NE(0u, list.syncPoint); | 445 EXPECT_NE(0u, list.syncPoint); |
446 EXPECT_EQ(2u, list.resources.size()); | 446 EXPECT_EQ(2u, list.resources.size()); |
447 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); | 447 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); |
448 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); | 448 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); |
449 m_resourceProvider->receiveFromChild(childId, list); | 449 m_resourceProvider->receiveFromChild(childId, list); |
450 } | 450 } |
451 | 451 |
452 EXPECT_EQ(2u, m_resourceProvider->numResources()); | 452 EXPECT_EQ(2u, m_resourceProvider->numResources()); |
453 EXPECT_EQ(2u, m_resourceProvider->mailboxCount()); | 453 EXPECT_EQ(2u, m_resourceProvider->mailboxCount()); |
454 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChild
ToParentMap(childId); | 454 ResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChildTo
ParentMap(childId); |
455 CCResourceProvider::ResourceId mappedId1 = resourceMap[id1]; | 455 ResourceProvider::ResourceId mappedId1 = resourceMap[id1]; |
456 CCResourceProvider::ResourceId mappedId2 = resourceMap[id2]; | 456 ResourceProvider::ResourceId mappedId2 = resourceMap[id2]; |
457 EXPECT_NE(0u, mappedId1); | 457 EXPECT_NE(0u, mappedId1); |
458 EXPECT_NE(0u, mappedId2); | 458 EXPECT_NE(0u, mappedId2); |
459 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id1)); | 459 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id1)); |
460 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id2)); | 460 EXPECT_FALSE(m_resourceProvider->inUseByConsumer(id2)); |
461 | 461 |
462 uint8_t result[4] = {0}; | 462 uint8_t result[4] = {0}; |
463 getResourcePixels(mappedId1, size, format, result); | 463 getResourcePixels(mappedId1, size, format, result); |
464 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); | 464 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); |
465 | 465 |
466 getResourcePixels(mappedId2, size, format, result); | 466 getResourcePixels(mappedId2, size, format, result); |
467 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); | 467 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); |
468 | 468 |
469 { | 469 { |
470 // Check that transfering again the same resource from the child to the | 470 // Check that transfering again the same resource from the child to the |
471 // parent is a noop. | 471 // parent is a noop. |
472 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 472 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
473 resourceIdsToTransfer.push_back(id1); | 473 resourceIdsToTransfer.push_back(id1); |
474 CCResourceProvider::TransferableResourceList list = childResourceProvide
r->prepareSendToParent(resourceIdsToTransfer); | 474 ResourceProvider::TransferableResourceList list = childResourceProvider-
>prepareSendToParent(resourceIdsToTransfer); |
475 EXPECT_EQ(0u, list.syncPoint); | 475 EXPECT_EQ(0u, list.syncPoint); |
476 EXPECT_EQ(0u, list.resources.size()); | 476 EXPECT_EQ(0u, list.resources.size()); |
477 } | 477 } |
478 | 478 |
479 { | 479 { |
480 // Transfer resources back from the parent to the child. | 480 // Transfer resources back from the parent to the child. |
481 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 481 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
482 resourceIdsToTransfer.push_back(mappedId1); | 482 resourceIdsToTransfer.push_back(mappedId1); |
483 resourceIdsToTransfer.push_back(mappedId2); | 483 resourceIdsToTransfer.push_back(mappedId2); |
484 CCResourceProvider::TransferableResourceList list = m_resourceProvider->
prepareSendToChild(childId, resourceIdsToTransfer); | 484 ResourceProvider::TransferableResourceList list = m_resourceProvider->pr
epareSendToChild(childId, resourceIdsToTransfer); |
485 EXPECT_NE(0u, list.syncPoint); | 485 EXPECT_NE(0u, list.syncPoint); |
486 EXPECT_EQ(2u, list.resources.size()); | 486 EXPECT_EQ(2u, list.resources.size()); |
487 childResourceProvider->receiveFromParent(list); | 487 childResourceProvider->receiveFromParent(list); |
488 } | 488 } |
489 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); | 489 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); |
490 EXPECT_EQ(2u, childResourceProvider->mailboxCount()); | 490 EXPECT_EQ(2u, childResourceProvider->mailboxCount()); |
491 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1)); | 491 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id1)); |
492 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2)); | 492 EXPECT_FALSE(childResourceProvider->inUseByConsumer(id2)); |
493 | 493 |
494 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex
t*>(childContext->context3D()); | 494 ResourceProviderContext* childContext3D = static_cast<ResourceProviderContex
t*>(childContext->context3D()); |
495 { | 495 { |
496 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i
d1); | 496 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id1
); |
497 ASSERT_NE(0U, lock.textureId()); | 497 ASSERT_NE(0U, lock.textureId()); |
498 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI
d()); | 498 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI
d()); |
499 childContext3D->getPixels(size, format, result); | 499 childContext3D->getPixels(size, format, result); |
500 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); | 500 EXPECT_EQ(0, memcmp(data1, result, pixelSize)); |
501 } | 501 } |
502 { | 502 { |
503 CCResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), i
d2); | 503 ResourceProvider::ScopedReadLockGL lock(childResourceProvider.get(), id2
); |
504 ASSERT_NE(0U, lock.textureId()); | 504 ASSERT_NE(0U, lock.textureId()); |
505 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI
d()); | 505 childContext3D->bindTexture(GraphicsContext3D::TEXTURE_2D, lock.textureI
d()); |
506 childContext3D->getPixels(size, format, result); | 506 childContext3D->getPixels(size, format, result); |
507 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); | 507 EXPECT_EQ(0, memcmp(data2, result, pixelSize)); |
508 } | 508 } |
509 | 509 |
510 { | 510 { |
511 // Transfer resources to the parent again. | 511 // Transfer resources to the parent again. |
512 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 512 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
513 resourceIdsToTransfer.push_back(id1); | 513 resourceIdsToTransfer.push_back(id1); |
514 resourceIdsToTransfer.push_back(id2); | 514 resourceIdsToTransfer.push_back(id2); |
515 CCResourceProvider::TransferableResourceList list = childResourceProvide
r->prepareSendToParent(resourceIdsToTransfer); | 515 ResourceProvider::TransferableResourceList list = childResourceProvider-
>prepareSendToParent(resourceIdsToTransfer); |
516 EXPECT_NE(0u, list.syncPoint); | 516 EXPECT_NE(0u, list.syncPoint); |
517 EXPECT_EQ(2u, list.resources.size()); | 517 EXPECT_EQ(2u, list.resources.size()); |
518 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); | 518 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id1)); |
519 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); | 519 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id2)); |
520 m_resourceProvider->receiveFromChild(childId, list); | 520 m_resourceProvider->receiveFromChild(childId, list); |
521 } | 521 } |
522 | 522 |
523 EXPECT_EQ(2u, m_resourceProvider->numResources()); | 523 EXPECT_EQ(2u, m_resourceProvider->numResources()); |
524 m_resourceProvider->destroyChild(childId); | 524 m_resourceProvider->destroyChild(childId); |
525 EXPECT_EQ(0u, m_resourceProvider->numResources()); | 525 EXPECT_EQ(0u, m_resourceProvider->numResources()); |
526 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); | 526 EXPECT_EQ(0u, m_resourceProvider->mailboxCount()); |
527 } | 527 } |
528 | 528 |
529 TEST_P(CCResourceProviderTest, DeleteTransferredResources) | 529 TEST_P(ResourceProviderTest, DeleteTransferredResources) |
530 { | 530 { |
531 // Resource transfer is only supported with GL textures for now. | 531 // Resource transfer is only supported with GL textures for now. |
532 if (GetParam() != CCResourceProvider::GLTexture) | 532 if (GetParam() != ResourceProvider::GLTexture) |
533 return; | 533 return; |
534 | 534 |
535 scoped_ptr<CCGraphicsContext> childContext(FakeWebCompositorOutputSurface::c
reate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGrap
hicsContext3D>())); | 535 scoped_ptr<GraphicsContext> childContext(FakeWebCompositorOutputSurface::cre
ate(ResourceProviderContext::create(m_sharedData.get()).PassAs<WebKit::WebGraphi
csContext3D>())); |
536 scoped_ptr<CCResourceProvider> childResourceProvider(CCResourceProvider::cre
ate(childContext.get())); | 536 scoped_ptr<ResourceProvider> childResourceProvider(ResourceProvider::create(
childContext.get())); |
537 | 537 |
538 IntSize size(1, 1); | 538 IntSize size(1, 1); |
539 WGC3Denum format = GraphicsContext3D::RGBA; | 539 WGC3Denum format = GraphicsContext3D::RGBA; |
540 int pool = 1; | 540 int pool = 1; |
541 size_t pixelSize = textureSize(size, format); | 541 size_t pixelSize = textureSize(size, format); |
542 ASSERT_EQ(4U, pixelSize); | 542 ASSERT_EQ(4U, pixelSize); |
543 | 543 |
544 CCResourceProvider::ResourceId id = childResourceProvider->createResource(po
ol, size, format, CCResourceProvider::TextureUsageAny); | 544 ResourceProvider::ResourceId id = childResourceProvider->createResource(pool
, size, format, ResourceProvider::TextureUsageAny); |
545 uint8_t data[4] = {1, 2, 3, 4}; | 545 uint8_t data[4] = {1, 2, 3, 4}; |
546 IntRect rect(IntPoint(), size); | 546 IntRect rect(IntPoint(), size); |
547 childResourceProvider->upload(id, data, rect, rect, IntSize()); | 547 childResourceProvider->upload(id, data, rect, rect, IntSize()); |
548 | 548 |
549 int childPool = 2; | 549 int childPool = 2; |
550 int childId = m_resourceProvider->createChild(childPool); | 550 int childId = m_resourceProvider->createChild(childPool); |
551 | 551 |
552 { | 552 { |
553 // Transfer some resource to the parent. | 553 // Transfer some resource to the parent. |
554 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 554 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
555 resourceIdsToTransfer.push_back(id); | 555 resourceIdsToTransfer.push_back(id); |
556 CCResourceProvider::TransferableResourceList list = childResourceProvide
r->prepareSendToParent(resourceIdsToTransfer); | 556 ResourceProvider::TransferableResourceList list = childResourceProvider-
>prepareSendToParent(resourceIdsToTransfer); |
557 EXPECT_NE(0u, list.syncPoint); | 557 EXPECT_NE(0u, list.syncPoint); |
558 EXPECT_EQ(1u, list.resources.size()); | 558 EXPECT_EQ(1u, list.resources.size()); |
559 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id)); | 559 EXPECT_TRUE(childResourceProvider->inUseByConsumer(id)); |
560 m_resourceProvider->receiveFromChild(childId, list); | 560 m_resourceProvider->receiveFromChild(childId, list); |
561 } | 561 } |
562 | 562 |
563 // Delete textures in the child, while they are transfered. | 563 // Delete textures in the child, while they are transfered. |
564 childResourceProvider->deleteResource(id); | 564 childResourceProvider->deleteResource(id); |
565 EXPECT_EQ(1u, childResourceProvider->numResources()); | 565 EXPECT_EQ(1u, childResourceProvider->numResources()); |
566 | 566 |
567 { | 567 { |
568 // Transfer resources back from the parent to the child. | 568 // Transfer resources back from the parent to the child. |
569 CCResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getC
hildToParentMap(childId); | 569 ResourceProvider::ResourceIdMap resourceMap = m_resourceProvider->getChi
ldToParentMap(childId); |
570 CCResourceProvider::ResourceId mappedId = resourceMap[id]; | 570 ResourceProvider::ResourceId mappedId = resourceMap[id]; |
571 EXPECT_NE(0u, mappedId); | 571 EXPECT_NE(0u, mappedId); |
572 CCResourceProvider::ResourceIdArray resourceIdsToTransfer; | 572 ResourceProvider::ResourceIdArray resourceIdsToTransfer; |
573 resourceIdsToTransfer.push_back(mappedId); | 573 resourceIdsToTransfer.push_back(mappedId); |
574 CCResourceProvider::TransferableResourceList list = m_resourceProvider->
prepareSendToChild(childId, resourceIdsToTransfer); | 574 ResourceProvider::TransferableResourceList list = m_resourceProvider->pr
epareSendToChild(childId, resourceIdsToTransfer); |
575 EXPECT_NE(0u, list.syncPoint); | 575 EXPECT_NE(0u, list.syncPoint); |
576 EXPECT_EQ(1u, list.resources.size()); | 576 EXPECT_EQ(1u, list.resources.size()); |
577 childResourceProvider->receiveFromParent(list); | 577 childResourceProvider->receiveFromParent(list); |
578 } | 578 } |
579 EXPECT_EQ(0u, childResourceProvider->numResources()); | 579 EXPECT_EQ(0u, childResourceProvider->numResources()); |
580 } | 580 } |
581 | 581 |
582 INSTANTIATE_TEST_CASE_P(CCResourceProviderTests, | 582 INSTANTIATE_TEST_CASE_P(ResourceProviderTests, |
583 CCResourceProviderTest, | 583 ResourceProviderTest, |
584 ::testing::Values(CCResourceProvider::GLTexture, | 584 ::testing::Values(ResourceProvider::GLTexture, |
585 CCResourceProvider::Bitmap)); | 585 ResourceProvider::Bitmap)); |
586 | 586 |
587 } // namespace | 587 } // namespace |
OLD | NEW |