OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
11 #include <deque> | 11 #include <deque> |
12 #include <map> | 12 #include <map> |
13 #include <set> | 13 #include <set> |
14 #include <unordered_map> | 14 #include <unordered_map> |
15 #include <vector> | 15 #include <vector> |
16 | 16 |
17 #include "base/bind.h" | 17 #include "base/bind.h" |
18 #include "base/logging.h" | 18 #include "base/logging.h" |
| 19 #include "base/memory/ptr_util.h" |
19 #include "base/memory/ref_counted.h" | 20 #include "base/memory/ref_counted.h" |
20 #include "cc/output/output_surface.h" | 21 #include "cc/output/output_surface.h" |
21 #include "cc/resources/returned_resource.h" | 22 #include "cc/resources/returned_resource.h" |
22 #include "cc/resources/shared_bitmap_manager.h" | 23 #include "cc/resources/shared_bitmap_manager.h" |
23 #include "cc/resources/single_release_callback.h" | 24 #include "cc/resources/single_release_callback.h" |
24 #include "cc/test/fake_output_surface.h" | 25 #include "cc/test/fake_output_surface.h" |
25 #include "cc/test/fake_output_surface_client.h" | 26 #include "cc/test/fake_output_surface_client.h" |
26 #include "cc/test/test_gpu_memory_buffer_manager.h" | 27 #include "cc/test/test_gpu_memory_buffer_manager.h" |
27 #include "cc/test/test_shared_bitmap_manager.h" | 28 #include "cc/test/test_shared_bitmap_manager.h" |
28 #include "cc/test/test_texture.h" | 29 #include "cc/test/test_texture.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 BlockingTaskRunner** release_main_thread_task_runner, | 62 BlockingTaskRunner** release_main_thread_task_runner, |
62 const gpu::SyncToken& sync_token, | 63 const gpu::SyncToken& sync_token, |
63 bool lost_resource, | 64 bool lost_resource, |
64 BlockingTaskRunner* main_thread_task_runner) { | 65 BlockingTaskRunner* main_thread_task_runner) { |
65 *release_sync_token = sync_token; | 66 *release_sync_token = sync_token; |
66 *release_lost_resource = lost_resource; | 67 *release_lost_resource = lost_resource; |
67 *release_main_thread_task_runner = main_thread_task_runner; | 68 *release_main_thread_task_runner = main_thread_task_runner; |
68 } | 69 } |
69 | 70 |
70 static void SharedBitmapReleaseCallback( | 71 static void SharedBitmapReleaseCallback( |
71 scoped_ptr<SharedBitmap> bitmap, | 72 std::unique_ptr<SharedBitmap> bitmap, |
72 const gpu::SyncToken& sync_token, | 73 const gpu::SyncToken& sync_token, |
73 bool lost_resource, | 74 bool lost_resource, |
74 BlockingTaskRunner* main_thread_task_runner) {} | 75 BlockingTaskRunner* main_thread_task_runner) {} |
75 | 76 |
76 static void ReleaseSharedBitmapCallback( | 77 static void ReleaseSharedBitmapCallback( |
77 scoped_ptr<SharedBitmap> shared_bitmap, | 78 std::unique_ptr<SharedBitmap> shared_bitmap, |
78 bool* release_called, | 79 bool* release_called, |
79 gpu::SyncToken* release_sync_token, | 80 gpu::SyncToken* release_sync_token, |
80 bool* lost_resource_result, | 81 bool* lost_resource_result, |
81 const gpu::SyncToken& sync_token, | 82 const gpu::SyncToken& sync_token, |
82 bool lost_resource, | 83 bool lost_resource, |
83 BlockingTaskRunner* main_thread_task_runner) { | 84 BlockingTaskRunner* main_thread_task_runner) { |
84 *release_called = true; | 85 *release_called = true; |
85 *release_sync_token = sync_token; | 86 *release_sync_token = sync_token; |
86 *lost_resource_result = lost_resource; | 87 *lost_resource_result = lost_resource; |
87 } | 88 } |
88 | 89 |
89 static scoped_ptr<SharedBitmap> CreateAndFillSharedBitmap( | 90 static std::unique_ptr<SharedBitmap> CreateAndFillSharedBitmap( |
90 SharedBitmapManager* manager, | 91 SharedBitmapManager* manager, |
91 const gfx::Size& size, | 92 const gfx::Size& size, |
92 uint32_t value) { | 93 uint32_t value) { |
93 scoped_ptr<SharedBitmap> shared_bitmap = manager->AllocateSharedBitmap(size); | 94 std::unique_ptr<SharedBitmap> shared_bitmap = |
| 95 manager->AllocateSharedBitmap(size); |
94 CHECK(shared_bitmap); | 96 CHECK(shared_bitmap); |
95 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_bitmap->pixels()); | 97 uint32_t* pixels = reinterpret_cast<uint32_t*>(shared_bitmap->pixels()); |
96 CHECK(pixels); | 98 CHECK(pixels); |
97 std::fill_n(pixels, size.GetArea(), value); | 99 std::fill_n(pixels, size.GetArea(), value); |
98 return shared_bitmap; | 100 return shared_bitmap; |
99 } | 101 } |
100 | 102 |
101 class TextureStateTrackingContext : public TestWebGraphicsContext3D { | 103 class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
102 public: | 104 public: |
103 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture)); | 105 MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture)); |
(...skipping 25 matching lines...) Expand all Loading... |
129 | 131 |
130 GLuint64 GetNextFenceSync() const { return next_fence_sync_; } | 132 GLuint64 GetNextFenceSync() const { return next_fence_sync_; } |
131 | 133 |
132 GLuint64 next_fence_sync_ = 1; | 134 GLuint64 next_fence_sync_ = 1; |
133 }; | 135 }; |
134 | 136 |
135 // Shared data between multiple ResourceProviderContext. This contains mailbox | 137 // Shared data between multiple ResourceProviderContext. This contains mailbox |
136 // contents as well as information about sync points. | 138 // contents as well as information about sync points. |
137 class ContextSharedData { | 139 class ContextSharedData { |
138 public: | 140 public: |
139 static scoped_ptr<ContextSharedData> Create() { | 141 static std::unique_ptr<ContextSharedData> Create() { |
140 return make_scoped_ptr(new ContextSharedData()); | 142 return base::WrapUnique(new ContextSharedData()); |
141 } | 143 } |
142 | 144 |
143 uint32_t InsertFenceSync() { return next_fence_sync_++; } | 145 uint32_t InsertFenceSync() { return next_fence_sync_++; } |
144 | 146 |
145 void GenMailbox(GLbyte* mailbox) { | 147 void GenMailbox(GLbyte* mailbox) { |
146 memset(mailbox, 0, GL_MAILBOX_SIZE_CHROMIUM); | 148 memset(mailbox, 0, GL_MAILBOX_SIZE_CHROMIUM); |
147 memcpy(mailbox, &next_mailbox_, sizeof(next_mailbox_)); | 149 memcpy(mailbox, &next_mailbox_, sizeof(next_mailbox_)); |
148 ++next_mailbox_; | 150 ++next_mailbox_; |
149 } | 151 } |
150 | 152 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 | 184 |
183 uint64_t next_fence_sync_; | 185 uint64_t next_fence_sync_; |
184 unsigned next_mailbox_; | 186 unsigned next_mailbox_; |
185 using TextureMap = std::unordered_map<unsigned, scoped_refptr<TestTexture>>; | 187 using TextureMap = std::unordered_map<unsigned, scoped_refptr<TestTexture>>; |
186 TextureMap textures_; | 188 TextureMap textures_; |
187 std::unordered_map<unsigned, uint32_t> sync_point_for_mailbox_; | 189 std::unordered_map<unsigned, uint32_t> sync_point_for_mailbox_; |
188 }; | 190 }; |
189 | 191 |
190 class ResourceProviderContext : public TestWebGraphicsContext3D { | 192 class ResourceProviderContext : public TestWebGraphicsContext3D { |
191 public: | 193 public: |
192 static scoped_ptr<ResourceProviderContext> Create( | 194 static std::unique_ptr<ResourceProviderContext> Create( |
193 ContextSharedData* shared_data) { | 195 ContextSharedData* shared_data) { |
194 return make_scoped_ptr(new ResourceProviderContext(shared_data)); | 196 return base::WrapUnique(new ResourceProviderContext(shared_data)); |
195 } | 197 } |
196 | 198 |
197 GLuint64 insertFenceSync() override { | 199 GLuint64 insertFenceSync() override { |
198 return shared_data_->InsertFenceSync(); | 200 return shared_data_->InsertFenceSync(); |
199 } | 201 } |
200 | 202 |
201 void genSyncToken(GLuint64 fence_sync, GLbyte* sync_token) override { | 203 void genSyncToken(GLuint64 fence_sync, GLbyte* sync_token) override { |
202 gpu::SyncToken sync_token_data(gpu::CommandBufferNamespace::GPU_IO, 0, | 204 gpu::SyncToken sync_token_data(gpu::CommandBufferNamespace::GPU_IO, 0, |
203 gpu::CommandBufferId::FromUnsafeValue(0x123), | 205 gpu::CommandBufferId::FromUnsafeValue(0x123), |
204 fence_sync); | 206 fence_sync); |
205 sync_token_data.SetVerifyFlush(); | 207 sync_token_data.SetVerifyFlush(); |
206 // Commit the produceTextureCHROMIUM calls at this point, so that | 208 // Commit the produceTextureCHROMIUM calls at this point, so that |
207 // they're associated with the sync point. | 209 // they're associated with the sync point. |
208 for (const scoped_ptr<PendingProduceTexture>& pending_texture : | 210 for (const std::unique_ptr<PendingProduceTexture>& pending_texture : |
209 pending_produce_textures_) { | 211 pending_produce_textures_) { |
210 shared_data_->ProduceTexture(pending_texture->mailbox, sync_token_data, | 212 shared_data_->ProduceTexture(pending_texture->mailbox, sync_token_data, |
211 pending_texture->texture); | 213 pending_texture->texture); |
212 } | 214 } |
213 pending_produce_textures_.clear(); | 215 pending_produce_textures_.clear(); |
214 memcpy(sync_token, &sync_token_data, sizeof(sync_token_data)); | 216 memcpy(sync_token, &sync_token_data, sizeof(sync_token_data)); |
215 } | 217 } |
216 | 218 |
217 void waitSyncToken(const GLbyte* sync_token) override { | 219 void waitSyncToken(const GLbyte* sync_token) override { |
218 gpu::SyncToken sync_token_data; | 220 gpu::SyncToken sync_token_data; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 void genMailboxCHROMIUM(GLbyte* mailbox) override { | 296 void genMailboxCHROMIUM(GLbyte* mailbox) override { |
295 return shared_data_->GenMailbox(mailbox); | 297 return shared_data_->GenMailbox(mailbox); |
296 } | 298 } |
297 | 299 |
298 void produceTextureDirectCHROMIUM(GLuint texture, | 300 void produceTextureDirectCHROMIUM(GLuint texture, |
299 GLenum target, | 301 GLenum target, |
300 const GLbyte* mailbox) override { | 302 const GLbyte* mailbox) override { |
301 // Delay moving the texture into the mailbox until the next | 303 // Delay moving the texture into the mailbox until the next |
302 // sync token, so that it is not visible to other contexts that | 304 // sync token, so that it is not visible to other contexts that |
303 // haven't waited on that sync point. | 305 // haven't waited on that sync point. |
304 scoped_ptr<PendingProduceTexture> pending(new PendingProduceTexture); | 306 std::unique_ptr<PendingProduceTexture> pending(new PendingProduceTexture); |
305 memcpy(pending->mailbox, mailbox, sizeof(pending->mailbox)); | 307 memcpy(pending->mailbox, mailbox, sizeof(pending->mailbox)); |
306 base::AutoLock lock_for_texture_access(namespace_->lock); | 308 base::AutoLock lock_for_texture_access(namespace_->lock); |
307 pending->texture = UnboundTexture(texture); | 309 pending->texture = UnboundTexture(texture); |
308 pending_produce_textures_.push_back(std::move(pending)); | 310 pending_produce_textures_.push_back(std::move(pending)); |
309 } | 311 } |
310 | 312 |
311 GLuint createAndConsumeTextureCHROMIUM(GLenum target, | 313 GLuint createAndConsumeTextureCHROMIUM(GLenum target, |
312 const GLbyte* mailbox) override { | 314 const GLbyte* mailbox) override { |
313 GLuint texture_id = createTexture(); | 315 GLuint texture_id = createTexture(); |
314 base::AutoLock lock_for_texture_access(namespace_->lock); | 316 base::AutoLock lock_for_texture_access(namespace_->lock); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 src += in_pitch; | 375 src += in_pitch; |
374 } | 376 } |
375 } | 377 } |
376 | 378 |
377 struct PendingProduceTexture { | 379 struct PendingProduceTexture { |
378 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; | 380 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; |
379 scoped_refptr<TestTexture> texture; | 381 scoped_refptr<TestTexture> texture; |
380 }; | 382 }; |
381 ContextSharedData* shared_data_; | 383 ContextSharedData* shared_data_; |
382 gpu::SyncToken last_waited_sync_token_; | 384 gpu::SyncToken last_waited_sync_token_; |
383 std::deque<scoped_ptr<PendingProduceTexture>> pending_produce_textures_; | 385 std::deque<std::unique_ptr<PendingProduceTexture>> pending_produce_textures_; |
384 }; | 386 }; |
385 | 387 |
386 void GetResourcePixels(ResourceProvider* resource_provider, | 388 void GetResourcePixels(ResourceProvider* resource_provider, |
387 ResourceProviderContext* context, | 389 ResourceProviderContext* context, |
388 ResourceId id, | 390 ResourceId id, |
389 const gfx::Size& size, | 391 const gfx::Size& size, |
390 ResourceFormat format, | 392 ResourceFormat format, |
391 uint8_t* pixels) { | 393 uint8_t* pixels) { |
392 resource_provider->WaitSyncTokenIfNeeded(id); | 394 resource_provider->WaitSyncTokenIfNeeded(id); |
393 switch (resource_provider->default_resource_type()) { | 395 switch (resource_provider->default_resource_type()) { |
(...skipping 20 matching lines...) Expand all Loading... |
414 : public testing::TestWithParam<ResourceProvider::ResourceType> { | 416 : public testing::TestWithParam<ResourceProvider::ResourceType> { |
415 public: | 417 public: |
416 explicit ResourceProviderTest(bool child_needs_sync_token) | 418 explicit ResourceProviderTest(bool child_needs_sync_token) |
417 : shared_data_(ContextSharedData::Create()), | 419 : shared_data_(ContextSharedData::Create()), |
418 context3d_(NULL), | 420 context3d_(NULL), |
419 child_context_(NULL), | 421 child_context_(NULL), |
420 main_thread_task_runner_(BlockingTaskRunner::Create(NULL)) { | 422 main_thread_task_runner_(BlockingTaskRunner::Create(NULL)) { |
421 switch (GetParam()) { | 423 switch (GetParam()) { |
422 case ResourceProvider::RESOURCE_TYPE_GPU_MEMORY_BUFFER: | 424 case ResourceProvider::RESOURCE_TYPE_GPU_MEMORY_BUFFER: |
423 case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: { | 425 case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: { |
424 scoped_ptr<ResourceProviderContext> context3d( | 426 std::unique_ptr<ResourceProviderContext> context3d( |
425 ResourceProviderContext::Create(shared_data_.get())); | 427 ResourceProviderContext::Create(shared_data_.get())); |
426 context3d_ = context3d.get(); | 428 context3d_ = context3d.get(); |
427 | 429 |
428 scoped_refptr<TestContextProvider> context_provider = | 430 scoped_refptr<TestContextProvider> context_provider = |
429 TestContextProvider::Create(std::move(context3d)); | 431 TestContextProvider::Create(std::move(context3d)); |
430 | 432 |
431 output_surface_ = FakeOutputSurface::Create3d(context_provider); | 433 output_surface_ = FakeOutputSurface::Create3d(context_provider); |
432 | 434 |
433 scoped_ptr<ResourceProviderContext> child_context_owned = | 435 std::unique_ptr<ResourceProviderContext> child_context_owned = |
434 ResourceProviderContext::Create(shared_data_.get()); | 436 ResourceProviderContext::Create(shared_data_.get()); |
435 child_context_ = child_context_owned.get(); | 437 child_context_ = child_context_owned.get(); |
436 if (child_needs_sync_token) { | 438 if (child_needs_sync_token) { |
437 child_output_surface_ = | 439 child_output_surface_ = |
438 FakeOutputSurface::Create3d(std::move(child_context_owned)); | 440 FakeOutputSurface::Create3d(std::move(child_context_owned)); |
439 } else { | 441 } else { |
440 child_output_surface_ = FakeOutputSurface::CreateNoRequireSyncPoint( | 442 child_output_surface_ = FakeOutputSurface::CreateNoRequireSyncPoint( |
441 std::move(child_context_owned)); | 443 std::move(child_context_owned)); |
442 } | 444 } |
443 break; | 445 break; |
444 } | 446 } |
445 case ResourceProvider::RESOURCE_TYPE_BITMAP: | 447 case ResourceProvider::RESOURCE_TYPE_BITMAP: |
446 output_surface_ = FakeOutputSurface::CreateSoftware( | 448 output_surface_ = FakeOutputSurface::CreateSoftware( |
447 make_scoped_ptr(new SoftwareOutputDevice)); | 449 base::WrapUnique(new SoftwareOutputDevice)); |
448 child_output_surface_ = FakeOutputSurface::CreateSoftware( | 450 child_output_surface_ = FakeOutputSurface::CreateSoftware( |
449 make_scoped_ptr(new SoftwareOutputDevice)); | 451 base::WrapUnique(new SoftwareOutputDevice)); |
450 break; | 452 break; |
451 } | 453 } |
452 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 454 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
453 CHECK(child_output_surface_->BindToClient(&child_output_surface_client_)); | 455 CHECK(child_output_surface_->BindToClient(&child_output_surface_client_)); |
454 | 456 |
455 shared_bitmap_manager_.reset(new TestSharedBitmapManager); | 457 shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
456 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); | 458 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); |
457 | 459 |
458 resource_provider_ = ResourceProvider::Create( | 460 resource_provider_ = ResourceProvider::Create( |
459 output_surface_.get(), shared_bitmap_manager_.get(), | 461 output_surface_.get(), shared_bitmap_manager_.get(), |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { | 495 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { |
494 unsigned texture = child_context_->createTexture(); | 496 unsigned texture = child_context_->createTexture(); |
495 gpu::Mailbox gpu_mailbox; | 497 gpu::Mailbox gpu_mailbox; |
496 child_context_->genMailboxCHROMIUM(gpu_mailbox.name); | 498 child_context_->genMailboxCHROMIUM(gpu_mailbox.name); |
497 child_context_->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, | 499 child_context_->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, |
498 gpu_mailbox.name); | 500 gpu_mailbox.name); |
499 child_context_->genSyncToken(child_context_->insertFenceSync(), | 501 child_context_->genSyncToken(child_context_->insertFenceSync(), |
500 sync_token->GetData()); | 502 sync_token->GetData()); |
501 EXPECT_TRUE(sync_token->HasData()); | 503 EXPECT_TRUE(sync_token->HasData()); |
502 | 504 |
503 scoped_ptr<SharedBitmap> shared_bitmap; | 505 std::unique_ptr<SharedBitmap> shared_bitmap; |
504 scoped_ptr<SingleReleaseCallbackImpl> callback = | 506 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
505 SingleReleaseCallbackImpl::Create(base::Bind( | 507 SingleReleaseCallbackImpl::Create(base::Bind( |
506 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap), | 508 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap), |
507 release_called, release_sync_token, lost_resource)); | 509 release_called, release_sync_token, lost_resource)); |
508 return child_resource_provider_->CreateResourceFromTextureMailbox( | 510 return child_resource_provider_->CreateResourceFromTextureMailbox( |
509 TextureMailbox(gpu_mailbox, *sync_token, GL_TEXTURE_2D), | 511 TextureMailbox(gpu_mailbox, *sync_token, GL_TEXTURE_2D), |
510 std::move(callback)); | 512 std::move(callback)); |
511 } else { | 513 } else { |
512 gfx::Size size(64, 64); | 514 gfx::Size size(64, 64); |
513 scoped_ptr<SharedBitmap> shared_bitmap( | 515 std::unique_ptr<SharedBitmap> shared_bitmap( |
514 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, 0)); | 516 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, 0)); |
515 | 517 |
516 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); | 518 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); |
517 scoped_ptr<SingleReleaseCallbackImpl> callback = | 519 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
518 SingleReleaseCallbackImpl::Create(base::Bind( | 520 SingleReleaseCallbackImpl::Create(base::Bind( |
519 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap), | 521 ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap), |
520 release_called, release_sync_token, lost_resource)); | 522 release_called, release_sync_token, lost_resource)); |
521 return child_resource_provider_->CreateResourceFromTextureMailbox( | 523 return child_resource_provider_->CreateResourceFromTextureMailbox( |
522 TextureMailbox(shared_bitmap_ptr, size), std::move(callback)); | 524 TextureMailbox(shared_bitmap_ptr, size), std::move(callback)); |
523 } | 525 } |
524 } | 526 } |
525 | 527 |
526 public: | 528 public: |
527 static bool use_gpu_memory_buffer_resources() { | 529 static bool use_gpu_memory_buffer_resources() { |
528 return use_gpu_memory_buffer_resources_; | 530 return use_gpu_memory_buffer_resources_; |
529 } | 531 } |
530 static std::vector<unsigned> use_image_texture_targets() { | 532 static std::vector<unsigned> use_image_texture_targets() { |
531 return use_image_texture_targets_; | 533 return use_image_texture_targets_; |
532 } | 534 } |
533 | 535 |
534 protected: | 536 protected: |
535 static bool use_gpu_memory_buffer_resources_; | 537 static bool use_gpu_memory_buffer_resources_; |
536 static std::vector<unsigned> use_image_texture_targets_; | 538 static std::vector<unsigned> use_image_texture_targets_; |
537 scoped_ptr<ContextSharedData> shared_data_; | 539 std::unique_ptr<ContextSharedData> shared_data_; |
538 ResourceProviderContext* context3d_; | 540 ResourceProviderContext* context3d_; |
539 ResourceProviderContext* child_context_; | 541 ResourceProviderContext* child_context_; |
540 FakeOutputSurfaceClient output_surface_client_; | 542 FakeOutputSurfaceClient output_surface_client_; |
541 FakeOutputSurfaceClient child_output_surface_client_; | 543 FakeOutputSurfaceClient child_output_surface_client_; |
542 scoped_ptr<OutputSurface> output_surface_; | 544 std::unique_ptr<OutputSurface> output_surface_; |
543 scoped_ptr<OutputSurface> child_output_surface_; | 545 std::unique_ptr<OutputSurface> child_output_surface_; |
544 scoped_ptr<BlockingTaskRunner> main_thread_task_runner_; | 546 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_; |
545 scoped_ptr<ResourceProvider> resource_provider_; | 547 std::unique_ptr<ResourceProvider> resource_provider_; |
546 scoped_ptr<ResourceProvider> child_resource_provider_; | 548 std::unique_ptr<ResourceProvider> child_resource_provider_; |
547 scoped_ptr<TestSharedBitmapManager> shared_bitmap_manager_; | 549 std::unique_ptr<TestSharedBitmapManager> shared_bitmap_manager_; |
548 scoped_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_; | 550 std::unique_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_; |
549 }; | 551 }; |
550 | 552 |
551 bool ResourceProviderTest::use_gpu_memory_buffer_resources_ = false; | 553 bool ResourceProviderTest::use_gpu_memory_buffer_resources_ = false; |
552 | 554 |
553 std::vector<unsigned> ResourceProviderTest::use_image_texture_targets_ = | 555 std::vector<unsigned> ResourceProviderTest::use_image_texture_targets_ = |
554 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, | 556 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, |
555 GL_TEXTURE_2D); | 557 GL_TEXTURE_2D); |
556 | 558 |
557 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type, | 559 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type, |
558 ResourceProvider* resource_provider, | 560 ResourceProvider* resource_provider, |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1256 ResourceId id1 = child_resource_provider_->CreateResource( | 1258 ResourceId id1 = child_resource_provider_->CreateResource( |
1257 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 1259 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
1258 uint8_t data1[4] = { 1, 2, 3, 4 }; | 1260 uint8_t data1[4] = { 1, 2, 3, 4 }; |
1259 child_resource_provider_->CopyToResource(id1, data1, size); | 1261 child_resource_provider_->CopyToResource(id1, data1, size); |
1260 | 1262 |
1261 ResourceId id2 = child_resource_provider_->CreateResource( | 1263 ResourceId id2 = child_resource_provider_->CreateResource( |
1262 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 1264 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
1263 uint8_t data2[4] = { 5, 5, 5, 5 }; | 1265 uint8_t data2[4] = { 5, 5, 5, 5 }; |
1264 child_resource_provider_->CopyToResource(id2, data2, size); | 1266 child_resource_provider_->CopyToResource(id2, data2, size); |
1265 | 1267 |
1266 scoped_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap( | 1268 std::unique_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap( |
1267 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0)); | 1269 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0)); |
1268 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); | 1270 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); |
1269 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox( | 1271 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox( |
1270 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)), | 1272 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)), |
1271 SingleReleaseCallbackImpl::Create(base::Bind( | 1273 SingleReleaseCallbackImpl::Create(base::Bind( |
1272 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap)))); | 1274 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap)))); |
1273 | 1275 |
1274 ReturnedResourceArray returned_to_child; | 1276 ReturnedResourceArray returned_to_child; |
1275 int child_id = | 1277 int child_id = |
1276 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1278 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 EXPECT_EQ(expected_ids, returned_ids); | 1446 EXPECT_EQ(expected_ids, returned_ids); |
1445 EXPECT_FALSE(returned_to_child[0].lost); | 1447 EXPECT_FALSE(returned_to_child[0].lost); |
1446 EXPECT_FALSE(returned_to_child[1].lost); | 1448 EXPECT_FALSE(returned_to_child[1].lost); |
1447 EXPECT_FALSE(returned_to_child[2].lost); | 1449 EXPECT_FALSE(returned_to_child[2].lost); |
1448 } | 1450 } |
1449 | 1451 |
1450 TEST_P(ResourceProviderTest, TransferGLToSoftware) { | 1452 TEST_P(ResourceProviderTest, TransferGLToSoftware) { |
1451 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) | 1453 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) |
1452 return; | 1454 return; |
1453 | 1455 |
1454 scoped_ptr<ResourceProviderContext> child_context_owned( | 1456 std::unique_ptr<ResourceProviderContext> child_context_owned( |
1455 ResourceProviderContext::Create(shared_data_.get())); | 1457 ResourceProviderContext::Create(shared_data_.get())); |
1456 | 1458 |
1457 FakeOutputSurfaceClient child_output_surface_client; | 1459 FakeOutputSurfaceClient child_output_surface_client; |
1458 scoped_ptr<OutputSurface> child_output_surface( | 1460 std::unique_ptr<OutputSurface> child_output_surface( |
1459 FakeOutputSurface::Create3d(std::move(child_context_owned))); | 1461 FakeOutputSurface::Create3d(std::move(child_context_owned))); |
1460 CHECK(child_output_surface->BindToClient(&child_output_surface_client)); | 1462 CHECK(child_output_surface->BindToClient(&child_output_surface_client)); |
1461 | 1463 |
1462 scoped_ptr<ResourceProvider> child_resource_provider(ResourceProvider::Create( | 1464 std::unique_ptr<ResourceProvider> child_resource_provider( |
1463 child_output_surface.get(), shared_bitmap_manager_.get(), | 1465 ResourceProvider::Create( |
1464 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 1466 child_output_surface.get(), shared_bitmap_manager_.get(), |
1465 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 1467 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
| 1468 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
1466 | 1469 |
1467 gfx::Size size(1, 1); | 1470 gfx::Size size(1, 1); |
1468 ResourceFormat format = RGBA_8888; | 1471 ResourceFormat format = RGBA_8888; |
1469 size_t pixel_size = TextureSizeBytes(size, format); | 1472 size_t pixel_size = TextureSizeBytes(size, format); |
1470 ASSERT_EQ(4U, pixel_size); | 1473 ASSERT_EQ(4U, pixel_size); |
1471 | 1474 |
1472 ResourceId id1 = child_resource_provider->CreateResource( | 1475 ResourceId id1 = child_resource_provider->CreateResource( |
1473 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 1476 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
1474 uint8_t data1[4] = { 1, 2, 3, 4 }; | 1477 uint8_t data1[4] = { 1, 2, 3, 4 }; |
1475 child_resource_provider->CopyToResource(id1, data1, size); | 1478 child_resource_provider->CopyToResource(id1, data1, size); |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1955 EXPECT_EQ(2, returned_to_child[0].count); | 1958 EXPECT_EQ(2, returned_to_child[0].count); |
1956 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); | 1959 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); |
1957 returned_to_child.clear(); | 1960 returned_to_child.clear(); |
1958 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id)); | 1961 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id)); |
1959 } | 1962 } |
1960 } | 1963 } |
1961 | 1964 |
1962 class ResourceProviderTestTextureFilters : public ResourceProviderTest { | 1965 class ResourceProviderTestTextureFilters : public ResourceProviderTest { |
1963 public: | 1966 public: |
1964 static void RunTest(GLenum child_filter, GLenum parent_filter) { | 1967 static void RunTest(GLenum child_filter, GLenum parent_filter) { |
1965 scoped_ptr<TextureStateTrackingContext> child_context_owned( | 1968 std::unique_ptr<TextureStateTrackingContext> child_context_owned( |
1966 new TextureStateTrackingContext); | 1969 new TextureStateTrackingContext); |
1967 TextureStateTrackingContext* child_context = child_context_owned.get(); | 1970 TextureStateTrackingContext* child_context = child_context_owned.get(); |
1968 | 1971 |
1969 FakeOutputSurfaceClient child_output_surface_client; | 1972 FakeOutputSurfaceClient child_output_surface_client; |
1970 scoped_ptr<OutputSurface> child_output_surface( | 1973 std::unique_ptr<OutputSurface> child_output_surface( |
1971 FakeOutputSurface::Create3d(std::move(child_context_owned))); | 1974 FakeOutputSurface::Create3d(std::move(child_context_owned))); |
1972 CHECK(child_output_surface->BindToClient(&child_output_surface_client)); | 1975 CHECK(child_output_surface->BindToClient(&child_output_surface_client)); |
1973 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 1976 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( |
1974 new TestSharedBitmapManager()); | 1977 new TestSharedBitmapManager()); |
1975 | 1978 |
1976 scoped_ptr<ResourceProvider> child_resource_provider( | 1979 std::unique_ptr<ResourceProvider> child_resource_provider( |
1977 ResourceProvider::Create(child_output_surface.get(), | 1980 ResourceProvider::Create(child_output_surface.get(), |
1978 shared_bitmap_manager.get(), NULL, NULL, 0, 1, | 1981 shared_bitmap_manager.get(), NULL, NULL, 0, 1, |
1979 use_gpu_memory_buffer_resources_, | 1982 use_gpu_memory_buffer_resources_, |
1980 use_image_texture_targets_)); | 1983 use_image_texture_targets_)); |
1981 | 1984 |
1982 scoped_ptr<TextureStateTrackingContext> parent_context_owned( | 1985 std::unique_ptr<TextureStateTrackingContext> parent_context_owned( |
1983 new TextureStateTrackingContext); | 1986 new TextureStateTrackingContext); |
1984 TextureStateTrackingContext* parent_context = parent_context_owned.get(); | 1987 TextureStateTrackingContext* parent_context = parent_context_owned.get(); |
1985 | 1988 |
1986 FakeOutputSurfaceClient parent_output_surface_client; | 1989 FakeOutputSurfaceClient parent_output_surface_client; |
1987 scoped_ptr<OutputSurface> parent_output_surface( | 1990 std::unique_ptr<OutputSurface> parent_output_surface( |
1988 FakeOutputSurface::Create3d(std::move(parent_context_owned))); | 1991 FakeOutputSurface::Create3d(std::move(parent_context_owned))); |
1989 CHECK(parent_output_surface->BindToClient(&parent_output_surface_client)); | 1992 CHECK(parent_output_surface->BindToClient(&parent_output_surface_client)); |
1990 | 1993 |
1991 scoped_ptr<ResourceProvider> parent_resource_provider( | 1994 std::unique_ptr<ResourceProvider> parent_resource_provider( |
1992 ResourceProvider::Create(parent_output_surface.get(), | 1995 ResourceProvider::Create(parent_output_surface.get(), |
1993 shared_bitmap_manager.get(), NULL, NULL, 0, 1, | 1996 shared_bitmap_manager.get(), NULL, NULL, 0, 1, |
1994 use_gpu_memory_buffer_resources_, | 1997 use_gpu_memory_buffer_resources_, |
1995 use_image_texture_targets_)); | 1998 use_image_texture_targets_)); |
1996 | 1999 |
1997 gfx::Size size(1, 1); | 2000 gfx::Size size(1, 1); |
1998 ResourceFormat format = RGBA_8888; | 2001 ResourceFormat format = RGBA_8888; |
1999 int child_texture_id = 1; | 2002 int child_texture_id = 1; |
2000 int parent_texture_id = 2; | 2003 int parent_texture_id = 2; |
2001 | 2004 |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2584 context()->genMailboxCHROMIUM(mailbox.name); | 2587 context()->genMailboxCHROMIUM(mailbox.name); |
2585 context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name); | 2588 context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name); |
2586 gpu::SyncToken sync_token; | 2589 gpu::SyncToken sync_token; |
2587 context()->genSyncToken(context()->insertFenceSync(), sync_token.GetData()); | 2590 context()->genSyncToken(context()->insertFenceSync(), sync_token.GetData()); |
2588 | 2591 |
2589 EXPECT_TRUE(sync_token.HasData()); | 2592 EXPECT_TRUE(sync_token.HasData()); |
2590 | 2593 |
2591 gpu::SyncToken release_sync_token; | 2594 gpu::SyncToken release_sync_token; |
2592 bool lost_resource = false; | 2595 bool lost_resource = false; |
2593 BlockingTaskRunner* main_thread_task_runner = NULL; | 2596 BlockingTaskRunner* main_thread_task_runner = NULL; |
2594 scoped_ptr<SingleReleaseCallbackImpl> callback = | 2597 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
2595 SingleReleaseCallbackImpl::Create( | 2598 SingleReleaseCallbackImpl::Create( |
2596 base::Bind(ReleaseCallback, &release_sync_token, &lost_resource, | 2599 base::Bind(ReleaseCallback, &release_sync_token, &lost_resource, |
2597 &main_thread_task_runner)); | 2600 &main_thread_task_runner)); |
2598 resource_provider_->CreateResourceFromTextureMailbox( | 2601 resource_provider_->CreateResourceFromTextureMailbox( |
2599 TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D), std::move(callback)); | 2602 TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D), std::move(callback)); |
2600 | 2603 |
2601 EXPECT_FALSE(release_sync_token.HasData()); | 2604 EXPECT_FALSE(release_sync_token.HasData()); |
2602 EXPECT_FALSE(lost_resource); | 2605 EXPECT_FALSE(lost_resource); |
2603 EXPECT_EQ(NULL, main_thread_task_runner); | 2606 EXPECT_EQ(NULL, main_thread_task_runner); |
2604 | 2607 |
2605 resource_provider_->DidLoseOutputSurface(); | 2608 resource_provider_->DidLoseOutputSurface(); |
2606 resource_provider_ = nullptr; | 2609 resource_provider_ = nullptr; |
2607 | 2610 |
2608 EXPECT_LE(sync_token.release_count(), release_sync_token.release_count()); | 2611 EXPECT_LE(sync_token.release_count(), release_sync_token.release_count()); |
2609 EXPECT_TRUE(lost_resource); | 2612 EXPECT_TRUE(lost_resource); |
2610 EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner); | 2613 EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner); |
2611 } | 2614 } |
2612 | 2615 |
2613 TEST_P(ResourceProviderTest, ScopedSampler) { | 2616 TEST_P(ResourceProviderTest, ScopedSampler) { |
2614 // Sampling is only supported for GL textures. | 2617 // Sampling is only supported for GL textures. |
2615 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 2618 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
2616 return; | 2619 return; |
2617 | 2620 |
2618 scoped_ptr<TextureStateTrackingContext> context_owned( | 2621 std::unique_ptr<TextureStateTrackingContext> context_owned( |
2619 new TextureStateTrackingContext); | 2622 new TextureStateTrackingContext); |
2620 TextureStateTrackingContext* context = context_owned.get(); | 2623 TextureStateTrackingContext* context = context_owned.get(); |
2621 | 2624 |
2622 FakeOutputSurfaceClient output_surface_client; | 2625 FakeOutputSurfaceClient output_surface_client; |
2623 scoped_ptr<OutputSurface> output_surface( | 2626 std::unique_ptr<OutputSurface> output_surface( |
2624 FakeOutputSurface::Create3d(std::move(context_owned))); | 2627 FakeOutputSurface::Create3d(std::move(context_owned))); |
2625 CHECK(output_surface->BindToClient(&output_surface_client)); | 2628 CHECK(output_surface->BindToClient(&output_surface_client)); |
2626 | 2629 |
2627 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2630 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2628 output_surface.get(), shared_bitmap_manager_.get(), | 2631 output_surface.get(), shared_bitmap_manager_.get(), |
2629 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 2632 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
2630 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 2633 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2631 | 2634 |
2632 gfx::Size size(1, 1); | 2635 gfx::Size size(1, 1); |
2633 ResourceFormat format = RGBA_8888; | 2636 ResourceFormat format = RGBA_8888; |
2634 int texture_id = 1; | 2637 int texture_id = 1; |
2635 | 2638 |
2636 ResourceId id = resource_provider->CreateResource( | 2639 ResourceId id = resource_provider->CreateResource( |
2637 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 2640 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2687 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); | 2690 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); |
2688 Mock::VerifyAndClearExpectations(context); | 2691 Mock::VerifyAndClearExpectations(context); |
2689 } | 2692 } |
2690 } | 2693 } |
2691 | 2694 |
2692 TEST_P(ResourceProviderTest, ManagedResource) { | 2695 TEST_P(ResourceProviderTest, ManagedResource) { |
2693 // Sampling is only supported for GL textures. | 2696 // Sampling is only supported for GL textures. |
2694 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 2697 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
2695 return; | 2698 return; |
2696 | 2699 |
2697 scoped_ptr<TextureStateTrackingContext> context_owned( | 2700 std::unique_ptr<TextureStateTrackingContext> context_owned( |
2698 new TextureStateTrackingContext); | 2701 new TextureStateTrackingContext); |
2699 TextureStateTrackingContext* context = context_owned.get(); | 2702 TextureStateTrackingContext* context = context_owned.get(); |
2700 | 2703 |
2701 FakeOutputSurfaceClient output_surface_client; | 2704 FakeOutputSurfaceClient output_surface_client; |
2702 scoped_ptr<OutputSurface> output_surface( | 2705 std::unique_ptr<OutputSurface> output_surface( |
2703 FakeOutputSurface::Create3d(std::move(context_owned))); | 2706 FakeOutputSurface::Create3d(std::move(context_owned))); |
2704 CHECK(output_surface->BindToClient(&output_surface_client)); | 2707 CHECK(output_surface->BindToClient(&output_surface_client)); |
2705 | 2708 |
2706 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2709 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2707 output_surface.get(), shared_bitmap_manager_.get(), | 2710 output_surface.get(), shared_bitmap_manager_.get(), |
2708 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 2711 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
2709 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 2712 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2710 | 2713 |
2711 gfx::Size size(1, 1); | 2714 gfx::Size size(1, 1); |
2712 ResourceFormat format = RGBA_8888; | 2715 ResourceFormat format = RGBA_8888; |
2713 int texture_id = 1; | 2716 int texture_id = 1; |
2714 | 2717 |
2715 // Check that the texture gets created with the right sampler settings. | 2718 // Check that the texture gets created with the right sampler settings. |
2716 ResourceId id = resource_provider->CreateResource( | 2719 ResourceId id = resource_provider->CreateResource( |
(...skipping 13 matching lines...) Expand all Loading... |
2730 EXPECT_NE(0u, id); | 2733 EXPECT_NE(0u, id); |
2731 | 2734 |
2732 Mock::VerifyAndClearExpectations(context); | 2735 Mock::VerifyAndClearExpectations(context); |
2733 } | 2736 } |
2734 | 2737 |
2735 TEST_P(ResourceProviderTest, TextureWrapMode) { | 2738 TEST_P(ResourceProviderTest, TextureWrapMode) { |
2736 // Sampling is only supported for GL textures. | 2739 // Sampling is only supported for GL textures. |
2737 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 2740 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
2738 return; | 2741 return; |
2739 | 2742 |
2740 scoped_ptr<TextureStateTrackingContext> context_owned( | 2743 std::unique_ptr<TextureStateTrackingContext> context_owned( |
2741 new TextureStateTrackingContext); | 2744 new TextureStateTrackingContext); |
2742 TextureStateTrackingContext* context = context_owned.get(); | 2745 TextureStateTrackingContext* context = context_owned.get(); |
2743 | 2746 |
2744 FakeOutputSurfaceClient output_surface_client; | 2747 FakeOutputSurfaceClient output_surface_client; |
2745 scoped_ptr<OutputSurface> output_surface( | 2748 std::unique_ptr<OutputSurface> output_surface( |
2746 FakeOutputSurface::Create3d(std::move(context_owned))); | 2749 FakeOutputSurface::Create3d(std::move(context_owned))); |
2747 CHECK(output_surface->BindToClient(&output_surface_client)); | 2750 CHECK(output_surface->BindToClient(&output_surface_client)); |
2748 | 2751 |
2749 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2752 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2750 output_surface.get(), shared_bitmap_manager_.get(), | 2753 output_surface.get(), shared_bitmap_manager_.get(), |
2751 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 2754 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
2752 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 2755 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2753 | 2756 |
2754 gfx::Size size(1, 1); | 2757 gfx::Size size(1, 1); |
2755 ResourceFormat format = RGBA_8888; | 2758 ResourceFormat format = RGBA_8888; |
2756 | 2759 |
2757 for (int texture_id = 1; texture_id <= 2; ++texture_id) { | 2760 for (int texture_id = 1; texture_id <= 2; ++texture_id) { |
2758 // Check that the texture gets created with the right sampler settings. | 2761 // Check that the texture gets created with the right sampler settings. |
2759 ResourceId id = resource_provider->CreateResource( | 2762 ResourceId id = resource_provider->CreateResource( |
(...skipping 12 matching lines...) Expand all Loading... |
2772 | 2775 |
2773 Mock::VerifyAndClearExpectations(context); | 2776 Mock::VerifyAndClearExpectations(context); |
2774 } | 2777 } |
2775 } | 2778 } |
2776 | 2779 |
2777 TEST_P(ResourceProviderTest, TextureHint) { | 2780 TEST_P(ResourceProviderTest, TextureHint) { |
2778 // Sampling is only supported for GL textures. | 2781 // Sampling is only supported for GL textures. |
2779 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 2782 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
2780 return; | 2783 return; |
2781 | 2784 |
2782 scoped_ptr<TextureStateTrackingContext> context_owned( | 2785 std::unique_ptr<TextureStateTrackingContext> context_owned( |
2783 new TextureStateTrackingContext); | 2786 new TextureStateTrackingContext); |
2784 TextureStateTrackingContext* context = context_owned.get(); | 2787 TextureStateTrackingContext* context = context_owned.get(); |
2785 context->set_support_texture_storage(true); | 2788 context->set_support_texture_storage(true); |
2786 context->set_support_texture_usage(true); | 2789 context->set_support_texture_usage(true); |
2787 | 2790 |
2788 FakeOutputSurfaceClient output_surface_client; | 2791 FakeOutputSurfaceClient output_surface_client; |
2789 scoped_ptr<OutputSurface> output_surface( | 2792 std::unique_ptr<OutputSurface> output_surface( |
2790 FakeOutputSurface::Create3d(std::move(context_owned))); | 2793 FakeOutputSurface::Create3d(std::move(context_owned))); |
2791 CHECK(output_surface->BindToClient(&output_surface_client)); | 2794 CHECK(output_surface->BindToClient(&output_surface_client)); |
2792 | 2795 |
2793 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2796 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2794 output_surface.get(), shared_bitmap_manager_.get(), | 2797 output_surface.get(), shared_bitmap_manager_.get(), |
2795 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 2798 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
2796 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 2799 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2797 | 2800 |
2798 gfx::Size size(1, 1); | 2801 gfx::Size size(1, 1); |
2799 ResourceFormat format = RGBA_8888; | 2802 ResourceFormat format = RGBA_8888; |
2800 | 2803 |
2801 const ResourceProvider::TextureHint hints[4] = { | 2804 const ResourceProvider::TextureHint hints[4] = { |
2802 ResourceProvider::TEXTURE_HINT_DEFAULT, | 2805 ResourceProvider::TEXTURE_HINT_DEFAULT, |
2803 ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 2806 ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
(...skipping 29 matching lines...) Expand all Loading... |
2833 Mock::VerifyAndClearExpectations(context); | 2836 Mock::VerifyAndClearExpectations(context); |
2834 } | 2837 } |
2835 } | 2838 } |
2836 | 2839 |
2837 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) { | 2840 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) { |
2838 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) | 2841 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) |
2839 return; | 2842 return; |
2840 | 2843 |
2841 gfx::Size size(64, 64); | 2844 gfx::Size size(64, 64); |
2842 const uint32_t kBadBeef = 0xbadbeef; | 2845 const uint32_t kBadBeef = 0xbadbeef; |
2843 scoped_ptr<SharedBitmap> shared_bitmap( | 2846 std::unique_ptr<SharedBitmap> shared_bitmap( |
2844 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, kBadBeef)); | 2847 CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, kBadBeef)); |
2845 | 2848 |
2846 FakeOutputSurfaceClient output_surface_client; | 2849 FakeOutputSurfaceClient output_surface_client; |
2847 scoped_ptr<OutputSurface> output_surface( | 2850 std::unique_ptr<OutputSurface> output_surface( |
2848 FakeOutputSurface::CreateSoftware(make_scoped_ptr( | 2851 FakeOutputSurface::CreateSoftware( |
2849 new SoftwareOutputDevice))); | 2852 base::WrapUnique(new SoftwareOutputDevice))); |
2850 CHECK(output_surface->BindToClient(&output_surface_client)); | 2853 CHECK(output_surface->BindToClient(&output_surface_client)); |
2851 | 2854 |
2852 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2855 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2853 output_surface.get(), shared_bitmap_manager_.get(), | 2856 output_surface.get(), shared_bitmap_manager_.get(), |
2854 gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, 1, | 2857 gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, 1, |
2855 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 2858 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2856 | 2859 |
2857 gpu::SyncToken release_sync_token; | 2860 gpu::SyncToken release_sync_token; |
2858 bool lost_resource = false; | 2861 bool lost_resource = false; |
2859 BlockingTaskRunner* main_thread_task_runner = NULL; | 2862 BlockingTaskRunner* main_thread_task_runner = NULL; |
2860 scoped_ptr<SingleReleaseCallbackImpl> callback = | 2863 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
2861 SingleReleaseCallbackImpl::Create( | 2864 SingleReleaseCallbackImpl::Create( |
2862 base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource, | 2865 base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource, |
2863 &main_thread_task_runner)); | 2866 &main_thread_task_runner)); |
2864 TextureMailbox mailbox(shared_bitmap.get(), size); | 2867 TextureMailbox mailbox(shared_bitmap.get(), size); |
2865 | 2868 |
2866 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( | 2869 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( |
2867 mailbox, std::move(callback)); | 2870 mailbox, std::move(callback)); |
2868 EXPECT_NE(0u, id); | 2871 EXPECT_NE(0u, id); |
2869 | 2872 |
2870 { | 2873 { |
(...skipping 11 matching lines...) Expand all Loading... |
2882 } | 2885 } |
2883 | 2886 |
2884 class ResourceProviderTestTextureMailboxGLFilters | 2887 class ResourceProviderTestTextureMailboxGLFilters |
2885 : public ResourceProviderTest { | 2888 : public ResourceProviderTest { |
2886 public: | 2889 public: |
2887 static void RunTest(TestSharedBitmapManager* shared_bitmap_manager, | 2890 static void RunTest(TestSharedBitmapManager* shared_bitmap_manager, |
2888 TestGpuMemoryBufferManager* gpu_memory_buffer_manager, | 2891 TestGpuMemoryBufferManager* gpu_memory_buffer_manager, |
2889 BlockingTaskRunner* main_thread_task_runner, | 2892 BlockingTaskRunner* main_thread_task_runner, |
2890 bool mailbox_nearest_neighbor, | 2893 bool mailbox_nearest_neighbor, |
2891 GLenum sampler_filter) { | 2894 GLenum sampler_filter) { |
2892 scoped_ptr<TextureStateTrackingContext> context_owned( | 2895 std::unique_ptr<TextureStateTrackingContext> context_owned( |
2893 new TextureStateTrackingContext); | 2896 new TextureStateTrackingContext); |
2894 TextureStateTrackingContext* context = context_owned.get(); | 2897 TextureStateTrackingContext* context = context_owned.get(); |
2895 | 2898 |
2896 FakeOutputSurfaceClient output_surface_client; | 2899 FakeOutputSurfaceClient output_surface_client; |
2897 scoped_ptr<OutputSurface> output_surface( | 2900 std::unique_ptr<OutputSurface> output_surface( |
2898 FakeOutputSurface::Create3d(std::move(context_owned))); | 2901 FakeOutputSurface::Create3d(std::move(context_owned))); |
2899 CHECK(output_surface->BindToClient(&output_surface_client)); | 2902 CHECK(output_surface->BindToClient(&output_surface_client)); |
2900 | 2903 |
2901 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2904 std::unique_ptr<ResourceProvider> resource_provider( |
2902 output_surface.get(), shared_bitmap_manager, gpu_memory_buffer_manager, | 2905 ResourceProvider::Create( |
2903 main_thread_task_runner, 0, 1, use_gpu_memory_buffer_resources_, | 2906 output_surface.get(), shared_bitmap_manager, |
2904 use_image_texture_targets_)); | 2907 gpu_memory_buffer_manager, main_thread_task_runner, 0, 1, |
| 2908 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
2905 | 2909 |
2906 unsigned texture_id = 1; | 2910 unsigned texture_id = 1; |
2907 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, | 2911 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, |
2908 gpu::CommandBufferId::FromUnsafeValue(0x12), | 2912 gpu::CommandBufferId::FromUnsafeValue(0x12), |
2909 0x34); | 2913 0x34); |
2910 unsigned target = GL_TEXTURE_2D; | 2914 unsigned target = GL_TEXTURE_2D; |
2911 const GLuint64 current_fence_sync = context->GetNextFenceSync(); | 2915 const GLuint64 current_fence_sync = context->GetNextFenceSync(); |
2912 | 2916 |
2913 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); | 2917 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
2914 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); | 2918 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); |
2915 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); | 2919 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
2916 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); | 2920 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
2917 | 2921 |
2918 gpu::Mailbox gpu_mailbox; | 2922 gpu::Mailbox gpu_mailbox; |
2919 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); | 2923 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
2920 gpu::SyncToken release_sync_token; | 2924 gpu::SyncToken release_sync_token; |
2921 bool lost_resource = false; | 2925 bool lost_resource = false; |
2922 BlockingTaskRunner* mailbox_task_runner = NULL; | 2926 BlockingTaskRunner* mailbox_task_runner = NULL; |
2923 scoped_ptr<SingleReleaseCallbackImpl> callback = | 2927 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
2924 SingleReleaseCallbackImpl::Create( | 2928 SingleReleaseCallbackImpl::Create( |
2925 base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource, | 2929 base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource, |
2926 &mailbox_task_runner)); | 2930 &mailbox_task_runner)); |
2927 | 2931 |
2928 TextureMailbox mailbox(gpu_mailbox, sync_token, target); | 2932 TextureMailbox mailbox(gpu_mailbox, sync_token, target); |
2929 mailbox.set_nearest_neighbor(mailbox_nearest_neighbor); | 2933 mailbox.set_nearest_neighbor(mailbox_nearest_neighbor); |
2930 | 2934 |
2931 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( | 2935 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( |
2932 mailbox, std::move(callback)); | 2936 mailbox, std::move(callback)); |
2933 EXPECT_NE(0u, id); | 2937 EXPECT_NE(0u, id); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3027 main_thread_task_runner_.get(), | 3031 main_thread_task_runner_.get(), |
3028 false, | 3032 false, |
3029 GL_NEAREST); | 3033 GL_NEAREST); |
3030 } | 3034 } |
3031 | 3035 |
3032 TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) { | 3036 TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) { |
3033 // Mailboxing is only supported for GL textures. | 3037 // Mailboxing is only supported for GL textures. |
3034 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3038 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3035 return; | 3039 return; |
3036 | 3040 |
3037 scoped_ptr<TextureStateTrackingContext> context_owned( | 3041 std::unique_ptr<TextureStateTrackingContext> context_owned( |
3038 new TextureStateTrackingContext); | 3042 new TextureStateTrackingContext); |
3039 TextureStateTrackingContext* context = context_owned.get(); | 3043 TextureStateTrackingContext* context = context_owned.get(); |
3040 | 3044 |
3041 FakeOutputSurfaceClient output_surface_client; | 3045 FakeOutputSurfaceClient output_surface_client; |
3042 scoped_ptr<OutputSurface> output_surface( | 3046 std::unique_ptr<OutputSurface> output_surface( |
3043 FakeOutputSurface::Create3d(std::move(context_owned))); | 3047 FakeOutputSurface::Create3d(std::move(context_owned))); |
3044 CHECK(output_surface->BindToClient(&output_surface_client)); | 3048 CHECK(output_surface->BindToClient(&output_surface_client)); |
3045 | 3049 |
3046 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3050 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3047 output_surface.get(), shared_bitmap_manager_.get(), | 3051 output_surface.get(), shared_bitmap_manager_.get(), |
3048 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3052 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3049 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3053 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3050 | 3054 |
3051 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, | 3055 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, |
3052 gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); | 3056 gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); |
3053 const GLuint64 current_fence_sync = context->GetNextFenceSync(); | 3057 const GLuint64 current_fence_sync = context->GetNextFenceSync(); |
3054 unsigned target = GL_TEXTURE_EXTERNAL_OES; | 3058 unsigned target = GL_TEXTURE_EXTERNAL_OES; |
3055 | 3059 |
3056 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); | 3060 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
3057 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); | 3061 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); |
3058 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); | 3062 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
3059 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); | 3063 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
3060 | 3064 |
3061 gpu::Mailbox gpu_mailbox; | 3065 gpu::Mailbox gpu_mailbox; |
3062 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); | 3066 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
3063 scoped_ptr<SingleReleaseCallbackImpl> callback = | 3067 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
3064 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); | 3068 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); |
3065 | 3069 |
3066 TextureMailbox mailbox(gpu_mailbox, sync_token, target); | 3070 TextureMailbox mailbox(gpu_mailbox, sync_token, target); |
3067 | 3071 |
3068 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( | 3072 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( |
3069 mailbox, std::move(callback)); | 3073 mailbox, std::move(callback)); |
3070 EXPECT_NE(0u, id); | 3074 EXPECT_NE(0u, id); |
3071 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); | 3075 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); |
3072 | 3076 |
3073 Mock::VerifyAndClearExpectations(context); | 3077 Mock::VerifyAndClearExpectations(context); |
(...skipping 23 matching lines...) Expand all Loading... |
3097 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); | 3101 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
3098 } | 3102 } |
3099 } | 3103 } |
3100 | 3104 |
3101 TEST_P(ResourceProviderTest, | 3105 TEST_P(ResourceProviderTest, |
3102 TextureMailbox_WaitSyncTokenIfNeeded_WithSyncToken) { | 3106 TextureMailbox_WaitSyncTokenIfNeeded_WithSyncToken) { |
3103 // Mailboxing is only supported for GL textures. | 3107 // Mailboxing is only supported for GL textures. |
3104 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3108 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3105 return; | 3109 return; |
3106 | 3110 |
3107 scoped_ptr<TextureStateTrackingContext> context_owned( | 3111 std::unique_ptr<TextureStateTrackingContext> context_owned( |
3108 new TextureStateTrackingContext); | 3112 new TextureStateTrackingContext); |
3109 TextureStateTrackingContext* context = context_owned.get(); | 3113 TextureStateTrackingContext* context = context_owned.get(); |
3110 | 3114 |
3111 FakeOutputSurfaceClient output_surface_client; | 3115 FakeOutputSurfaceClient output_surface_client; |
3112 scoped_ptr<OutputSurface> output_surface( | 3116 std::unique_ptr<OutputSurface> output_surface( |
3113 FakeOutputSurface::Create3d(std::move(context_owned))); | 3117 FakeOutputSurface::Create3d(std::move(context_owned))); |
3114 CHECK(output_surface->BindToClient(&output_surface_client)); | 3118 CHECK(output_surface->BindToClient(&output_surface_client)); |
3115 | 3119 |
3116 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3120 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3117 output_surface.get(), shared_bitmap_manager_.get(), | 3121 output_surface.get(), shared_bitmap_manager_.get(), |
3118 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3122 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3119 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3123 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3120 | 3124 |
3121 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, | 3125 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, |
3122 gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); | 3126 gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); |
3123 const GLuint64 current_fence_sync = context->GetNextFenceSync(); | 3127 const GLuint64 current_fence_sync = context->GetNextFenceSync(); |
3124 unsigned target = GL_TEXTURE_2D; | 3128 unsigned target = GL_TEXTURE_2D; |
3125 | 3129 |
3126 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); | 3130 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
3127 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); | 3131 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); |
3128 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); | 3132 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
3129 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); | 3133 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
3130 | 3134 |
3131 gpu::Mailbox gpu_mailbox; | 3135 gpu::Mailbox gpu_mailbox; |
3132 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); | 3136 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
3133 scoped_ptr<SingleReleaseCallbackImpl> callback = | 3137 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
3134 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); | 3138 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); |
3135 | 3139 |
3136 TextureMailbox mailbox(gpu_mailbox, sync_token, target); | 3140 TextureMailbox mailbox(gpu_mailbox, sync_token, target); |
3137 | 3141 |
3138 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( | 3142 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( |
3139 mailbox, std::move(callback)); | 3143 mailbox, std::move(callback)); |
3140 EXPECT_NE(0u, id); | 3144 EXPECT_NE(0u, id); |
3141 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); | 3145 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); |
3142 | 3146 |
3143 Mock::VerifyAndClearExpectations(context); | 3147 Mock::VerifyAndClearExpectations(context); |
3144 | 3148 |
3145 { | 3149 { |
3146 // First call to WaitSyncTokenIfNeeded should call waitSyncToken. | 3150 // First call to WaitSyncTokenIfNeeded should call waitSyncToken. |
3147 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))); | 3151 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))); |
3148 resource_provider->WaitSyncTokenIfNeeded(id); | 3152 resource_provider->WaitSyncTokenIfNeeded(id); |
3149 Mock::VerifyAndClearExpectations(context); | 3153 Mock::VerifyAndClearExpectations(context); |
3150 | 3154 |
3151 // Subsequent calls to WaitSyncTokenIfNeeded shouldn't call waitSyncToken. | 3155 // Subsequent calls to WaitSyncTokenIfNeeded shouldn't call waitSyncToken. |
3152 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); | 3156 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); |
3153 resource_provider->WaitSyncTokenIfNeeded(id); | 3157 resource_provider->WaitSyncTokenIfNeeded(id); |
3154 Mock::VerifyAndClearExpectations(context); | 3158 Mock::VerifyAndClearExpectations(context); |
3155 } | 3159 } |
3156 } | 3160 } |
3157 | 3161 |
3158 TEST_P(ResourceProviderTest, TextureMailbox_WaitSyncTokenIfNeeded_NoSyncToken) { | 3162 TEST_P(ResourceProviderTest, TextureMailbox_WaitSyncTokenIfNeeded_NoSyncToken) { |
3159 // Mailboxing is only supported for GL textures. | 3163 // Mailboxing is only supported for GL textures. |
3160 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3164 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3161 return; | 3165 return; |
3162 | 3166 |
3163 scoped_ptr<TextureStateTrackingContext> context_owned( | 3167 std::unique_ptr<TextureStateTrackingContext> context_owned( |
3164 new TextureStateTrackingContext); | 3168 new TextureStateTrackingContext); |
3165 TextureStateTrackingContext* context = context_owned.get(); | 3169 TextureStateTrackingContext* context = context_owned.get(); |
3166 | 3170 |
3167 FakeOutputSurfaceClient output_surface_client; | 3171 FakeOutputSurfaceClient output_surface_client; |
3168 scoped_ptr<OutputSurface> output_surface( | 3172 std::unique_ptr<OutputSurface> output_surface( |
3169 FakeOutputSurface::Create3d(std::move(context_owned))); | 3173 FakeOutputSurface::Create3d(std::move(context_owned))); |
3170 CHECK(output_surface->BindToClient(&output_surface_client)); | 3174 CHECK(output_surface->BindToClient(&output_surface_client)); |
3171 | 3175 |
3172 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3176 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3173 output_surface.get(), shared_bitmap_manager_.get(), | 3177 output_surface.get(), shared_bitmap_manager_.get(), |
3174 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3178 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3175 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3179 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3176 | 3180 |
3177 gpu::SyncToken sync_token; | 3181 gpu::SyncToken sync_token; |
3178 const GLuint64 current_fence_sync = context->GetNextFenceSync(); | 3182 const GLuint64 current_fence_sync = context->GetNextFenceSync(); |
3179 unsigned target = GL_TEXTURE_2D; | 3183 unsigned target = GL_TEXTURE_2D; |
3180 | 3184 |
3181 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); | 3185 EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
3182 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); | 3186 EXPECT_CALL(*context, waitSyncToken(_)).Times(0); |
3183 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); | 3187 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
3184 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); | 3188 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
3185 | 3189 |
3186 gpu::Mailbox gpu_mailbox; | 3190 gpu::Mailbox gpu_mailbox; |
3187 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); | 3191 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
3188 scoped_ptr<SingleReleaseCallbackImpl> callback = | 3192 std::unique_ptr<SingleReleaseCallbackImpl> callback = |
3189 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); | 3193 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); |
3190 | 3194 |
3191 TextureMailbox mailbox(gpu_mailbox, sync_token, target); | 3195 TextureMailbox mailbox(gpu_mailbox, sync_token, target); |
3192 | 3196 |
3193 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( | 3197 ResourceId id = resource_provider->CreateResourceFromTextureMailbox( |
3194 mailbox, std::move(callback)); | 3198 mailbox, std::move(callback)); |
3195 EXPECT_NE(0u, id); | 3199 EXPECT_NE(0u, id); |
3196 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); | 3200 EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); |
3197 | 3201 |
3198 Mock::VerifyAndClearExpectations(context); | 3202 Mock::VerifyAndClearExpectations(context); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3275 // We're mocking bindTexture, so we override | 3279 // We're mocking bindTexture, so we override |
3276 // TestWebGraphicsContext3D::texParameteri to avoid assertions related to the | 3280 // TestWebGraphicsContext3D::texParameteri to avoid assertions related to the |
3277 // currently bound texture. | 3281 // currently bound texture. |
3278 virtual void texParameteri(GLenum target, GLenum pname, GLint param) {} | 3282 virtual void texParameteri(GLenum target, GLenum pname, GLint param) {} |
3279 }; | 3283 }; |
3280 | 3284 |
3281 TEST_P(ResourceProviderTest, TextureAllocation) { | 3285 TEST_P(ResourceProviderTest, TextureAllocation) { |
3282 // Only for GL textures. | 3286 // Only for GL textures. |
3283 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3287 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3284 return; | 3288 return; |
3285 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3289 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3286 new StrictMock<AllocationTrackingContext3D>); | 3290 new StrictMock<AllocationTrackingContext3D>); |
3287 AllocationTrackingContext3D* context = context_owned.get(); | 3291 AllocationTrackingContext3D* context = context_owned.get(); |
3288 | 3292 |
3289 FakeOutputSurfaceClient output_surface_client; | 3293 FakeOutputSurfaceClient output_surface_client; |
3290 scoped_ptr<OutputSurface> output_surface( | 3294 std::unique_ptr<OutputSurface> output_surface( |
3291 FakeOutputSurface::Create3d(std::move(context_owned))); | 3295 FakeOutputSurface::Create3d(std::move(context_owned))); |
3292 CHECK(output_surface->BindToClient(&output_surface_client)); | 3296 CHECK(output_surface->BindToClient(&output_surface_client)); |
3293 | 3297 |
3294 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3298 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3295 output_surface.get(), shared_bitmap_manager_.get(), | 3299 output_surface.get(), shared_bitmap_manager_.get(), |
3296 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3300 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3297 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3301 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3298 | 3302 |
3299 gfx::Size size(2, 2); | 3303 gfx::Size size(2, 2); |
3300 gfx::Vector2d offset(0, 0); | 3304 gfx::Vector2d offset(0, 0); |
3301 ResourceFormat format = RGBA_8888; | 3305 ResourceFormat format = RGBA_8888; |
3302 ResourceId id = 0; | 3306 ResourceId id = 0; |
3303 uint8_t pixels[16] = { 0 }; | 3307 uint8_t pixels[16] = { 0 }; |
3304 int texture_id = 123; | 3308 int texture_id = 123; |
(...skipping 24 matching lines...) Expand all Loading... |
3329 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3333 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3330 resource_provider->DeleteResource(id); | 3334 resource_provider->DeleteResource(id); |
3331 | 3335 |
3332 Mock::VerifyAndClearExpectations(context); | 3336 Mock::VerifyAndClearExpectations(context); |
3333 } | 3337 } |
3334 | 3338 |
3335 TEST_P(ResourceProviderTest, TextureAllocationHint) { | 3339 TEST_P(ResourceProviderTest, TextureAllocationHint) { |
3336 // Only for GL textures. | 3340 // Only for GL textures. |
3337 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3341 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3338 return; | 3342 return; |
3339 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3343 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3340 new StrictMock<AllocationTrackingContext3D>); | 3344 new StrictMock<AllocationTrackingContext3D>); |
3341 AllocationTrackingContext3D* context = context_owned.get(); | 3345 AllocationTrackingContext3D* context = context_owned.get(); |
3342 context->set_support_texture_storage(true); | 3346 context->set_support_texture_storage(true); |
3343 context->set_support_texture_usage(true); | 3347 context->set_support_texture_usage(true); |
3344 | 3348 |
3345 FakeOutputSurfaceClient output_surface_client; | 3349 FakeOutputSurfaceClient output_surface_client; |
3346 scoped_ptr<OutputSurface> output_surface( | 3350 std::unique_ptr<OutputSurface> output_surface( |
3347 FakeOutputSurface::Create3d(std::move(context_owned))); | 3351 FakeOutputSurface::Create3d(std::move(context_owned))); |
3348 CHECK(output_surface->BindToClient(&output_surface_client)); | 3352 CHECK(output_surface->BindToClient(&output_surface_client)); |
3349 | 3353 |
3350 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3354 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3351 output_surface.get(), shared_bitmap_manager_.get(), | 3355 output_surface.get(), shared_bitmap_manager_.get(), |
3352 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3356 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3353 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3357 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3354 | 3358 |
3355 gfx::Size size(2, 2); | 3359 gfx::Size size(2, 2); |
3356 | 3360 |
3357 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888}; | 3361 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888}; |
3358 const ResourceProvider::TextureHint hints[4] = { | 3362 const ResourceProvider::TextureHint hints[4] = { |
3359 ResourceProvider::TEXTURE_HINT_DEFAULT, | 3363 ResourceProvider::TEXTURE_HINT_DEFAULT, |
3360 ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 3364 ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
(...skipping 23 matching lines...) Expand all Loading... |
3384 | 3388 |
3385 Mock::VerifyAndClearExpectations(context); | 3389 Mock::VerifyAndClearExpectations(context); |
3386 } | 3390 } |
3387 } | 3391 } |
3388 } | 3392 } |
3389 | 3393 |
3390 TEST_P(ResourceProviderTest, TextureAllocationHint_BGRA) { | 3394 TEST_P(ResourceProviderTest, TextureAllocationHint_BGRA) { |
3391 // Only for GL textures. | 3395 // Only for GL textures. |
3392 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3396 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3393 return; | 3397 return; |
3394 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3398 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3395 new StrictMock<AllocationTrackingContext3D>); | 3399 new StrictMock<AllocationTrackingContext3D>); |
3396 AllocationTrackingContext3D* context = context_owned.get(); | 3400 AllocationTrackingContext3D* context = context_owned.get(); |
3397 context->set_support_texture_format_bgra8888(true); | 3401 context->set_support_texture_format_bgra8888(true); |
3398 context->set_support_texture_storage(true); | 3402 context->set_support_texture_storage(true); |
3399 context->set_support_texture_usage(true); | 3403 context->set_support_texture_usage(true); |
3400 | 3404 |
3401 FakeOutputSurfaceClient output_surface_client; | 3405 FakeOutputSurfaceClient output_surface_client; |
3402 scoped_ptr<OutputSurface> output_surface( | 3406 std::unique_ptr<OutputSurface> output_surface( |
3403 FakeOutputSurface::Create3d(std::move(context_owned))); | 3407 FakeOutputSurface::Create3d(std::move(context_owned))); |
3404 CHECK(output_surface->BindToClient(&output_surface_client)); | 3408 CHECK(output_surface->BindToClient(&output_surface_client)); |
3405 | 3409 |
3406 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3410 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3407 output_surface.get(), shared_bitmap_manager_.get(), | 3411 output_surface.get(), shared_bitmap_manager_.get(), |
3408 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3412 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3409 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3413 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3410 | 3414 |
3411 gfx::Size size(2, 2); | 3415 gfx::Size size(2, 2); |
3412 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888}; | 3416 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888}; |
3413 | 3417 |
3414 const ResourceProvider::TextureHint hints[4] = { | 3418 const ResourceProvider::TextureHint hints[4] = { |
3415 ResourceProvider::TEXTURE_HINT_DEFAULT, | 3419 ResourceProvider::TEXTURE_HINT_DEFAULT, |
3416 ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 3420 ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
(...skipping 21 matching lines...) Expand all Loading... |
3438 | 3442 |
3439 Mock::VerifyAndClearExpectations(context); | 3443 Mock::VerifyAndClearExpectations(context); |
3440 } | 3444 } |
3441 } | 3445 } |
3442 } | 3446 } |
3443 | 3447 |
3444 TEST_P(ResourceProviderTest, Image_GLTexture) { | 3448 TEST_P(ResourceProviderTest, Image_GLTexture) { |
3445 // Only for GL textures. | 3449 // Only for GL textures. |
3446 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3450 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3447 return; | 3451 return; |
3448 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3452 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3449 new StrictMock<AllocationTrackingContext3D>); | 3453 new StrictMock<AllocationTrackingContext3D>); |
3450 AllocationTrackingContext3D* context = context_owned.get(); | 3454 AllocationTrackingContext3D* context = context_owned.get(); |
3451 | 3455 |
3452 FakeOutputSurfaceClient output_surface_client; | 3456 FakeOutputSurfaceClient output_surface_client; |
3453 scoped_ptr<OutputSurface> output_surface( | 3457 std::unique_ptr<OutputSurface> output_surface( |
3454 FakeOutputSurface::Create3d(std::move(context_owned))); | 3458 FakeOutputSurface::Create3d(std::move(context_owned))); |
3455 CHECK(output_surface->BindToClient(&output_surface_client)); | 3459 CHECK(output_surface->BindToClient(&output_surface_client)); |
3456 | 3460 |
3457 const int kWidth = 2; | 3461 const int kWidth = 2; |
3458 const int kHeight = 2; | 3462 const int kHeight = 2; |
3459 gfx::Size size(kWidth, kHeight); | 3463 gfx::Size size(kWidth, kHeight); |
3460 ResourceFormat format = RGBA_8888; | 3464 ResourceFormat format = RGBA_8888; |
3461 ResourceId id = 0; | 3465 ResourceId id = 0; |
3462 const unsigned kTextureId = 123u; | 3466 const unsigned kTextureId = 123u; |
3463 const unsigned kImageId = 234u; | 3467 const unsigned kImageId = 234u; |
3464 | 3468 |
3465 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3469 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3466 output_surface.get(), shared_bitmap_manager_.get(), | 3470 output_surface.get(), shared_bitmap_manager_.get(), |
3467 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3471 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3468 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3472 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3469 | 3473 |
3470 id = resource_provider->CreateResource( | 3474 id = resource_provider->CreateResource( |
3471 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 3475 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
3472 | 3476 |
3473 EXPECT_CALL(*context, NextTextureId()) | 3477 EXPECT_CALL(*context, NextTextureId()) |
3474 .WillOnce(Return(kTextureId)) | 3478 .WillOnce(Return(kTextureId)) |
3475 .RetiresOnSaturation(); | 3479 .RetiresOnSaturation(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3522 | 3526 |
3523 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) | 3527 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) |
3524 .Times(1) | 3528 .Times(1) |
3525 .RetiresOnSaturation(); | 3529 .RetiresOnSaturation(); |
3526 } | 3530 } |
3527 | 3531 |
3528 TEST_P(ResourceProviderTest, CompressedTextureETC1Allocate) { | 3532 TEST_P(ResourceProviderTest, CompressedTextureETC1Allocate) { |
3529 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3533 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3530 return; | 3534 return; |
3531 | 3535 |
3532 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3536 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3533 new AllocationTrackingContext3D); | 3537 new AllocationTrackingContext3D); |
3534 AllocationTrackingContext3D* context = context_owned.get(); | 3538 AllocationTrackingContext3D* context = context_owned.get(); |
3535 context_owned->set_support_compressed_texture_etc1(true); | 3539 context_owned->set_support_compressed_texture_etc1(true); |
3536 | 3540 |
3537 FakeOutputSurfaceClient output_surface_client; | 3541 FakeOutputSurfaceClient output_surface_client; |
3538 scoped_ptr<OutputSurface> output_surface( | 3542 std::unique_ptr<OutputSurface> output_surface( |
3539 FakeOutputSurface::Create3d(std::move(context_owned))); | 3543 FakeOutputSurface::Create3d(std::move(context_owned))); |
3540 CHECK(output_surface->BindToClient(&output_surface_client)); | 3544 CHECK(output_surface->BindToClient(&output_surface_client)); |
3541 | 3545 |
3542 gfx::Size size(4, 4); | 3546 gfx::Size size(4, 4); |
3543 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3547 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3544 output_surface.get(), shared_bitmap_manager_.get(), | 3548 output_surface.get(), shared_bitmap_manager_.get(), |
3545 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3549 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3546 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3550 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3547 int texture_id = 123; | 3551 int texture_id = 123; |
3548 | 3552 |
3549 ResourceId id = resource_provider->CreateResource( | 3553 ResourceId id = resource_provider->CreateResource( |
3550 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); | 3554 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); |
3551 EXPECT_NE(0u, id); | 3555 EXPECT_NE(0u, id); |
3552 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3556 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3553 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3557 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3554 resource_provider->AllocateForTesting(id); | 3558 resource_provider->AllocateForTesting(id); |
3555 | 3559 |
3556 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3560 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3557 resource_provider->DeleteResource(id); | 3561 resource_provider->DeleteResource(id); |
3558 } | 3562 } |
3559 | 3563 |
3560 TEST_P(ResourceProviderTest, CompressedTextureETC1Upload) { | 3564 TEST_P(ResourceProviderTest, CompressedTextureETC1Upload) { |
3561 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3565 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3562 return; | 3566 return; |
3563 | 3567 |
3564 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3568 std::unique_ptr<AllocationTrackingContext3D> context_owned( |
3565 new AllocationTrackingContext3D); | 3569 new AllocationTrackingContext3D); |
3566 AllocationTrackingContext3D* context = context_owned.get(); | 3570 AllocationTrackingContext3D* context = context_owned.get(); |
3567 context_owned->set_support_compressed_texture_etc1(true); | 3571 context_owned->set_support_compressed_texture_etc1(true); |
3568 | 3572 |
3569 FakeOutputSurfaceClient output_surface_client; | 3573 FakeOutputSurfaceClient output_surface_client; |
3570 scoped_ptr<OutputSurface> output_surface( | 3574 std::unique_ptr<OutputSurface> output_surface( |
3571 FakeOutputSurface::Create3d(std::move(context_owned))); | 3575 FakeOutputSurface::Create3d(std::move(context_owned))); |
3572 CHECK(output_surface->BindToClient(&output_surface_client)); | 3576 CHECK(output_surface->BindToClient(&output_surface_client)); |
3573 | 3577 |
3574 gfx::Size size(4, 4); | 3578 gfx::Size size(4, 4); |
3575 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3579 std::unique_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3576 output_surface.get(), shared_bitmap_manager_.get(), | 3580 output_surface.get(), shared_bitmap_manager_.get(), |
3577 gpu_memory_buffer_manager_.get(), NULL, 0, 1, | 3581 gpu_memory_buffer_manager_.get(), NULL, 0, 1, |
3578 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); | 3582 use_gpu_memory_buffer_resources_, use_image_texture_targets_)); |
3579 int texture_id = 123; | 3583 int texture_id = 123; |
3580 uint8_t pixels[8]; | 3584 uint8_t pixels[8]; |
3581 | 3585 |
3582 ResourceId id = resource_provider->CreateResource( | 3586 ResourceId id = resource_provider->CreateResource( |
3583 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); | 3587 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); |
3584 EXPECT_NE(0u, id); | 3588 EXPECT_NE(0u, id); |
3585 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3589 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
(...skipping 20 matching lines...) Expand all Loading... |
3606 return namespace_->next_texture_id++; | 3610 return namespace_->next_texture_id++; |
3607 } | 3611 } |
3608 void RetireTextureId(GLuint) override {} | 3612 void RetireTextureId(GLuint) override {} |
3609 GLuint PeekTextureId() { | 3613 GLuint PeekTextureId() { |
3610 base::AutoLock lock(namespace_->lock); | 3614 base::AutoLock lock(namespace_->lock); |
3611 return namespace_->next_texture_id; | 3615 return namespace_->next_texture_id; |
3612 } | 3616 } |
3613 }; | 3617 }; |
3614 | 3618 |
3615 TEST(ResourceProviderTest, TextureAllocationChunkSize) { | 3619 TEST(ResourceProviderTest, TextureAllocationChunkSize) { |
3616 scoped_ptr<TextureIdAllocationTrackingContext> context_owned( | 3620 std::unique_ptr<TextureIdAllocationTrackingContext> context_owned( |
3617 new TextureIdAllocationTrackingContext); | 3621 new TextureIdAllocationTrackingContext); |
3618 TextureIdAllocationTrackingContext* context = context_owned.get(); | 3622 TextureIdAllocationTrackingContext* context = context_owned.get(); |
3619 | 3623 |
3620 FakeOutputSurfaceClient output_surface_client; | 3624 FakeOutputSurfaceClient output_surface_client; |
3621 scoped_ptr<OutputSurface> output_surface( | 3625 std::unique_ptr<OutputSurface> output_surface( |
3622 FakeOutputSurface::Create3d(std::move(context_owned))); | 3626 FakeOutputSurface::Create3d(std::move(context_owned))); |
3623 CHECK(output_surface->BindToClient(&output_surface_client)); | 3627 CHECK(output_surface->BindToClient(&output_surface_client)); |
3624 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 3628 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( |
3625 new TestSharedBitmapManager()); | 3629 new TestSharedBitmapManager()); |
3626 | 3630 |
3627 gfx::Size size(1, 1); | 3631 gfx::Size size(1, 1); |
3628 ResourceFormat format = RGBA_8888; | 3632 ResourceFormat format = RGBA_8888; |
3629 | 3633 |
3630 { | 3634 { |
3631 size_t kTextureAllocationChunkSize = 1; | 3635 size_t kTextureAllocationChunkSize = 1; |
3632 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3636 std::unique_ptr<ResourceProvider> resource_provider( |
3633 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, | 3637 ResourceProvider::Create( |
3634 kTextureAllocationChunkSize, | 3638 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, |
3635 ResourceProviderTest::use_gpu_memory_buffer_resources(), | 3639 kTextureAllocationChunkSize, |
3636 ResourceProviderTest::use_image_texture_targets())); | 3640 ResourceProviderTest::use_gpu_memory_buffer_resources(), |
| 3641 ResourceProviderTest::use_image_texture_targets())); |
3637 | 3642 |
3638 ResourceId id = resource_provider->CreateResource( | 3643 ResourceId id = resource_provider->CreateResource( |
3639 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 3644 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
3640 resource_provider->AllocateForTesting(id); | 3645 resource_provider->AllocateForTesting(id); |
3641 Mock::VerifyAndClearExpectations(context); | 3646 Mock::VerifyAndClearExpectations(context); |
3642 | 3647 |
3643 DCHECK_EQ(2u, context->PeekTextureId()); | 3648 DCHECK_EQ(2u, context->PeekTextureId()); |
3644 resource_provider->DeleteResource(id); | 3649 resource_provider->DeleteResource(id); |
3645 } | 3650 } |
3646 | 3651 |
3647 { | 3652 { |
3648 size_t kTextureAllocationChunkSize = 8; | 3653 size_t kTextureAllocationChunkSize = 8; |
3649 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3654 std::unique_ptr<ResourceProvider> resource_provider( |
3650 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, | 3655 ResourceProvider::Create( |
3651 kTextureAllocationChunkSize, | 3656 output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, |
3652 ResourceProviderTest::use_gpu_memory_buffer_resources(), | 3657 kTextureAllocationChunkSize, |
3653 ResourceProviderTest::use_image_texture_targets())); | 3658 ResourceProviderTest::use_gpu_memory_buffer_resources(), |
| 3659 ResourceProviderTest::use_image_texture_targets())); |
3654 | 3660 |
3655 ResourceId id = resource_provider->CreateResource( | 3661 ResourceId id = resource_provider->CreateResource( |
3656 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 3662 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
3657 resource_provider->AllocateForTesting(id); | 3663 resource_provider->AllocateForTesting(id); |
3658 Mock::VerifyAndClearExpectations(context); | 3664 Mock::VerifyAndClearExpectations(context); |
3659 | 3665 |
3660 DCHECK_EQ(10u, context->PeekTextureId()); | 3666 DCHECK_EQ(10u, context->PeekTextureId()); |
3661 resource_provider->DeleteResource(id); | 3667 resource_provider->DeleteResource(id); |
3662 } | 3668 } |
3663 } | 3669 } |
(...skipping 20 matching lines...) Expand all Loading... |
3684 EXPECT_TRUE(resource_provider_->CanLockForWrite(id)); | 3690 EXPECT_TRUE(resource_provider_->CanLockForWrite(id)); |
3685 EXPECT_FALSE(resource_provider_->InUseByConsumer(id)); | 3691 EXPECT_FALSE(resource_provider_->InUseByConsumer(id)); |
3686 gpu_memory_buffer_manager_->SetGpuMemoryBufferIsInUseByMacOSWindowServer( | 3692 gpu_memory_buffer_manager_->SetGpuMemoryBufferIsInUseByMacOSWindowServer( |
3687 gpu_memory_buffer, true); | 3693 gpu_memory_buffer, true); |
3688 EXPECT_FALSE(resource_provider_->CanLockForWrite(id)); | 3694 EXPECT_FALSE(resource_provider_->CanLockForWrite(id)); |
3689 EXPECT_TRUE(resource_provider_->InUseByConsumer(id)); | 3695 EXPECT_TRUE(resource_provider_->InUseByConsumer(id)); |
3690 } | 3696 } |
3691 | 3697 |
3692 } // namespace | 3698 } // namespace |
3693 } // namespace cc | 3699 } // namespace cc |
OLD | NEW |