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

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

Issue 132233041: Add gpu::MailboxHolder to hold state for a gpu::Mailbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ff7262fa Rebase. Created 6 years, 10 months 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/resources/resource_provider.cc ('k') | cc/resources/single_release_callback.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 "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 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 19 matching lines...) Expand all
30 using testing::Mock; 30 using testing::Mock;
31 using testing::NiceMock; 31 using testing::NiceMock;
32 using testing::Return; 32 using testing::Return;
33 using testing::SetArgPointee; 33 using testing::SetArgPointee;
34 using testing::StrictMock; 34 using testing::StrictMock;
35 using testing::_; 35 using testing::_;
36 36
37 namespace cc { 37 namespace cc {
38 namespace { 38 namespace {
39 39
40 static void EmptyReleaseCallback(unsigned sync_point, bool lost_resource) {} 40 static void EmptyReleaseCallback(uint32 sync_point, bool lost_resource) {}
41 41
42 static void SharedMemoryReleaseCallback(scoped_ptr<base::SharedMemory> memory, 42 static void SharedMemoryReleaseCallback(scoped_ptr<base::SharedMemory> memory,
43 unsigned sync_point, 43 uint32 sync_point,
44 bool lost_resource) {} 44 bool lost_resource) {}
45 45
46 static void ReleaseTextureMailbox(unsigned* release_sync_point, 46 static void ReleaseTextureMailbox(uint32* release_sync_point,
47 bool* release_lost_resource, 47 bool* release_lost_resource,
48 unsigned sync_point, 48 uint32 sync_point,
49 bool lost_resource) { 49 bool lost_resource) {
50 *release_sync_point = sync_point; 50 *release_sync_point = sync_point;
51 *release_lost_resource = lost_resource; 51 *release_lost_resource = lost_resource;
52 } 52 }
53 53
54 static void ReleaseSharedMemoryCallback( 54 static void ReleaseSharedMemoryCallback(
55 scoped_ptr<base::SharedMemory> shared_memory, 55 scoped_ptr<base::SharedMemory> shared_memory,
56 bool* release_called, 56 bool* release_called,
57 unsigned* release_sync_point, 57 uint32* release_sync_point,
58 bool* lost_resource_result, 58 bool* lost_resource_result,
59 unsigned sync_point, 59 uint32 sync_point,
60 bool lost_resource) { 60 bool lost_resource) {
61 *release_called = true; 61 *release_called = true;
62 *release_sync_point = sync_point; 62 *release_sync_point = sync_point;
63 *lost_resource_result = lost_resource; 63 *lost_resource_result = lost_resource;
64 } 64 }
65 65
66 static scoped_ptr<base::SharedMemory> CreateAndFillSharedMemory( 66 static scoped_ptr<base::SharedMemory> CreateAndFillSharedMemory(
67 const gfx::Size& size, 67 const gfx::Size& size,
68 uint32_t value) { 68 uint32_t value) {
69 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory); 69 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory);
70 CHECK(shared_memory->CreateAndMapAnonymous(4 * size.GetArea())); 70 CHECK(shared_memory->CreateAndMapAnonymous(4 * size.GetArea()));
71 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_memory->memory()); 71 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_memory->memory());
72 CHECK(pixels); 72 CHECK(pixels);
73 std::fill_n(pixels, size.GetArea(), value); 73 std::fill_n(pixels, size.GetArea(), value);
74 return shared_memory.Pass(); 74 return shared_memory.Pass();
75 } 75 }
76 76
77 class TextureStateTrackingContext : public TestWebGraphicsContext3D { 77 class TextureStateTrackingContext : public TestWebGraphicsContext3D {
78 public: 78 public:
79 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture)); 79 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture));
80 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param)); 80 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param));
81 MOCK_METHOD1(waitSyncPoint, void(unsigned sync_point)); 81 MOCK_METHOD1(waitSyncPoint, void(GLuint sync_point));
82 MOCK_METHOD0(insertSyncPoint, unsigned(void)); 82 MOCK_METHOD0(insertSyncPoint, GLuint(void));
83 MOCK_METHOD2(produceTextureCHROMIUM, 83 MOCK_METHOD2(produceTextureCHROMIUM,
84 void(GLenum target, const GLbyte* mailbox)); 84 void(GLenum target, const GLbyte* mailbox));
85 MOCK_METHOD2(consumeTextureCHROMIUM, 85 MOCK_METHOD2(consumeTextureCHROMIUM,
86 void(GLenum target, const GLbyte* mailbox)); 86 void(GLenum target, const GLbyte* mailbox));
87 87
88 // Force all textures to be consecutive numbers starting at "1", 88 // Force all textures to be consecutive numbers starting at "1",
89 // so we easily can test for them. 89 // so we easily can test for them.
90 virtual GLuint NextTextureId() OVERRIDE { 90 virtual GLuint NextTextureId() OVERRIDE {
91 base::AutoLock lock(namespace_->lock); 91 base::AutoLock lock(namespace_->lock);
92 return namespace_->next_texture_id++; 92 return namespace_->next_texture_id++;
93 } 93 }
94 virtual void RetireTextureId(GLuint) OVERRIDE {} 94 virtual void RetireTextureId(GLuint) OVERRIDE {}
95 }; 95 };
96 96
97 // Shared data between multiple ResourceProviderContext. This contains mailbox 97 // Shared data between multiple ResourceProviderContext. This contains mailbox
98 // contents as well as information about sync points. 98 // contents as well as information about sync points.
99 class ContextSharedData { 99 class ContextSharedData {
100 public: 100 public:
101 static scoped_ptr<ContextSharedData> Create() { 101 static scoped_ptr<ContextSharedData> Create() {
102 return make_scoped_ptr(new ContextSharedData()); 102 return make_scoped_ptr(new ContextSharedData());
103 } 103 }
104 104
105 unsigned InsertSyncPoint() { return next_sync_point_++; } 105 uint32 InsertSyncPoint() { return next_sync_point_++; }
106 106
107 void GenMailbox(GLbyte* mailbox) { 107 void GenMailbox(GLbyte* mailbox) {
108 memset(mailbox, 0, sizeof(GLbyte[64])); 108 memset(mailbox, 0, sizeof(GLbyte[64]));
109 memcpy(mailbox, &next_mailbox_, sizeof(next_mailbox_)); 109 memcpy(mailbox, &next_mailbox_, sizeof(next_mailbox_));
110 ++next_mailbox_; 110 ++next_mailbox_;
111 } 111 }
112 112
113 void ProduceTexture(const GLbyte* mailbox_name, 113 void ProduceTexture(const GLbyte* mailbox_name,
114 unsigned sync_point, 114 uint32 sync_point,
115 scoped_refptr<TestTexture> texture) { 115 scoped_refptr<TestTexture> texture) {
116 unsigned mailbox = 0; 116 unsigned mailbox = 0;
117 memcpy(&mailbox, mailbox_name, sizeof(mailbox)); 117 memcpy(&mailbox, mailbox_name, sizeof(mailbox));
118 ASSERT_TRUE(mailbox && mailbox < next_mailbox_); 118 ASSERT_TRUE(mailbox && mailbox < next_mailbox_);
119 textures_[mailbox] = texture; 119 textures_[mailbox] = texture;
120 ASSERT_LT(sync_point_for_mailbox_[mailbox], sync_point); 120 ASSERT_LT(sync_point_for_mailbox_[mailbox], sync_point);
121 sync_point_for_mailbox_[mailbox] = sync_point; 121 sync_point_for_mailbox_[mailbox] = sync_point;
122 } 122 }
123 123
124 scoped_refptr<TestTexture> ConsumeTexture(const GLbyte* mailbox_name, 124 scoped_refptr<TestTexture> ConsumeTexture(const GLbyte* mailbox_name,
125 unsigned sync_point) { 125 uint32 sync_point) {
126 unsigned mailbox = 0; 126 unsigned mailbox = 0;
127 memcpy(&mailbox, mailbox_name, sizeof(mailbox)); 127 memcpy(&mailbox, mailbox_name, sizeof(mailbox));
128 DCHECK(mailbox && mailbox < next_mailbox_); 128 DCHECK(mailbox && mailbox < next_mailbox_);
129 129
130 // If the latest sync point the context has waited on is before the sync 130 // If the latest sync point the context has waited on is before the sync
131 // point for when the mailbox was set, pretend we never saw that 131 // point for when the mailbox was set, pretend we never saw that
132 // ProduceTexture. 132 // ProduceTexture.
133 if (sync_point_for_mailbox_[mailbox] > sync_point) { 133 if (sync_point_for_mailbox_[mailbox] > sync_point) {
134 NOTREACHED(); 134 NOTREACHED();
135 return scoped_refptr<TestTexture>(); 135 return scoped_refptr<TestTexture>();
136 } 136 }
137 return textures_[mailbox]; 137 return textures_[mailbox];
138 } 138 }
139 139
140 private: 140 private:
141 ContextSharedData() : next_sync_point_(1), next_mailbox_(1) {} 141 ContextSharedData() : next_sync_point_(1), next_mailbox_(1) {}
142 142
143 unsigned next_sync_point_; 143 uint32 next_sync_point_;
144 unsigned next_mailbox_; 144 unsigned next_mailbox_;
145 typedef base::hash_map<unsigned, scoped_refptr<TestTexture> > TextureMap; 145 typedef base::hash_map<unsigned, scoped_refptr<TestTexture> > TextureMap;
146 TextureMap textures_; 146 TextureMap textures_;
147 base::hash_map<unsigned, unsigned> sync_point_for_mailbox_; 147 base::hash_map<unsigned, uint32> sync_point_for_mailbox_;
148 }; 148 };
149 149
150 class ResourceProviderContext : public TestWebGraphicsContext3D { 150 class ResourceProviderContext : public TestWebGraphicsContext3D {
151 public: 151 public:
152 static scoped_ptr<ResourceProviderContext> Create( 152 static scoped_ptr<ResourceProviderContext> Create(
153 ContextSharedData* shared_data) { 153 ContextSharedData* shared_data) {
154 return make_scoped_ptr(new ResourceProviderContext(shared_data)); 154 return make_scoped_ptr(new ResourceProviderContext(shared_data));
155 } 155 }
156 156
157 virtual unsigned insertSyncPoint() OVERRIDE { 157 virtual GLuint insertSyncPoint() OVERRIDE {
158 unsigned sync_point = shared_data_->InsertSyncPoint(); 158 uint32 sync_point = shared_data_->InsertSyncPoint();
159 // Commit the produceTextureCHROMIUM calls at this point, so that 159 // Commit the produceTextureCHROMIUM calls at this point, so that
160 // they're associated with the sync point. 160 // they're associated with the sync point.
161 for (PendingProduceTextureList::iterator it = 161 for (PendingProduceTextureList::iterator it =
162 pending_produce_textures_.begin(); 162 pending_produce_textures_.begin();
163 it != pending_produce_textures_.end(); 163 it != pending_produce_textures_.end();
164 ++it) { 164 ++it) {
165 shared_data_->ProduceTexture( 165 shared_data_->ProduceTexture(
166 (*it)->mailbox, sync_point, (*it)->texture); 166 (*it)->mailbox, sync_point, (*it)->texture);
167 } 167 }
168 pending_produce_textures_.clear(); 168 pending_produce_textures_.clear();
169 return sync_point; 169 return sync_point;
170 } 170 }
171 171
172 virtual void waitSyncPoint(unsigned sync_point) OVERRIDE { 172 virtual void waitSyncPoint(GLuint sync_point) OVERRIDE {
173 last_waited_sync_point_ = std::max(sync_point, last_waited_sync_point_); 173 last_waited_sync_point_ = std::max(sync_point, last_waited_sync_point_);
174 } 174 }
175 175
176 unsigned last_waited_sync_point() const { return last_waited_sync_point_; } 176 unsigned last_waited_sync_point() const { return last_waited_sync_point_; }
177 177
178 virtual void texStorage2DEXT(GLenum target, 178 virtual void texStorage2DEXT(GLenum target,
179 GLint levels, 179 GLint levels,
180 GLuint internalformat, 180 GLuint internalformat,
181 GLint width, 181 GLint width,
182 GLint height) OVERRIDE { 182 GLint height) OVERRIDE {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 src += in_pitch; 320 src += in_pitch;
321 } 321 }
322 } 322 }
323 323
324 struct PendingProduceTexture { 324 struct PendingProduceTexture {
325 GLbyte mailbox[64]; 325 GLbyte mailbox[64];
326 scoped_refptr<TestTexture> texture; 326 scoped_refptr<TestTexture> texture;
327 }; 327 };
328 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList; 328 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList;
329 ContextSharedData* shared_data_; 329 ContextSharedData* shared_data_;
330 unsigned last_waited_sync_point_; 330 GLuint last_waited_sync_point_;
331 PendingProduceTextureList pending_produce_textures_; 331 PendingProduceTextureList pending_produce_textures_;
332 }; 332 };
333 333
334 void FreeSharedBitmap(SharedBitmap* shared_bitmap) { 334 void FreeSharedBitmap(SharedBitmap* shared_bitmap) {
335 delete shared_bitmap->memory(); 335 delete shared_bitmap->memory();
336 } 336 }
337 337
338 void IgnoreSharedBitmap(SharedBitmap* shared_bitmap) {} 338 void IgnoreSharedBitmap(SharedBitmap* shared_bitmap) {}
339 339
340 class TestSharedBitmapManager : public SharedBitmapManager { 340 class TestSharedBitmapManager : public SharedBitmapManager {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 470
471 static void SetResourceFilter(ResourceProvider* resource_provider, 471 static void SetResourceFilter(ResourceProvider* resource_provider,
472 ResourceProvider::ResourceId id, 472 ResourceProvider::ResourceId id,
473 GLenum filter) { 473 GLenum filter) {
474 ResourceProvider::ScopedSamplerGL sampler( 474 ResourceProvider::ScopedSamplerGL sampler(
475 resource_provider, id, GL_TEXTURE_2D, filter); 475 resource_provider, id, GL_TEXTURE_2D, filter);
476 } 476 }
477 477
478 ResourceProviderContext* context() { return context3d_; } 478 ResourceProviderContext* context() { return context3d_; }
479 479
480 ResourceProvider::ResourceId CreateChildMailbox(unsigned* release_sync_point, 480 ResourceProvider::ResourceId CreateChildMailbox(uint32* release_sync_point,
481 bool* lost_resource, 481 bool* lost_resource,
482 bool* release_called, 482 bool* release_called,
483 unsigned* sync_point) { 483 uint32* sync_point) {
484 if (GetParam() == ResourceProvider::GLTexture) { 484 if (GetParam() == ResourceProvider::GLTexture) {
485 unsigned texture = child_context_->createTexture(); 485 unsigned texture = child_context_->createTexture();
486 gpu::Mailbox gpu_mailbox; 486 gpu::Mailbox gpu_mailbox;
487 child_context_->bindTexture(GL_TEXTURE_2D, texture); 487 child_context_->bindTexture(GL_TEXTURE_2D, texture);
488 child_context_->genMailboxCHROMIUM(gpu_mailbox.name); 488 child_context_->genMailboxCHROMIUM(gpu_mailbox.name);
489 child_context_->produceTextureCHROMIUM(GL_TEXTURE_2D, gpu_mailbox.name); 489 child_context_->produceTextureCHROMIUM(GL_TEXTURE_2D, gpu_mailbox.name);
490 *sync_point = child_context_->insertSyncPoint(); 490 *sync_point = child_context_->insertSyncPoint();
491 EXPECT_LT(0u, *sync_point); 491 EXPECT_LT(0u, *sync_point);
492 492
493 scoped_ptr<base::SharedMemory> shared_memory; 493 scoped_ptr<base::SharedMemory> shared_memory;
494 scoped_ptr<SingleReleaseCallback> callback = 494 scoped_ptr<SingleReleaseCallback> callback =
495 SingleReleaseCallback::Create(base::Bind(ReleaseSharedMemoryCallback, 495 SingleReleaseCallback::Create(base::Bind(ReleaseSharedMemoryCallback,
496 base::Passed(&shared_memory), 496 base::Passed(&shared_memory),
497 release_called, 497 release_called,
498 release_sync_point, 498 release_sync_point,
499 lost_resource)); 499 lost_resource));
500 return child_resource_provider_->CreateResourceFromTextureMailbox( 500 return child_resource_provider_->CreateResourceFromTextureMailbox(
501 TextureMailbox(gpu_mailbox, *sync_point), callback.Pass()); 501 TextureMailbox(gpu_mailbox, GL_TEXTURE_2D, *sync_point),
502 callback.Pass());
502 } else { 503 } else {
503 gfx::Size size(64, 64); 504 gfx::Size size(64, 64);
504 scoped_ptr<base::SharedMemory> shared_memory( 505 scoped_ptr<base::SharedMemory> shared_memory(
505 CreateAndFillSharedMemory(size, 0)); 506 CreateAndFillSharedMemory(size, 0));
506 507
507 base::SharedMemory* shared_memory_ptr = shared_memory.get(); 508 base::SharedMemory* shared_memory_ptr = shared_memory.get();
508 scoped_ptr<SingleReleaseCallback> callback = 509 scoped_ptr<SingleReleaseCallback> callback =
509 SingleReleaseCallback::Create(base::Bind(ReleaseSharedMemoryCallback, 510 SingleReleaseCallback::Create(base::Bind(ReleaseSharedMemoryCallback,
510 base::Passed(&shared_memory), 511 base::Passed(&shared_memory),
511 release_called, 512 release_called,
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 child_resource_provider_->MapImage(id3); 658 child_resource_provider_->MapImage(id3);
658 child_resource_provider_->UnmapImage(id3); 659 child_resource_provider_->UnmapImage(id3);
659 660
660 GLuint external_texture_id = child_context_->createExternalTexture(); 661 GLuint external_texture_id = child_context_->createExternalTexture();
661 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); 662 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id);
662 663
663 gpu::Mailbox external_mailbox; 664 gpu::Mailbox external_mailbox;
664 child_context_->genMailboxCHROMIUM(external_mailbox.name); 665 child_context_->genMailboxCHROMIUM(external_mailbox.name);
665 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, 666 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES,
666 external_mailbox.name); 667 external_mailbox.name);
667 const unsigned external_sync_point = child_context_->insertSyncPoint(); 668 const GLuint external_sync_point = child_context_->insertSyncPoint();
668 ResourceProvider::ResourceId id4 = 669 ResourceProvider::ResourceId id4 =
669 child_resource_provider_->CreateResourceFromTextureMailbox( 670 child_resource_provider_->CreateResourceFromTextureMailbox(
670 TextureMailbox( 671 TextureMailbox(
671 external_mailbox, GL_TEXTURE_EXTERNAL_OES, external_sync_point), 672 external_mailbox, GL_TEXTURE_EXTERNAL_OES, external_sync_point),
672 SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback))); 673 SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback)));
673 674
674 ReturnedResourceArray returned_to_child; 675 ReturnedResourceArray returned_to_child;
675 int child_id = 676 int child_id =
676 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 677 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
677 { 678 {
678 // Transfer some resources to the parent. 679 // Transfer some resources to the parent.
679 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 680 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
680 resource_ids_to_transfer.push_back(id1); 681 resource_ids_to_transfer.push_back(id1);
681 resource_ids_to_transfer.push_back(id2); 682 resource_ids_to_transfer.push_back(id2);
682 resource_ids_to_transfer.push_back(id3); 683 resource_ids_to_transfer.push_back(id3);
683 resource_ids_to_transfer.push_back(id4); 684 resource_ids_to_transfer.push_back(id4);
684 TransferableResourceArray list; 685 TransferableResourceArray list;
685 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 686 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
686 &list); 687 &list);
687 ASSERT_EQ(4u, list.size()); 688 ASSERT_EQ(4u, list.size());
688 EXPECT_NE(0u, list[0].sync_point); 689 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
689 EXPECT_NE(0u, list[1].sync_point); 690 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
690 EXPECT_EQ(list[0].sync_point, list[1].sync_point); 691 EXPECT_EQ(list[0].mailbox_holder.sync_point,
691 EXPECT_NE(0u, list[2].sync_point); 692 list[1].mailbox_holder.sync_point);
692 EXPECT_EQ(list[0].sync_point, list[2].sync_point); 693 EXPECT_NE(0u, list[2].mailbox_holder.sync_point);
693 EXPECT_EQ(external_sync_point, list[3].sync_point); 694 EXPECT_EQ(list[0].mailbox_holder.sync_point,
694 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target); 695 list[2].mailbox_holder.sync_point);
695 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target); 696 EXPECT_EQ(external_sync_point, list[3].mailbox_holder.sync_point);
696 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target); 697 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
697 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[3].target); 698 list[0].mailbox_holder.texture_target);
699 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
700 list[1].mailbox_holder.texture_target);
701 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
702 list[2].mailbox_holder.texture_target);
703 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES),
704 list[3].mailbox_holder.texture_target);
698 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 705 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
699 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 706 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
700 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 707 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
701 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); 708 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
702 resource_provider_->ReceiveFromChild(child_id, list); 709 resource_provider_->ReceiveFromChild(child_id, list);
703 EXPECT_NE(list[0].sync_point, context3d_->last_waited_sync_point()); 710 EXPECT_NE(list[0].mailbox_holder.sync_point,
711 context3d_->last_waited_sync_point());
704 { 712 {
705 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), 713 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
706 list[0].id); 714 list[0].id);
707 } 715 }
708 EXPECT_EQ(list[0].sync_point, context3d_->last_waited_sync_point()); 716 EXPECT_EQ(list[0].mailbox_holder.sync_point,
717 context3d_->last_waited_sync_point());
709 resource_provider_->DeclareUsedResourcesFromChild(child_id, 718 resource_provider_->DeclareUsedResourcesFromChild(child_id,
710 resource_ids_to_transfer); 719 resource_ids_to_transfer);
711 } 720 }
712 721
713 EXPECT_EQ(4u, resource_provider_->num_resources()); 722 EXPECT_EQ(4u, resource_provider_->num_resources());
714 ResourceProvider::ResourceIdMap resource_map = 723 ResourceProvider::ResourceIdMap resource_map =
715 resource_provider_->GetChildToParentMap(child_id); 724 resource_provider_->GetChildToParentMap(child_id);
716 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 725 ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
717 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 726 ResourceProvider::ResourceId mapped_id2 = resource_map[id2];
718 ResourceProvider::ResourceId mapped_id3 = resource_map[id3]; 727 ResourceProvider::ResourceId mapped_id3 = resource_map[id3];
(...skipping 23 matching lines...) Expand all
742 resource_ids_to_transfer.push_back(id1); 751 resource_ids_to_transfer.push_back(id1);
743 resource_ids_to_transfer.push_back(id2); 752 resource_ids_to_transfer.push_back(id2);
744 resource_ids_to_transfer.push_back(id3); 753 resource_ids_to_transfer.push_back(id3);
745 TransferableResourceArray list; 754 TransferableResourceArray list;
746 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 755 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
747 &list); 756 &list);
748 EXPECT_EQ(3u, list.size()); 757 EXPECT_EQ(3u, list.size());
749 EXPECT_EQ(id1, list[0].id); 758 EXPECT_EQ(id1, list[0].id);
750 EXPECT_EQ(id2, list[1].id); 759 EXPECT_EQ(id2, list[1].id);
751 EXPECT_EQ(id3, list[2].id); 760 EXPECT_EQ(id3, list[2].id);
752 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target); 761 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
753 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target); 762 list[0].mailbox_holder.texture_target);
754 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target); 763 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
764 list[1].mailbox_holder.texture_target);
765 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
766 list[2].mailbox_holder.texture_target);
755 ReturnedResourceArray returned; 767 ReturnedResourceArray returned;
756 TransferableResource::ReturnResources(list, &returned); 768 TransferableResource::ReturnResources(list, &returned);
757 child_resource_provider_->ReceiveReturnsFromParent(returned); 769 child_resource_provider_->ReceiveReturnsFromParent(returned);
758 // ids were exported twice, we returned them only once, they should still 770 // ids were exported twice, we returned them only once, they should still
759 // be in-use. 771 // be in-use.
760 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 772 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
761 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 773 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
762 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 774 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
763 } 775 }
764 { 776 {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 resource_ids_to_transfer.push_back(id3); 828 resource_ids_to_transfer.push_back(id3);
817 resource_ids_to_transfer.push_back(id4); 829 resource_ids_to_transfer.push_back(id4);
818 TransferableResourceArray list; 830 TransferableResourceArray list;
819 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 831 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
820 &list); 832 &list);
821 ASSERT_EQ(4u, list.size()); 833 ASSERT_EQ(4u, list.size());
822 EXPECT_EQ(id1, list[0].id); 834 EXPECT_EQ(id1, list[0].id);
823 EXPECT_EQ(id2, list[1].id); 835 EXPECT_EQ(id2, list[1].id);
824 EXPECT_EQ(id3, list[2].id); 836 EXPECT_EQ(id3, list[2].id);
825 EXPECT_EQ(id4, list[3].id); 837 EXPECT_EQ(id4, list[3].id);
826 EXPECT_NE(0u, list[0].sync_point); 838 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
827 EXPECT_NE(0u, list[1].sync_point); 839 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
828 EXPECT_NE(0u, list[2].sync_point); 840 EXPECT_NE(0u, list[2].mailbox_holder.sync_point);
829 EXPECT_NE(0u, list[3].sync_point); 841 EXPECT_NE(0u, list[3].mailbox_holder.sync_point);
830 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target); 842 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
831 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target); 843 list[0].mailbox_holder.texture_target);
832 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target); 844 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
833 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[3].target); 845 list[1].mailbox_holder.texture_target);
846 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
847 list[2].mailbox_holder.texture_target);
848 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES),
849 list[3].mailbox_holder.texture_target);
834 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 850 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
835 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 851 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
836 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 852 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
837 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); 853 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
838 resource_provider_->ReceiveFromChild(child_id, list); 854 resource_provider_->ReceiveFromChild(child_id, list);
839 resource_provider_->DeclareUsedResourcesFromChild(child_id, 855 resource_provider_->DeclareUsedResourcesFromChild(child_id,
840 resource_ids_to_transfer); 856 resource_ids_to_transfer);
841 } 857 }
842 858
843 EXPECT_EQ(0u, returned_to_child.size()); 859 EXPECT_EQ(0u, returned_to_child.size());
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 // Transfer some resources to the parent. 917 // Transfer some resources to the parent.
902 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 918 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
903 resource_ids_to_transfer.push_back(id1); 919 resource_ids_to_transfer.push_back(id1);
904 resource_ids_to_transfer.push_back(id2); 920 resource_ids_to_transfer.push_back(id2);
905 resource_ids_to_transfer.push_back(id3); 921 resource_ids_to_transfer.push_back(id3);
906 resource_ids_to_transfer.push_back(id4); 922 resource_ids_to_transfer.push_back(id4);
907 TransferableResourceArray list; 923 TransferableResourceArray list;
908 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 924 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
909 &list); 925 &list);
910 ASSERT_EQ(4u, list.size()); 926 ASSERT_EQ(4u, list.size());
911 EXPECT_EQ(0u, list[0].sync_point); 927 EXPECT_EQ(0u, list[0].mailbox_holder.sync_point);
912 EXPECT_EQ(0u, list[1].sync_point); 928 EXPECT_EQ(0u, list[1].mailbox_holder.sync_point);
913 EXPECT_EQ(0u, list[2].sync_point); 929 EXPECT_EQ(0u, list[2].mailbox_holder.sync_point);
914 EXPECT_EQ(0u, list[3].sync_point); 930 EXPECT_EQ(0u, list[3].mailbox_holder.sync_point);
915 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 931 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
916 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 932 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
917 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 933 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
918 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); 934 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
919 resource_provider_->ReceiveFromChild(child_id, list); 935 resource_provider_->ReceiveFromChild(child_id, list);
920 resource_provider_->DeclareUsedResourcesFromChild(child_id, 936 resource_provider_->DeclareUsedResourcesFromChild(child_id,
921 resource_ids_to_transfer); 937 resource_ids_to_transfer);
922 } 938 }
923 939
924 EXPECT_EQ(4u, resource_provider_->num_resources()); 940 EXPECT_EQ(4u, resource_provider_->num_resources());
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 ReturnedResourceArray returned_to_child; 1178 ReturnedResourceArray returned_to_child;
1163 int child_id = 1179 int child_id =
1164 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1180 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1165 { 1181 {
1166 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1182 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1167 resource_ids_to_transfer.push_back(id1); 1183 resource_ids_to_transfer.push_back(id1);
1168 TransferableResourceArray list; 1184 TransferableResourceArray list;
1169 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, 1185 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer,
1170 &list); 1186 &list);
1171 ASSERT_EQ(1u, list.size()); 1187 ASSERT_EQ(1u, list.size());
1172 EXPECT_NE(0u, list[0].sync_point); 1188 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1173 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target); 1189 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
1190 list[0].mailbox_holder.texture_target);
1174 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1)); 1191 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1));
1175 resource_provider_->ReceiveFromChild(child_id, list); 1192 resource_provider_->ReceiveFromChild(child_id, list);
1176 } 1193 }
1177 1194
1178 EXPECT_EQ(0u, resource_provider_->num_resources()); 1195 EXPECT_EQ(0u, resource_provider_->num_resources());
1179 ASSERT_EQ(1u, returned_to_child.size()); 1196 ASSERT_EQ(1u, returned_to_child.size());
1180 EXPECT_EQ(returned_to_child[0].id, id1); 1197 EXPECT_EQ(returned_to_child[0].id, id1);
1181 ResourceProvider::ResourceIdMap resource_map = 1198 ResourceProvider::ResourceIdMap resource_map =
1182 resource_provider_->GetChildToParentMap(child_id); 1199 resource_provider_->GetChildToParentMap(child_id);
1183 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1200 ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
(...skipping 25 matching lines...) Expand all
1209 int child_id = 1226 int child_id =
1210 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1227 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1211 { 1228 {
1212 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1229 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1213 resource_ids_to_transfer.push_back(id1); 1230 resource_ids_to_transfer.push_back(id1);
1214 TransferableResourceArray list; 1231 TransferableResourceArray list;
1215 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1232 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1216 &list); 1233 &list);
1217 ASSERT_EQ(1u, list.size()); 1234 ASSERT_EQ(1u, list.size());
1218 // Make invalid. 1235 // Make invalid.
1219 list[0].mailbox.name[1] = 5; 1236 list[0].mailbox_holder.mailbox.name[1] = 5;
1220 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1237 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1221 resource_provider_->ReceiveFromChild(child_id, list); 1238 resource_provider_->ReceiveFromChild(child_id, list);
1222 } 1239 }
1223 1240
1224 EXPECT_EQ(0u, resource_provider_->num_resources()); 1241 EXPECT_EQ(0u, resource_provider_->num_resources());
1225 ASSERT_EQ(1u, returned_to_child.size()); 1242 ASSERT_EQ(1u, returned_to_child.size());
1226 EXPECT_EQ(returned_to_child[0].id, id1); 1243 EXPECT_EQ(returned_to_child[0].id, id1);
1227 ResourceProvider::ResourceIdMap resource_map = 1244 ResourceProvider::ResourceIdMap resource_map =
1228 resource_provider_->GetChildToParentMap(child_id); 1245 resource_provider_->GetChildToParentMap(child_id);
1229 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1246 ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
(...skipping 29 matching lines...) Expand all
1259 { 1276 {
1260 // Transfer some resources to the parent. 1277 // Transfer some resources to the parent.
1261 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1278 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1262 resource_ids_to_transfer.push_back(id1); 1279 resource_ids_to_transfer.push_back(id1);
1263 resource_ids_to_transfer.push_back(id2); 1280 resource_ids_to_transfer.push_back(id2);
1264 TransferableResourceArray list; 1281 TransferableResourceArray list;
1265 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1282 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1266 &list); 1283 &list);
1267 ASSERT_EQ(2u, list.size()); 1284 ASSERT_EQ(2u, list.size());
1268 if (GetParam() == ResourceProvider::GLTexture) { 1285 if (GetParam() == ResourceProvider::GLTexture) {
1269 EXPECT_NE(0u, list[0].sync_point); 1286 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1270 EXPECT_NE(0u, list[1].sync_point); 1287 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
1271 } 1288 }
1272 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1289 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1273 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1290 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1274 resource_provider_->ReceiveFromChild(child_id, list); 1291 resource_provider_->ReceiveFromChild(child_id, list);
1275 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1292 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1276 resource_ids_to_transfer); 1293 resource_ids_to_transfer);
1277 } 1294 }
1278 1295
1279 EXPECT_EQ(2u, resource_provider_->num_resources()); 1296 EXPECT_EQ(2u, resource_provider_->num_resources());
1280 ResourceProvider::ResourceIdMap resource_map = 1297 ResourceProvider::ResourceIdMap resource_map =
1281 resource_provider_->GetChildToParentMap(child_id); 1298 resource_provider_->GetChildToParentMap(child_id);
1282 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1299 ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
1283 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 1300 ResourceProvider::ResourceId mapped_id2 = resource_map[id2];
1284 EXPECT_NE(0u, mapped_id1); 1301 EXPECT_NE(0u, mapped_id1);
1285 EXPECT_NE(0u, mapped_id2); 1302 EXPECT_NE(0u, mapped_id2);
1286 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 1303 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
1287 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 1304 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
1288 1305
1289 { 1306 {
1290 // The parent transfers the resources to the grandparent. 1307 // The parent transfers the resources to the grandparent.
1291 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1308 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1292 resource_ids_to_transfer.push_back(mapped_id1); 1309 resource_ids_to_transfer.push_back(mapped_id1);
1293 resource_ids_to_transfer.push_back(mapped_id2); 1310 resource_ids_to_transfer.push_back(mapped_id2);
1294 TransferableResourceArray list; 1311 TransferableResourceArray list;
1295 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 1312 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
1296 1313
1297 ASSERT_EQ(2u, list.size()); 1314 ASSERT_EQ(2u, list.size());
1298 if (GetParam() == ResourceProvider::GLTexture) { 1315 if (GetParam() == ResourceProvider::GLTexture) {
1299 EXPECT_NE(0u, list[0].sync_point); 1316 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1300 EXPECT_NE(0u, list[1].sync_point); 1317 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
1301 } 1318 }
1302 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1)); 1319 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1));
1303 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2)); 1320 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2));
1304 1321
1305 // Release the resource in the parent. Set no resources as being in use. The 1322 // Release the resource in the parent. Set no resources as being in use. The
1306 // resources are exported so that can't be transferred back yet. 1323 // resources are exported so that can't be transferred back yet.
1307 ResourceProvider::ResourceIdArray no_resources; 1324 ResourceProvider::ResourceIdArray no_resources;
1308 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1325 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1309 1326
1310 EXPECT_EQ(0u, returned_to_child.size()); 1327 EXPECT_EQ(0u, returned_to_child.size());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 { 1370 {
1354 // Transfer some resources to the parent. 1371 // Transfer some resources to the parent.
1355 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1372 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1356 resource_ids_to_transfer.push_back(id1); 1373 resource_ids_to_transfer.push_back(id1);
1357 resource_ids_to_transfer.push_back(id2); 1374 resource_ids_to_transfer.push_back(id2);
1358 TransferableResourceArray list; 1375 TransferableResourceArray list;
1359 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1376 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1360 &list); 1377 &list);
1361 ASSERT_EQ(2u, list.size()); 1378 ASSERT_EQ(2u, list.size());
1362 if (GetParam() == ResourceProvider::GLTexture) { 1379 if (GetParam() == ResourceProvider::GLTexture) {
1363 EXPECT_NE(0u, list[0].sync_point); 1380 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1364 EXPECT_NE(0u, list[1].sync_point); 1381 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
1365 } 1382 }
1366 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1383 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1367 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1384 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1368 resource_provider_->ReceiveFromChild(child_id, list); 1385 resource_provider_->ReceiveFromChild(child_id, list);
1369 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1386 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1370 resource_ids_to_transfer); 1387 resource_ids_to_transfer);
1371 } 1388 }
1372 1389
1373 EXPECT_EQ(2u, resource_provider_->num_resources()); 1390 EXPECT_EQ(2u, resource_provider_->num_resources());
1374 ResourceProvider::ResourceIdMap resource_map = 1391 ResourceProvider::ResourceIdMap resource_map =
1375 resource_provider_->GetChildToParentMap(child_id); 1392 resource_provider_->GetChildToParentMap(child_id);
1376 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1393 ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
1377 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 1394 ResourceProvider::ResourceId mapped_id2 = resource_map[id2];
1378 EXPECT_NE(0u, mapped_id1); 1395 EXPECT_NE(0u, mapped_id1);
1379 EXPECT_NE(0u, mapped_id2); 1396 EXPECT_NE(0u, mapped_id2);
1380 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 1397 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
1381 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 1398 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
1382 1399
1383 { 1400 {
1384 // The parent transfers the resources to the grandparent. 1401 // The parent transfers the resources to the grandparent.
1385 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1402 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1386 resource_ids_to_transfer.push_back(mapped_id1); 1403 resource_ids_to_transfer.push_back(mapped_id1);
1387 resource_ids_to_transfer.push_back(mapped_id2); 1404 resource_ids_to_transfer.push_back(mapped_id2);
1388 TransferableResourceArray list; 1405 TransferableResourceArray list;
1389 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 1406 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
1390 1407
1391 ASSERT_EQ(2u, list.size()); 1408 ASSERT_EQ(2u, list.size());
1392 if (GetParam() == ResourceProvider::GLTexture) { 1409 if (GetParam() == ResourceProvider::GLTexture) {
1393 EXPECT_NE(0u, list[0].sync_point); 1410 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1394 EXPECT_NE(0u, list[1].sync_point); 1411 EXPECT_NE(0u, list[1].mailbox_holder.sync_point);
1395 } 1412 }
1396 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1)); 1413 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1));
1397 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2)); 1414 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2));
1398 1415
1399 // Release the resource in the parent. Set no resources as being in use. The 1416 // Release the resource in the parent. Set no resources as being in use. The
1400 // resources are exported so that can't be transferred back yet. 1417 // resources are exported so that can't be transferred back yet.
1401 ResourceProvider::ResourceIdArray no_resources; 1418 ResourceProvider::ResourceIdArray no_resources;
1402 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1419 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1403 1420
1404 // Destroy the child, the resources should not be returned yet. 1421 // Destroy the child, the resources should not be returned yet.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1475 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1459 { 1476 {
1460 // Transfer some resource to the parent. 1477 // Transfer some resource to the parent.
1461 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1478 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1462 resource_ids_to_transfer.push_back(id); 1479 resource_ids_to_transfer.push_back(id);
1463 TransferableResourceArray list; 1480 TransferableResourceArray list;
1464 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1481 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1465 &list); 1482 &list);
1466 ASSERT_EQ(1u, list.size()); 1483 ASSERT_EQ(1u, list.size());
1467 if (GetParam() == ResourceProvider::GLTexture) 1484 if (GetParam() == ResourceProvider::GLTexture)
1468 EXPECT_NE(0u, list[0].sync_point); 1485 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1469 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id)); 1486 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
1470 resource_provider_->ReceiveFromChild(child_id, list); 1487 resource_provider_->ReceiveFromChild(child_id, list);
1471 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1488 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1472 resource_ids_to_transfer); 1489 resource_ids_to_transfer);
1473 } 1490 }
1474 1491
1475 // Delete textures in the child, while they are transfered. 1492 // Delete textures in the child, while they are transfered.
1476 child_resource_provider_->DeleteResource(id); 1493 child_resource_provider_->DeleteResource(id);
1477 EXPECT_EQ(1u, child_resource_provider_->num_resources()); 1494 EXPECT_EQ(1u, child_resource_provider_->num_resources());
1478 { 1495 {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 if (GetParam() != ResourceProvider::GLTexture) 1693 if (GetParam() != ResourceProvider::GLTexture)
1677 return; 1694 return;
1678 unsigned texture = context()->createTexture(); 1695 unsigned texture = context()->createTexture();
1679 context()->bindTexture(GL_TEXTURE_2D, texture); 1696 context()->bindTexture(GL_TEXTURE_2D, texture);
1680 uint8_t data[4] = { 1, 2, 3, 4 }; 1697 uint8_t data[4] = { 1, 2, 3, 4 };
1681 context()->texImage2D( 1698 context()->texImage2D(
1682 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data); 1699 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data);
1683 gpu::Mailbox mailbox; 1700 gpu::Mailbox mailbox;
1684 context()->genMailboxCHROMIUM(mailbox.name); 1701 context()->genMailboxCHROMIUM(mailbox.name);
1685 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1702 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1686 unsigned sync_point = context()->insertSyncPoint(); 1703 uint32 sync_point = context()->insertSyncPoint();
1687 1704
1688 // All the logic below assumes that the sync points are all positive. 1705 // All the logic below assumes that the sync points are all positive.
1689 EXPECT_LT(0u, sync_point); 1706 EXPECT_LT(0u, sync_point);
1690 1707
1691 unsigned release_sync_point = 0; 1708 uint32 release_sync_point = 0;
1692 bool lost_resource = false; 1709 bool lost_resource = false;
1693 ReleaseCallback callback = 1710 ReleaseCallback callback =
1694 base::Bind(ReleaseTextureMailbox, &release_sync_point, &lost_resource); 1711 base::Bind(ReleaseTextureMailbox, &release_sync_point, &lost_resource);
1695 ResourceProvider::ResourceId resource = 1712 ResourceProvider::ResourceId resource =
1696 resource_provider_->CreateResourceFromTextureMailbox( 1713 resource_provider_->CreateResourceFromTextureMailbox(
1697 TextureMailbox(mailbox, sync_point), 1714 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point),
1698 SingleReleaseCallback::Create(callback)); 1715 SingleReleaseCallback::Create(callback));
1699 EXPECT_EQ(1u, context()->NumTextures()); 1716 EXPECT_EQ(1u, context()->NumTextures());
1700 EXPECT_EQ(0u, release_sync_point); 1717 EXPECT_EQ(0u, release_sync_point);
1701 { 1718 {
1702 // Transfer the resource, expect the sync points to be consistent. 1719 // Transfer the resource, expect the sync points to be consistent.
1703 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1720 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1704 resource_ids_to_transfer.push_back(resource); 1721 resource_ids_to_transfer.push_back(resource);
1705 TransferableResourceArray list; 1722 TransferableResourceArray list;
1706 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 1723 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
1707 ASSERT_EQ(1u, list.size()); 1724 ASSERT_EQ(1u, list.size());
1708 EXPECT_LE(sync_point, list[0].sync_point); 1725 EXPECT_LE(sync_point, list[0].mailbox_holder.sync_point);
1709 EXPECT_EQ(0, 1726 EXPECT_EQ(0,
1710 memcmp(mailbox.name, list[0].mailbox.name, sizeof(mailbox.name))); 1727 memcmp(mailbox.name,
1728 list[0].mailbox_holder.mailbox.name,
1729 sizeof(mailbox.name)));
1711 EXPECT_EQ(0u, release_sync_point); 1730 EXPECT_EQ(0u, release_sync_point);
1712 1731
1713 context()->waitSyncPoint(list[0].sync_point); 1732 context()->waitSyncPoint(list[0].mailbox_holder.sync_point);
1714 unsigned other_texture = context()->createTexture(); 1733 unsigned other_texture = context()->createTexture();
1715 context()->bindTexture(GL_TEXTURE_2D, other_texture); 1734 context()->bindTexture(GL_TEXTURE_2D, other_texture);
1716 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1735 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1717 uint8_t test_data[4] = { 0 }; 1736 uint8_t test_data[4] = { 0 };
1718 context()->GetPixels( 1737 context()->GetPixels(
1719 gfx::Size(1, 1), RGBA_8888, test_data); 1738 gfx::Size(1, 1), RGBA_8888, test_data);
1720 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); 1739 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
1721 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1740 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1722 context()->deleteTexture(other_texture); 1741 context()->deleteTexture(other_texture);
1723 list[0].sync_point = context()->insertSyncPoint(); 1742 list[0].mailbox_holder.sync_point = context()->insertSyncPoint();
1724 EXPECT_LT(0u, list[0].sync_point); 1743 EXPECT_LT(0u, list[0].mailbox_holder.sync_point);
1725 1744
1726 // Receive the resource, then delete it, expect the sync points to be 1745 // Receive the resource, then delete it, expect the sync points to be
1727 // consistent. 1746 // consistent.
1728 ReturnedResourceArray returned; 1747 ReturnedResourceArray returned;
1729 TransferableResource::ReturnResources(list, &returned); 1748 TransferableResource::ReturnResources(list, &returned);
1730 resource_provider_->ReceiveReturnsFromParent(returned); 1749 resource_provider_->ReceiveReturnsFromParent(returned);
1731 EXPECT_EQ(1u, context()->NumTextures()); 1750 EXPECT_EQ(1u, context()->NumTextures());
1732 EXPECT_EQ(0u, release_sync_point); 1751 EXPECT_EQ(0u, release_sync_point);
1733 1752
1734 resource_provider_->DeleteResource(resource); 1753 resource_provider_->DeleteResource(resource);
1735 EXPECT_LE(list[0].sync_point, release_sync_point); 1754 EXPECT_LE(list[0].mailbox_holder.sync_point, release_sync_point);
1736 EXPECT_FALSE(lost_resource); 1755 EXPECT_FALSE(lost_resource);
1737 } 1756 }
1738 1757
1739 // We're going to do the same thing as above, but testing the case where we 1758 // We're going to do the same thing as above, but testing the case where we
1740 // delete the resource before we receive it back. 1759 // delete the resource before we receive it back.
1741 sync_point = release_sync_point; 1760 sync_point = release_sync_point;
1742 EXPECT_LT(0u, sync_point); 1761 EXPECT_LT(0u, sync_point);
1743 release_sync_point = 0; 1762 release_sync_point = 0;
1744 resource = resource_provider_->CreateResourceFromTextureMailbox( 1763 resource = resource_provider_->CreateResourceFromTextureMailbox(
1745 TextureMailbox(mailbox, sync_point), 1764 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point),
1746 SingleReleaseCallback::Create(callback)); 1765 SingleReleaseCallback::Create(callback));
1747 EXPECT_EQ(1u, context()->NumTextures()); 1766 EXPECT_EQ(1u, context()->NumTextures());
1748 EXPECT_EQ(0u, release_sync_point); 1767 EXPECT_EQ(0u, release_sync_point);
1749 { 1768 {
1750 // Transfer the resource, expect the sync points to be consistent. 1769 // Transfer the resource, expect the sync points to be consistent.
1751 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1770 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1752 resource_ids_to_transfer.push_back(resource); 1771 resource_ids_to_transfer.push_back(resource);
1753 TransferableResourceArray list; 1772 TransferableResourceArray list;
1754 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 1773 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
1755 ASSERT_EQ(1u, list.size()); 1774 ASSERT_EQ(1u, list.size());
1756 EXPECT_LE(sync_point, list[0].sync_point); 1775 EXPECT_LE(sync_point, list[0].mailbox_holder.sync_point);
1757 EXPECT_EQ(0, 1776 EXPECT_EQ(0,
1758 memcmp(mailbox.name, list[0].mailbox.name, sizeof(mailbox.name))); 1777 memcmp(mailbox.name,
1778 list[0].mailbox_holder.mailbox.name,
1779 sizeof(mailbox.name)));
1759 EXPECT_EQ(0u, release_sync_point); 1780 EXPECT_EQ(0u, release_sync_point);
1760 1781
1761 context()->waitSyncPoint(list[0].sync_point); 1782 context()->waitSyncPoint(list[0].mailbox_holder.sync_point);
1762 unsigned other_texture = context()->createTexture(); 1783 unsigned other_texture = context()->createTexture();
1763 context()->bindTexture(GL_TEXTURE_2D, other_texture); 1784 context()->bindTexture(GL_TEXTURE_2D, other_texture);
1764 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1785 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1765 uint8_t test_data[4] = { 0 }; 1786 uint8_t test_data[4] = { 0 };
1766 context()->GetPixels( 1787 context()->GetPixels(
1767 gfx::Size(1, 1), RGBA_8888, test_data); 1788 gfx::Size(1, 1), RGBA_8888, test_data);
1768 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); 1789 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
1769 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1790 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1770 context()->deleteTexture(other_texture); 1791 context()->deleteTexture(other_texture);
1771 list[0].sync_point = context()->insertSyncPoint(); 1792 list[0].mailbox_holder.sync_point = context()->insertSyncPoint();
1772 EXPECT_LT(0u, list[0].sync_point); 1793 EXPECT_LT(0u, list[0].mailbox_holder.sync_point);
1773 1794
1774 // Delete the resource, which shouldn't do anything. 1795 // Delete the resource, which shouldn't do anything.
1775 resource_provider_->DeleteResource(resource); 1796 resource_provider_->DeleteResource(resource);
1776 EXPECT_EQ(1u, context()->NumTextures()); 1797 EXPECT_EQ(1u, context()->NumTextures());
1777 EXPECT_EQ(0u, release_sync_point); 1798 EXPECT_EQ(0u, release_sync_point);
1778 1799
1779 // Then receive the resource which should release the mailbox, expect the 1800 // Then receive the resource which should release the mailbox, expect the
1780 // sync points to be consistent. 1801 // sync points to be consistent.
1781 ReturnedResourceArray returned; 1802 ReturnedResourceArray returned;
1782 TransferableResource::ReturnResources(list, &returned); 1803 TransferableResource::ReturnResources(list, &returned);
1783 resource_provider_->ReceiveReturnsFromParent(returned); 1804 resource_provider_->ReceiveReturnsFromParent(returned);
1784 EXPECT_LE(list[0].sync_point, release_sync_point); 1805 EXPECT_LE(list[0].mailbox_holder.sync_point, release_sync_point);
1785 EXPECT_FALSE(lost_resource); 1806 EXPECT_FALSE(lost_resource);
1786 } 1807 }
1787 1808
1788 context()->waitSyncPoint(release_sync_point); 1809 context()->waitSyncPoint(release_sync_point);
1789 context()->bindTexture(GL_TEXTURE_2D, texture); 1810 context()->bindTexture(GL_TEXTURE_2D, texture);
1790 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 1811 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
1791 context()->deleteTexture(texture); 1812 context()->deleteTexture(texture);
1792 } 1813 }
1793 1814
1794 TEST_P(ResourceProviderTest, LostResourceInParent) { 1815 TEST_P(ResourceProviderTest, LostResourceInParent) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1914 } 1935 }
1915 1936
1916 // The resource should be lost. 1937 // The resource should be lost.
1917 EXPECT_TRUE(child_resource_provider_->IsLost(resource)); 1938 EXPECT_TRUE(child_resource_provider_->IsLost(resource));
1918 1939
1919 // Lost resources stay in use in the parent forever. 1940 // Lost resources stay in use in the parent forever.
1920 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(resource)); 1941 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(resource));
1921 } 1942 }
1922 1943
1923 TEST_P(ResourceProviderTest, LostMailboxInParent) { 1944 TEST_P(ResourceProviderTest, LostMailboxInParent) {
1924 unsigned release_sync_point = 0; 1945 uint32 release_sync_point = 0;
1925 bool lost_resource = false; 1946 bool lost_resource = false;
1926 bool release_called = false; 1947 bool release_called = false;
1927 unsigned sync_point = 0; 1948 uint32 sync_point = 0;
1928 ResourceProvider::ResourceId resource = CreateChildMailbox( 1949 ResourceProvider::ResourceId resource = CreateChildMailbox(
1929 &release_sync_point, &lost_resource, &release_called, &sync_point); 1950 &release_sync_point, &lost_resource, &release_called, &sync_point);
1930 1951
1931 ReturnedResourceArray returned_to_child; 1952 ReturnedResourceArray returned_to_child;
1932 int child_id = 1953 int child_id =
1933 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1954 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1934 { 1955 {
1935 // Transfer the resource to the parent. 1956 // Transfer the resource to the parent.
1936 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1957 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1937 resource_ids_to_transfer.push_back(resource); 1958 resource_ids_to_transfer.push_back(resource);
(...skipping 26 matching lines...) Expand all
1964 returned_to_child.clear(); 1985 returned_to_child.clear();
1965 } 1986 }
1966 1987
1967 // Delete the resource in the child. Expect the resource to be lost if it's 1988 // Delete the resource in the child. Expect the resource to be lost if it's
1968 // a GL texture. 1989 // a GL texture.
1969 child_resource_provider_->DeleteResource(resource); 1990 child_resource_provider_->DeleteResource(resource);
1970 EXPECT_EQ(lost_resource, GetParam() == ResourceProvider::GLTexture); 1991 EXPECT_EQ(lost_resource, GetParam() == ResourceProvider::GLTexture);
1971 } 1992 }
1972 1993
1973 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) { 1994 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) {
1974 unsigned release_sync_point = 0; 1995 uint32 release_sync_point = 0;
1975 bool lost_resource = false; 1996 bool lost_resource = false;
1976 bool release_called = false; 1997 bool release_called = false;
1977 unsigned sync_point = 0; 1998 uint32 sync_point = 0;
1978 ResourceProvider::ResourceId resource = CreateChildMailbox( 1999 ResourceProvider::ResourceId resource = CreateChildMailbox(
1979 &release_sync_point, &lost_resource, &release_called, &sync_point); 2000 &release_sync_point, &lost_resource, &release_called, &sync_point);
1980 2001
1981 ReturnedResourceArray returned_to_child; 2002 ReturnedResourceArray returned_to_child;
1982 int child_id = 2003 int child_id =
1983 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2004 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1984 { 2005 {
1985 // Transfer the resource to the parent. 2006 // Transfer the resource to the parent.
1986 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2007 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1987 resource_ids_to_transfer.push_back(resource); 2008 resource_ids_to_transfer.push_back(resource);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2053 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
2033 returned_to_child.clear(); 2054 returned_to_child.clear();
2034 } 2055 }
2035 2056
2036 // Delete the resource in the child. Expect the resource to be lost. 2057 // Delete the resource in the child. Expect the resource to be lost.
2037 child_resource_provider_->DeleteResource(resource); 2058 child_resource_provider_->DeleteResource(resource);
2038 EXPECT_TRUE(lost_resource); 2059 EXPECT_TRUE(lost_resource);
2039 } 2060 }
2040 2061
2041 TEST_P(ResourceProviderTest, Shutdown) { 2062 TEST_P(ResourceProviderTest, Shutdown) {
2042 unsigned release_sync_point = 0; 2063 uint32 release_sync_point = 0;
2043 bool lost_resource = false; 2064 bool lost_resource = false;
2044 bool release_called = false; 2065 bool release_called = false;
2045 unsigned sync_point = 0; 2066 uint32 sync_point = 0;
2046 CreateChildMailbox( 2067 CreateChildMailbox(
2047 &release_sync_point, &lost_resource, &release_called, &sync_point); 2068 &release_sync_point, &lost_resource, &release_called, &sync_point);
2048 2069
2049 EXPECT_EQ(0u, release_sync_point); 2070 EXPECT_EQ(0u, release_sync_point);
2050 EXPECT_FALSE(lost_resource); 2071 EXPECT_FALSE(lost_resource);
2051 2072
2052 child_resource_provider_.reset(); 2073 child_resource_provider_.reset();
2053 2074
2054 if (GetParam() == ResourceProvider::GLTexture) { 2075 if (GetParam() == ResourceProvider::GLTexture) {
2055 EXPECT_LE(sync_point, release_sync_point); 2076 EXPECT_LE(sync_point, release_sync_point);
2056 } 2077 }
2057 EXPECT_TRUE(release_called); 2078 EXPECT_TRUE(release_called);
2058 EXPECT_FALSE(lost_resource); 2079 EXPECT_FALSE(lost_resource);
2059 } 2080 }
2060 2081
2061 TEST_P(ResourceProviderTest, ShutdownWithExportedResource) { 2082 TEST_P(ResourceProviderTest, ShutdownWithExportedResource) {
2062 unsigned release_sync_point = 0; 2083 uint32 release_sync_point = 0;
2063 bool lost_resource = false; 2084 bool lost_resource = false;
2064 bool release_called = false; 2085 bool release_called = false;
2065 unsigned sync_point = 0; 2086 uint32 sync_point = 0;
2066 ResourceProvider::ResourceId resource = CreateChildMailbox( 2087 ResourceProvider::ResourceId resource = CreateChildMailbox(
2067 &release_sync_point, &lost_resource, &release_called, &sync_point); 2088 &release_sync_point, &lost_resource, &release_called, &sync_point);
2068 2089
2069 // Transfer the resource, so we can't release it properly on shutdown. 2090 // Transfer the resource, so we can't release it properly on shutdown.
2070 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2091 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2071 resource_ids_to_transfer.push_back(resource); 2092 resource_ids_to_transfer.push_back(resource);
2072 TransferableResourceArray list; 2093 TransferableResourceArray list;
2073 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2094 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2074 &list); 2095 &list);
2075 2096
2076 EXPECT_EQ(0u, release_sync_point); 2097 EXPECT_EQ(0u, release_sync_point);
2077 EXPECT_FALSE(lost_resource); 2098 EXPECT_FALSE(lost_resource);
2078 2099
2079 child_resource_provider_.reset(); 2100 child_resource_provider_.reset();
2080 2101
2081 // Since the resource is in the parent, the child considers it lost. 2102 // Since the resource is in the parent, the child considers it lost.
2082 EXPECT_EQ(0u, release_sync_point); 2103 EXPECT_EQ(0u, release_sync_point);
2083 EXPECT_TRUE(lost_resource); 2104 EXPECT_TRUE(lost_resource);
2084 } 2105 }
2085 2106
2086 TEST_P(ResourceProviderTest, LostContext) { 2107 TEST_P(ResourceProviderTest, LostContext) {
2087 // TextureMailbox callbacks only exist for GL textures for now. 2108 // TextureMailbox callbacks only exist for GL textures for now.
2088 if (GetParam() != ResourceProvider::GLTexture) 2109 if (GetParam() != ResourceProvider::GLTexture)
2089 return; 2110 return;
2090 unsigned texture = context()->createTexture(); 2111 unsigned texture = context()->createTexture();
2091 context()->bindTexture(GL_TEXTURE_2D, texture); 2112 context()->bindTexture(GL_TEXTURE_2D, texture);
2092 gpu::Mailbox mailbox; 2113 gpu::Mailbox mailbox;
2093 context()->genMailboxCHROMIUM(mailbox.name); 2114 context()->genMailboxCHROMIUM(mailbox.name);
2094 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 2115 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
2095 unsigned sync_point = context()->insertSyncPoint(); 2116 uint32 sync_point = context()->insertSyncPoint();
2096 2117
2097 EXPECT_LT(0u, sync_point); 2118 EXPECT_LT(0u, sync_point);
2098 2119
2099 unsigned release_sync_point = 0; 2120 uint32 release_sync_point = 0;
2100 bool lost_resource = false; 2121 bool lost_resource = false;
2101 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( 2122 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create(
2102 base::Bind(ReleaseTextureMailbox, &release_sync_point, &lost_resource)); 2123 base::Bind(ReleaseTextureMailbox, &release_sync_point, &lost_resource));
2103 resource_provider_->CreateResourceFromTextureMailbox( 2124 resource_provider_->CreateResourceFromTextureMailbox(
2104 TextureMailbox(mailbox, sync_point), 2125 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point), callback.Pass());
2105 callback.Pass());
2106 2126
2107 EXPECT_EQ(0u, release_sync_point); 2127 EXPECT_EQ(0u, release_sync_point);
2108 EXPECT_FALSE(lost_resource); 2128 EXPECT_FALSE(lost_resource);
2109 2129
2110 resource_provider_->DidLoseOutputSurface(); 2130 resource_provider_->DidLoseOutputSurface();
2111 resource_provider_.reset(); 2131 resource_provider_.reset();
2112 2132
2113 EXPECT_LE(sync_point, release_sync_point); 2133 EXPECT_LE(sync_point, release_sync_point);
2114 EXPECT_TRUE(lost_resource); 2134 EXPECT_TRUE(lost_resource);
2115 } 2135 }
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
2344 2364
2345 FakeOutputSurfaceClient output_surface_client; 2365 FakeOutputSurfaceClient output_surface_client;
2346 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 2366 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
2347 context_owned.PassAs<TestWebGraphicsContext3D>())); 2367 context_owned.PassAs<TestWebGraphicsContext3D>()));
2348 CHECK(output_surface->BindToClient(&output_surface_client)); 2368 CHECK(output_surface->BindToClient(&output_surface_client));
2349 2369
2350 scoped_ptr<ResourceProvider> resource_provider( 2370 scoped_ptr<ResourceProvider> resource_provider(
2351 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2371 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2352 2372
2353 unsigned texture_id = 1; 2373 unsigned texture_id = 1;
2354 unsigned sync_point = 30; 2374 uint32 sync_point = 30;
2355 unsigned target = GL_TEXTURE_2D; 2375 unsigned target = GL_TEXTURE_2D;
2356 2376
2357 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); 2377 EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
2358 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); 2378 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
2359 EXPECT_CALL(*context, insertSyncPoint()).Times(0); 2379 EXPECT_CALL(*context, insertSyncPoint()).Times(0);
2360 EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); 2380 EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
2361 EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); 2381 EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
2362 2382
2363 gpu::Mailbox gpu_mailbox; 2383 gpu::Mailbox gpu_mailbox;
2364 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); 2384 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
2365 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( 2385 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create(
2366 base::Bind(&EmptyReleaseCallback)); 2386 base::Bind(&EmptyReleaseCallback));
2367 2387
2368 TextureMailbox mailbox(gpu_mailbox, sync_point); 2388 TextureMailbox mailbox(gpu_mailbox, target, sync_point);
2369 2389
2370 ResourceProvider::ResourceId id = 2390 ResourceProvider::ResourceId id =
2371 resource_provider->CreateResourceFromTextureMailbox( 2391 resource_provider->CreateResourceFromTextureMailbox(
2372 mailbox, callback.Pass()); 2392 mailbox, callback.Pass());
2373 EXPECT_NE(0u, id); 2393 EXPECT_NE(0u, id);
2374 2394
2375 Mock::VerifyAndClearExpectations(context); 2395 Mock::VerifyAndClearExpectations(context);
2376 2396
2377 { 2397 {
2378 // Using the texture does a consume of the mailbox. 2398 // Using the texture does a consume of the mailbox.
(...skipping 29 matching lines...) Expand all
2408 2428
2409 FakeOutputSurfaceClient output_surface_client; 2429 FakeOutputSurfaceClient output_surface_client;
2410 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 2430 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
2411 context_owned.PassAs<TestWebGraphicsContext3D>())); 2431 context_owned.PassAs<TestWebGraphicsContext3D>()));
2412 CHECK(output_surface->BindToClient(&output_surface_client)); 2432 CHECK(output_surface->BindToClient(&output_surface_client));
2413 2433
2414 scoped_ptr<ResourceProvider> resource_provider( 2434 scoped_ptr<ResourceProvider> resource_provider(
2415 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1)); 2435 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1));
2416 2436
2417 unsigned texture_id = 1; 2437 unsigned texture_id = 1;
2418 unsigned sync_point = 30; 2438 uint32 sync_point = 30;
2419 unsigned target = GL_TEXTURE_EXTERNAL_OES; 2439 unsigned target = GL_TEXTURE_EXTERNAL_OES;
2420 2440
2421 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); 2441 EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
2422 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); 2442 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
2423 EXPECT_CALL(*context, insertSyncPoint()).Times(0); 2443 EXPECT_CALL(*context, insertSyncPoint()).Times(0);
2424 EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); 2444 EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
2425 EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); 2445 EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
2426 2446
2427 gpu::Mailbox gpu_mailbox; 2447 gpu::Mailbox gpu_mailbox;
2428 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); 2448 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
3161 resource_provider->AllocateForTesting(id); 3181 resource_provider->AllocateForTesting(id);
3162 Mock::VerifyAndClearExpectations(context); 3182 Mock::VerifyAndClearExpectations(context);
3163 3183
3164 DCHECK_EQ(10u, context->PeekTextureId()); 3184 DCHECK_EQ(10u, context->PeekTextureId());
3165 resource_provider->DeleteResource(id); 3185 resource_provider->DeleteResource(id);
3166 } 3186 }
3167 } 3187 }
3168 3188
3169 } // namespace 3189 } // namespace
3170 } // namespace cc 3190 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/single_release_callback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698