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

Side by Side Diff: cc/resources/resource_provider_unittest.cc

Issue 812543002: Update from https://crrev.com/308331 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/scoped_gpu_raster.cc » ('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 "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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 bool* release_lost_resource, 52 bool* release_lost_resource,
53 BlockingTaskRunner** release_main_thread_task_runner, 53 BlockingTaskRunner** release_main_thread_task_runner,
54 uint32 sync_point, 54 uint32 sync_point,
55 bool lost_resource, 55 bool lost_resource,
56 BlockingTaskRunner* main_thread_task_runner) { 56 BlockingTaskRunner* main_thread_task_runner) {
57 *release_sync_point = sync_point; 57 *release_sync_point = sync_point;
58 *release_lost_resource = lost_resource; 58 *release_lost_resource = lost_resource;
59 *release_main_thread_task_runner = main_thread_task_runner; 59 *release_main_thread_task_runner = main_thread_task_runner;
60 } 60 }
61 61
62 static void SharedMemoryReleaseCallback( 62 static void SharedBitmapReleaseCallback(
63 scoped_ptr<base::SharedMemory> memory, 63 scoped_ptr<SharedBitmap> bitmap,
64 uint32 sync_point, 64 uint32 sync_point,
65 bool lost_resource, 65 bool lost_resource,
66 BlockingTaskRunner* main_thread_task_runner) { 66 BlockingTaskRunner* main_thread_task_runner) {
67 } 67 }
68 68
69 static void ReleaseSharedMemoryCallback( 69 static void ReleaseSharedBitmapCallback(
70 scoped_ptr<base::SharedMemory> shared_memory, 70 scoped_ptr<SharedBitmap> shared_bitmap,
71 bool* release_called, 71 bool* release_called,
72 uint32* release_sync_point, 72 uint32* release_sync_point,
73 bool* lost_resource_result, 73 bool* lost_resource_result,
74 uint32 sync_point, 74 uint32 sync_point,
75 bool lost_resource, 75 bool lost_resource,
76 BlockingTaskRunner* main_thread_task_runner) { 76 BlockingTaskRunner* main_thread_task_runner) {
77 *release_called = true; 77 *release_called = true;
78 *release_sync_point = sync_point; 78 *release_sync_point = sync_point;
79 *lost_resource_result = lost_resource; 79 *lost_resource_result = lost_resource;
80 } 80 }
81 81
82 static scoped_ptr<base::SharedMemory> CreateAndFillSharedMemory( 82 static scoped_ptr<SharedBitmap> CreateAndFillSharedBitmap(
83 SharedBitmapManager* manager,
83 const gfx::Size& size, 84 const gfx::Size& size,
84 uint32_t value) { 85 uint32_t value) {
85 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory); 86 scoped_ptr<SharedBitmap> shared_bitmap = manager->AllocateSharedBitmap(size);
86 CHECK(shared_memory->CreateAndMapAnonymous(4 * size.GetArea())); 87 CHECK(shared_bitmap);
87 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_memory->memory()); 88 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_bitmap->pixels());
88 CHECK(pixels); 89 CHECK(pixels);
89 std::fill_n(pixels, size.GetArea(), value); 90 std::fill_n(pixels, size.GetArea(), value);
90 return shared_memory.Pass(); 91 return shared_bitmap.Pass();
91 } 92 }
92 93
93 class TextureStateTrackingContext : public TestWebGraphicsContext3D { 94 class TextureStateTrackingContext : public TestWebGraphicsContext3D {
94 public: 95 public:
95 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture)); 96 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture));
96 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param)); 97 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param));
97 MOCK_METHOD1(waitSyncPoint, void(GLuint sync_point)); 98 MOCK_METHOD1(waitSyncPoint, void(GLuint sync_point));
98 MOCK_METHOD0(insertSyncPoint, GLuint(void)); 99 MOCK_METHOD0(insertSyncPoint, GLuint(void));
99 MOCK_METHOD2(produceTextureCHROMIUM, 100 MOCK_METHOD2(produceTextureCHROMIUM,
100 void(GLenum target, const GLbyte* mailbox)); 101 void(GLenum target, const GLbyte* mailbox));
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 uint32* sync_point) { 460 uint32* sync_point) {
460 if (GetParam() == ResourceProvider::GLTexture) { 461 if (GetParam() == ResourceProvider::GLTexture) {
461 unsigned texture = child_context_->createTexture(); 462 unsigned texture = child_context_->createTexture();
462 gpu::Mailbox gpu_mailbox; 463 gpu::Mailbox gpu_mailbox;
463 child_context_->bindTexture(GL_TEXTURE_2D, texture); 464 child_context_->bindTexture(GL_TEXTURE_2D, texture);
464 child_context_->genMailboxCHROMIUM(gpu_mailbox.name); 465 child_context_->genMailboxCHROMIUM(gpu_mailbox.name);
465 child_context_->produceTextureCHROMIUM(GL_TEXTURE_2D, gpu_mailbox.name); 466 child_context_->produceTextureCHROMIUM(GL_TEXTURE_2D, gpu_mailbox.name);
466 *sync_point = child_context_->insertSyncPoint(); 467 *sync_point = child_context_->insertSyncPoint();
467 EXPECT_LT(0u, *sync_point); 468 EXPECT_LT(0u, *sync_point);
468 469
469 scoped_ptr<base::SharedMemory> shared_memory; 470 scoped_ptr<SharedBitmap> shared_bitmap;
470 scoped_ptr<SingleReleaseCallbackImpl> callback = 471 scoped_ptr<SingleReleaseCallbackImpl> callback =
471 SingleReleaseCallbackImpl::Create( 472 SingleReleaseCallbackImpl::Create(base::Bind(
472 base::Bind(ReleaseSharedMemoryCallback, 473 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap),
473 base::Passed(&shared_memory), 474 release_called, release_sync_point, lost_resource));
474 release_called,
475 release_sync_point,
476 lost_resource));
477 return child_resource_provider_->CreateResourceFromTextureMailbox( 475 return child_resource_provider_->CreateResourceFromTextureMailbox(
478 TextureMailbox(gpu_mailbox, GL_TEXTURE_2D, *sync_point), 476 TextureMailbox(gpu_mailbox, GL_TEXTURE_2D, *sync_point),
479 callback.Pass()); 477 callback.Pass());
480 } else { 478 } else {
481 gfx::Size size(64, 64); 479 gfx::Size size(64, 64);
482 scoped_ptr<base::SharedMemory> shared_memory( 480 scoped_ptr<SharedBitmap> shared_bitmap(
483 CreateAndFillSharedMemory(size, 0)); 481 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, 0));
484 482
485 base::SharedMemory* shared_memory_ptr = shared_memory.get(); 483 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get();
486 scoped_ptr<SingleReleaseCallbackImpl> callback = 484 scoped_ptr<SingleReleaseCallbackImpl> callback =
487 SingleReleaseCallbackImpl::Create( 485 SingleReleaseCallbackImpl::Create(base::Bind(
488 base::Bind(ReleaseSharedMemoryCallback, 486 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap),
489 base::Passed(&shared_memory), 487 release_called, release_sync_point, lost_resource));
490 release_called,
491 release_sync_point,
492 lost_resource));
493 return child_resource_provider_->CreateResourceFromTextureMailbox( 488 return child_resource_provider_->CreateResourceFromTextureMailbox(
494 TextureMailbox(shared_memory_ptr, size), callback.Pass()); 489 TextureMailbox(shared_bitmap_ptr, size), callback.Pass());
495 } 490 }
496 } 491 }
497 492
498 protected: 493 protected:
499 scoped_ptr<ContextSharedData> shared_data_; 494 scoped_ptr<ContextSharedData> shared_data_;
500 ResourceProviderContext* context3d_; 495 ResourceProviderContext* context3d_;
501 ResourceProviderContext* child_context_; 496 ResourceProviderContext* child_context_;
502 FakeOutputSurfaceClient output_surface_client_; 497 FakeOutputSurfaceClient output_surface_client_;
503 FakeOutputSurfaceClient child_output_surface_client_; 498 FakeOutputSurfaceClient child_output_surface_client_;
504 scoped_ptr<OutputSurface> output_surface_; 499 scoped_ptr<OutputSurface> output_surface_;
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); 970 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format);
976 uint8_t data1[4] = { 1, 2, 3, 4 }; 971 uint8_t data1[4] = { 1, 2, 3, 4 };
977 gfx::Rect rect(size); 972 gfx::Rect rect(size);
978 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); 973 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d());
979 974
980 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 975 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource(
981 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); 976 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format);
982 uint8_t data2[4] = { 5, 5, 5, 5 }; 977 uint8_t data2[4] = { 5, 5, 5, 5 };
983 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); 978 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d());
984 979
985 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); 980 scoped_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap(
986 shared_memory->CreateAndMapAnonymous(1); 981 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0));
987 base::SharedMemory* shared_memory_ptr = shared_memory.get(); 982 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get();
988 ResourceProvider::ResourceId id3 = 983 ResourceProvider::ResourceId id3 =
989 child_resource_provider_->CreateResourceFromTextureMailbox( 984 child_resource_provider_->CreateResourceFromTextureMailbox(
990 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), 985 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)),
991 SingleReleaseCallbackImpl::Create(base::Bind( 986 SingleReleaseCallbackImpl::Create(base::Bind(
992 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); 987 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap))));
993 988
994 ReturnedResourceArray returned_to_child; 989 ReturnedResourceArray returned_to_child;
995 int child_id = 990 int child_id =
996 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 991 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
997 { 992 {
998 // Transfer some resources to the parent. 993 // Transfer some resources to the parent.
999 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 994 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1000 resource_ids_to_transfer.push_back(id1); 995 resource_ids_to_transfer.push_back(id1);
1001 resource_ids_to_transfer.push_back(id2); 996 resource_ids_to_transfer.push_back(id2);
1002 resource_ids_to_transfer.push_back(id3); 997 resource_ids_to_transfer.push_back(id3);
(...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after
2549 Mock::VerifyAndClearExpectations(context); 2544 Mock::VerifyAndClearExpectations(context);
2550 } 2545 }
2551 } 2546 }
2552 2547
2553 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) { 2548 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) {
2554 if (GetParam() != ResourceProvider::Bitmap) 2549 if (GetParam() != ResourceProvider::Bitmap)
2555 return; 2550 return;
2556 2551
2557 gfx::Size size(64, 64); 2552 gfx::Size size(64, 64);
2558 const uint32_t kBadBeef = 0xbadbeef; 2553 const uint32_t kBadBeef = 0xbadbeef;
2559 scoped_ptr<base::SharedMemory> shared_memory( 2554 scoped_ptr<SharedBitmap> shared_bitmap(
2560 CreateAndFillSharedMemory(size, kBadBeef)); 2555 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, kBadBeef));
2561 2556
2562 FakeOutputSurfaceClient output_surface_client; 2557 FakeOutputSurfaceClient output_surface_client;
2563 scoped_ptr<OutputSurface> output_surface( 2558 scoped_ptr<OutputSurface> output_surface(
2564 FakeOutputSurface::CreateSoftware(make_scoped_ptr( 2559 FakeOutputSurface::CreateSoftware(make_scoped_ptr(
2565 new SoftwareOutputDevice))); 2560 new SoftwareOutputDevice)));
2566 CHECK(output_surface->BindToClient(&output_surface_client)); 2561 CHECK(output_surface->BindToClient(&output_surface_client));
2567 2562
2568 scoped_ptr<ResourceProvider> resource_provider( 2563 scoped_ptr<ResourceProvider> resource_provider(
2569 ResourceProvider::Create(output_surface.get(), 2564 ResourceProvider::Create(output_surface.get(),
2570 shared_bitmap_manager_.get(), 2565 shared_bitmap_manager_.get(),
2571 gpu_memory_buffer_manager_.get(), 2566 gpu_memory_buffer_manager_.get(),
2572 main_thread_task_runner_.get(), 2567 main_thread_task_runner_.get(),
2573 0, 2568 0,
2574 false, 2569 false,
2575 1)); 2570 1));
2576 2571
2577 uint32 release_sync_point = 0; 2572 uint32 release_sync_point = 0;
2578 bool lost_resource = false; 2573 bool lost_resource = false;
2579 BlockingTaskRunner* main_thread_task_runner = NULL; 2574 BlockingTaskRunner* main_thread_task_runner = NULL;
2580 scoped_ptr<SingleReleaseCallbackImpl> callback = 2575 scoped_ptr<SingleReleaseCallbackImpl> callback =
2581 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback, 2576 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback,
2582 &release_sync_point, 2577 &release_sync_point,
2583 &lost_resource, 2578 &lost_resource,
2584 &main_thread_task_runner)); 2579 &main_thread_task_runner));
2585 TextureMailbox mailbox(shared_memory.get(), size); 2580 TextureMailbox mailbox(shared_bitmap.get(), size);
2586 2581
2587 ResourceProvider::ResourceId id = 2582 ResourceProvider::ResourceId id =
2588 resource_provider->CreateResourceFromTextureMailbox( 2583 resource_provider->CreateResourceFromTextureMailbox(
2589 mailbox, callback.Pass()); 2584 mailbox, callback.Pass());
2590 EXPECT_NE(0u, id); 2585 EXPECT_NE(0u, id);
2591 2586
2592 { 2587 {
2593 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 2588 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
2594 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 2589 const SkBitmap* sk_bitmap = lock.sk_bitmap();
2595 EXPECT_EQ(sk_bitmap->width(), size.width()); 2590 EXPECT_EQ(sk_bitmap->width(), size.width());
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
3710 resource_provider->AllocateForTesting(id); 3705 resource_provider->AllocateForTesting(id);
3711 Mock::VerifyAndClearExpectations(context); 3706 Mock::VerifyAndClearExpectations(context);
3712 3707
3713 DCHECK_EQ(10u, context->PeekTextureId()); 3708 DCHECK_EQ(10u, context->PeekTextureId());
3714 resource_provider->DeleteResource(id); 3709 resource_provider->DeleteResource(id);
3715 } 3710 }
3716 } 3711 }
3717 3712
3718 } // namespace 3713 } // namespace
3719 } // namespace cc 3714 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/scoped_gpu_raster.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698