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 #ifndef CC_RESOURCES_RESOURCE_PROVIDER_H_ | 5 #ifndef CC_RESOURCES_RESOURCE_PROVIDER_H_ |
6 #define CC_RESOURCES_RESOURCE_PROVIDER_H_ | 6 #define CC_RESOURCES_RESOURCE_PROVIDER_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 // This class is not thread-safe and can only be called from the thread it was | 58 // This class is not thread-safe and can only be called from the thread it was |
59 // created on (in practice, the impl thread). | 59 // created on (in practice, the impl thread). |
60 class CC_EXPORT ResourceProvider | 60 class CC_EXPORT ResourceProvider |
61 : public base::trace_event::MemoryDumpProvider { | 61 : public base::trace_event::MemoryDumpProvider { |
62 private: | 62 private: |
63 struct Resource; | 63 struct Resource; |
64 | 64 |
65 public: | 65 public: |
66 using ResourceIdArray = std::vector<ResourceId>; | 66 using ResourceIdArray = std::vector<ResourceId>; |
67 using ResourceIdSet = std::unordered_set<ResourceId>; | |
68 using ResourceIdMap = std::unordered_map<ResourceId, ResourceId>; | 67 using ResourceIdMap = std::unordered_map<ResourceId, ResourceId>; |
69 enum TextureHint { | 68 enum TextureHint { |
70 TEXTURE_HINT_DEFAULT = 0x0, | 69 TEXTURE_HINT_DEFAULT = 0x0, |
71 TEXTURE_HINT_IMMUTABLE = 0x1, | 70 TEXTURE_HINT_IMMUTABLE = 0x1, |
72 TEXTURE_HINT_FRAMEBUFFER = 0x2, | 71 TEXTURE_HINT_FRAMEBUFFER = 0x2, |
73 TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER = | 72 TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER = |
74 TEXTURE_HINT_IMMUTABLE | TEXTURE_HINT_FRAMEBUFFER | 73 TEXTURE_HINT_IMMUTABLE | TEXTURE_HINT_FRAMEBUFFER |
75 }; | 74 }; |
76 enum ResourceType { | 75 enum ResourceType { |
77 RESOURCE_TYPE_GPU_MEMORY_BUFFER, | 76 RESOURCE_TYPE_GPU_MEMORY_BUFFER, |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 void DeclareUsedResourcesFromChild(int child, | 199 void DeclareUsedResourcesFromChild(int child, |
201 const ResourceIdSet& resources_from_child); | 200 const ResourceIdSet& resources_from_child); |
202 | 201 |
203 // Receives resources from the parent, moving them from mailboxes. Resource | 202 // Receives resources from the parent, moving them from mailboxes. Resource |
204 // IDs passed are in the child namespace. | 203 // IDs passed are in the child namespace. |
205 // NOTE: if the sync_token is set on any TransferableResource, this will | 204 // NOTE: if the sync_token is set on any TransferableResource, this will |
206 // wait on it. | 205 // wait on it. |
207 void ReceiveReturnsFromParent( | 206 void ReceiveReturnsFromParent( |
208 const ReturnedResourceArray& transferable_resources); | 207 const ReturnedResourceArray& transferable_resources); |
209 | 208 |
| 209 #if defined(OS_ANDROID) |
| 210 // Send an overlay promotion hint to all resources that requested it via |
| 211 // |want_promotion_hint|. |promotable_set| contains all the resources that |
| 212 // should be told that they're promotable. Others will be told that they're |
| 213 // not promotable right now. |
| 214 void SendPromotionHints(const ResourceIdSet& promotable_set); |
| 215 #endif |
| 216 |
210 // The following lock classes are part of the ResourceProvider API and are | 217 // The following lock classes are part of the ResourceProvider API and are |
211 // needed to read and write the resource contents. The user must ensure | 218 // needed to read and write the resource contents. The user must ensure |
212 // that they only use GL locks on GL resources, etc, and this is enforced | 219 // that they only use GL locks on GL resources, etc, and this is enforced |
213 // by assertions. | 220 // by assertions. |
214 class CC_EXPORT ScopedReadLockGL { | 221 class CC_EXPORT ScopedReadLockGL { |
215 public: | 222 public: |
216 ScopedReadLockGL(ResourceProvider* resource_provider, | 223 ScopedReadLockGL(ResourceProvider* resource_provider, |
217 ResourceId resource_id); | 224 ResourceId resource_id); |
218 ~ScopedReadLockGL(); | 225 ~ScopedReadLockGL(); |
219 | 226 |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 // and has read fences enabled, the resource will not allow writes | 471 // and has read fences enabled, the resource will not allow writes |
465 // until this fence has passed. | 472 // until this fence has passed. |
466 void SetReadLockFence(Fence* fence) { current_read_lock_fence_ = fence; } | 473 void SetReadLockFence(Fence* fence) { current_read_lock_fence_ = fence; } |
467 | 474 |
468 // Indicates if we can currently lock this resource for write. | 475 // Indicates if we can currently lock this resource for write. |
469 bool CanLockForWrite(ResourceId id); | 476 bool CanLockForWrite(ResourceId id); |
470 | 477 |
471 // Indicates if this resource may be used for a hardware overlay plane. | 478 // Indicates if this resource may be used for a hardware overlay plane. |
472 bool IsOverlayCandidate(ResourceId id); | 479 bool IsOverlayCandidate(ResourceId id); |
473 | 480 |
| 481 #if defined(OS_ANDROID) |
| 482 // Indicates if this resource is backed by an Android SurfaceTexture, and thus |
| 483 // can't really be promoted to an overlay. |
| 484 // TODO(liberato): be sure that this is sent via IPC. |
| 485 bool IsBackedBySurfaceTexture(ResourceId id); |
| 486 #endif |
| 487 |
474 void WaitSyncTokenIfNeeded(ResourceId id); | 488 void WaitSyncTokenIfNeeded(ResourceId id); |
475 | 489 |
476 static GLint GetActiveTextureUnit(gpu::gles2::GLES2Interface* gl); | 490 static GLint GetActiveTextureUnit(gpu::gles2::GLES2Interface* gl); |
477 | 491 |
478 void ValidateResource(ResourceId id) const; | 492 void ValidateResource(ResourceId id) const; |
479 | 493 |
480 GLenum GetImageTextureTarget(gfx::BufferUsage usage, ResourceFormat format); | 494 GLenum GetImageTextureTarget(gfx::BufferUsage usage, ResourceFormat format); |
481 | 495 |
482 // base::trace_event::MemoryDumpProvider implementation. | 496 // base::trace_event::MemoryDumpProvider implementation. |
483 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, | 497 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 int imported_count; | 581 int imported_count; |
568 int exported_count; | 582 int exported_count; |
569 bool dirty_image : 1; | 583 bool dirty_image : 1; |
570 bool locked_for_write : 1; | 584 bool locked_for_write : 1; |
571 bool lost : 1; | 585 bool lost : 1; |
572 bool marked_for_deletion : 1; | 586 bool marked_for_deletion : 1; |
573 bool allocated : 1; | 587 bool allocated : 1; |
574 bool read_lock_fences_enabled : 1; | 588 bool read_lock_fences_enabled : 1; |
575 bool has_shared_bitmap_id : 1; | 589 bool has_shared_bitmap_id : 1; |
576 bool is_overlay_candidate : 1; | 590 bool is_overlay_candidate : 1; |
| 591 #if defined(OS_ANDROID) |
| 592 // Indicates whether this resource may not be overlayed on Android, since |
| 593 // it's not backed by a SurfaceView. This may be set in combination with |
| 594 // |is_overlay_candidate|, to find out if switching the resource to a |
| 595 // a SurfaceView would result in overlay promotion. It's good to find this |
| 596 // out in advance, since one has no fallback path for displaying a |
| 597 // SurfaceView except via promoting it to an overlay. Ideally, one _could_ |
| 598 // promote SurfaceTexture via the overlay path, even if one ended up just |
| 599 // drawing a quad in the compositor. However, for now, we use this flag to |
| 600 // refuse to promote so that the compositor will draw the quad. |
| 601 bool is_backed_by_surface_texture : 1; |
| 602 // Indicates that this resource would like a promotion hint. |
| 603 bool wants_promotion_hint : 1; |
| 604 #endif |
577 scoped_refptr<Fence> read_lock_fence; | 605 scoped_refptr<Fence> read_lock_fence; |
578 gfx::Size size; | 606 gfx::Size size; |
579 Origin origin; | 607 Origin origin; |
580 GLenum target; | 608 GLenum target; |
581 // TODO(skyostil): Use a separate sampler object for filter state. | 609 // TODO(skyostil): Use a separate sampler object for filter state. |
582 GLenum original_filter; | 610 GLenum original_filter; |
583 GLenum filter; | 611 GLenum filter; |
584 unsigned image_id; | 612 unsigned image_id; |
585 unsigned bound_image_id; | 613 unsigned bound_image_id; |
586 TextureHint hint; | 614 TextureHint hint; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 // A process-unique ID used for disambiguating memory dumps from different | 739 // A process-unique ID used for disambiguating memory dumps from different |
712 // resource providers. | 740 // resource providers. |
713 int tracing_id_; | 741 int tracing_id_; |
714 | 742 |
715 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); | 743 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); |
716 }; | 744 }; |
717 | 745 |
718 } // namespace cc | 746 } // namespace cc |
719 | 747 |
720 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ | 748 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ |
OLD | NEW |