| 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 <deque> | 8 #include <deque> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <utility> |
| 11 #include <vector> | 12 #include <vector> |
| 12 | 13 |
| 13 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
| 14 #include "base/callback.h" | 15 #include "base/callback.h" |
| 15 #include "base/containers/hash_tables.h" | 16 #include "base/containers/hash_tables.h" |
| 16 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
| 17 #include "base/threading/thread_checker.h" | 18 #include "base/threading/thread_checker.h" |
| 18 #include "cc/base/cc_export.h" | 19 #include "cc/base/cc_export.h" |
| 19 #include "cc/output/context_provider.h" | 20 #include "cc/output/context_provider.h" |
| 20 #include "cc/output/output_surface.h" | 21 #include "cc/output/output_surface.h" |
| 21 #include "cc/resources/release_callback.h" | 22 #include "cc/resources/release_callback.h" |
| 22 #include "cc/resources/resource_format.h" | 23 #include "cc/resources/resource_format.h" |
| 24 #include "cc/resources/return_callback.h" |
| 23 #include "cc/resources/single_release_callback.h" | 25 #include "cc/resources/single_release_callback.h" |
| 24 #include "cc/resources/texture_mailbox.h" | 26 #include "cc/resources/texture_mailbox.h" |
| 25 #include "cc/resources/transferable_resource.h" | 27 #include "cc/resources/transferable_resource.h" |
| 26 #include "third_party/khronos/GLES2/gl2.h" | 28 #include "third_party/khronos/GLES2/gl2.h" |
| 27 #include "third_party/skia/include/core/SkBitmap.h" | 29 #include "third_party/skia/include/core/SkBitmap.h" |
| 28 #include "third_party/skia/include/core/SkCanvas.h" | 30 #include "third_party/skia/include/core/SkCanvas.h" |
| 29 #include "ui/gfx/size.h" | 31 #include "ui/gfx/size.h" |
| 30 | 32 |
| 31 namespace WebKit { class WebGraphicsContext3D; } | 33 namespace WebKit { class WebGraphicsContext3D; } |
| 32 | 34 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 139 |
| 138 // Finish all context operations, causing any pending callbacks to be | 140 // Finish all context operations, causing any pending callbacks to be |
| 139 // scheduled. | 141 // scheduled. |
| 140 void Finish(); | 142 void Finish(); |
| 141 | 143 |
| 142 // Only flush the command buffer if supported. | 144 // Only flush the command buffer if supported. |
| 143 // Returns true if the shallow flush occurred, false otherwise. | 145 // Returns true if the shallow flush occurred, false otherwise. |
| 144 bool ShallowFlushIfSupported(); | 146 bool ShallowFlushIfSupported(); |
| 145 | 147 |
| 146 // Creates accounting for a child. Returns a child ID. | 148 // Creates accounting for a child. Returns a child ID. |
| 147 int CreateChild(); | 149 int CreateChild(const ReturnCallback& return_callback); |
| 148 | 150 |
| 149 // Destroys accounting for the child, deleting all accounted resources. | 151 // Destroys accounting for the child, deleting all accounted resources. |
| 150 void DestroyChild(int child); | 152 void DestroyChild(int child); |
| 151 | 153 |
| 152 // Gets the child->parent resource ID map. | 154 // Gets the child->parent resource ID map. |
| 153 const ResourceIdMap& GetChildToParentMap(int child) const; | 155 const ResourceIdMap& GetChildToParentMap(int child) const; |
| 154 | 156 |
| 155 // Prepares resources to be transfered to the parent, moving them to | 157 // Prepares resources to be transfered to the parent, moving them to |
| 156 // mailboxes and serializing meta-data into TransferableResources. | 158 // mailboxes and serializing meta-data into TransferableResources. |
| 157 // Resources are not removed from the ResourceProvider, but are marked as | 159 // Resources are not removed from the ResourceProvider, but are marked as |
| 158 // "in use". | 160 // "in use". |
| 159 void PrepareSendToParent(const ResourceIdArray& resources, | 161 void PrepareSendToParent(const ResourceIdArray& resources, |
| 160 TransferableResourceArray* transferable_resources); | 162 TransferableResourceArray* transferable_resources); |
| 161 | 163 |
| 162 // Prepares resources to be transfered back to the child, moving them to | |
| 163 // mailboxes and serializing meta-data into TransferableResources. | |
| 164 // Resources are removed from the ResourceProvider. Note: the resource IDs | |
| 165 // passed are in the parent namespace and will be translated to the child | |
| 166 // namespace when returned. | |
| 167 void PrepareSendReturnsToChild(int child, | |
| 168 const ResourceIdArray& resources, | |
| 169 ReturnedResourceArray* returned_resources); | |
| 170 | |
| 171 // Receives resources from a child, moving them from mailboxes. Resource IDs | 164 // Receives resources from a child, moving them from mailboxes. Resource IDs |
| 172 // passed are in the child namespace, and will be translated to the parent | 165 // passed are in the child namespace, and will be translated to the parent |
| 173 // namespace, added to the child->parent map. | 166 // namespace, added to the child->parent map. |
| 167 // This adds the resources to the working set in the ResourceProvider without |
| 168 // declaring which resources are in use. Use DeclareUsedResourcesFromChild |
| 169 // after calling this method to do that. All calls to ReceiveFromChild should |
| 170 // be followed by a DeclareUsedResourcesFromChild. |
| 174 // NOTE: if the sync_point is set on any TransferableResource, this will | 171 // NOTE: if the sync_point is set on any TransferableResource, this will |
| 175 // wait on it. | 172 // wait on it. |
| 176 void ReceiveFromChild( | 173 void ReceiveFromChild( |
| 177 int child, const TransferableResourceArray& transferable_resources); | 174 int child, const TransferableResourceArray& transferable_resources); |
| 178 | 175 |
| 176 // Once a set of resources have been received, they may or may not be used. |
| 177 // This declares what set of resources are currently in use from the child, |
| 178 // releasing any other resources back to the child. |
| 179 void DeclareUsedResourcesFromChild( |
| 180 int child, |
| 181 const ResourceIdArray& resources_from_child); |
| 182 |
| 179 // Receives resources from the parent, moving them from mailboxes. Resource | 183 // Receives resources from the parent, moving them from mailboxes. Resource |
| 180 // IDs passed are in the child namespace. | 184 // IDs passed are in the child namespace. |
| 181 // NOTE: if the sync_point is set on any TransferableResource, this will | 185 // NOTE: if the sync_point is set on any TransferableResource, this will |
| 182 // wait on it. | 186 // wait on it. |
| 183 void ReceiveReturnsFromParent( | 187 void ReceiveReturnsFromParent( |
| 184 const ReturnedResourceArray& transferable_resources); | 188 const ReturnedResourceArray& transferable_resources); |
| 185 | 189 |
| 186 // The following lock classes are part of the ResourceProvider API and are | 190 // The following lock classes are part of the ResourceProvider API and are |
| 187 // needed to read and write the resource contents. The user must ensure | 191 // needed to read and write the resource contents. The user must ensure |
| 188 // that they only use GL locks on GL resources, etc, and this is enforced | 192 // that they only use GL locks on GL resources, etc, and this is enforced |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 GLenum filter, | 356 GLenum filter, |
| 353 GLenum texture_pool, | 357 GLenum texture_pool, |
| 354 GLint wrap_mode, | 358 GLint wrap_mode, |
| 355 TextureUsageHint hint, | 359 TextureUsageHint hint, |
| 356 ResourceFormat format); | 360 ResourceFormat format); |
| 357 Resource(uint8_t* pixels, | 361 Resource(uint8_t* pixels, |
| 358 gfx::Size size, | 362 gfx::Size size, |
| 359 GLenum filter, | 363 GLenum filter, |
| 360 GLint wrap_mode); | 364 GLint wrap_mode); |
| 361 | 365 |
| 366 int child_id; |
| 362 unsigned gl_id; | 367 unsigned gl_id; |
| 363 // Pixel buffer used for set pixels without unnecessary copying. | 368 // Pixel buffer used for set pixels without unnecessary copying. |
| 364 unsigned gl_pixel_buffer_id; | 369 unsigned gl_pixel_buffer_id; |
| 365 // Query used to determine when asynchronous set pixels complete. | 370 // Query used to determine when asynchronous set pixels complete. |
| 366 unsigned gl_upload_query_id; | 371 unsigned gl_upload_query_id; |
| 367 TextureMailbox mailbox; | 372 TextureMailbox mailbox; |
| 368 ReleaseCallback release_callback; | 373 ReleaseCallback release_callback; |
| 369 uint8_t* pixels; | 374 uint8_t* pixels; |
| 370 uint8_t* pixel_buffer; | 375 uint8_t* pixel_buffer; |
| 371 int lock_for_read_count; | 376 int lock_for_read_count; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 385 GLenum filter; | 390 GLenum filter; |
| 386 GLenum target; | 391 GLenum target; |
| 387 unsigned image_id; | 392 unsigned image_id; |
| 388 GLenum texture_pool; | 393 GLenum texture_pool; |
| 389 GLint wrap_mode; | 394 GLint wrap_mode; |
| 390 TextureUsageHint hint; | 395 TextureUsageHint hint; |
| 391 ResourceType type; | 396 ResourceType type; |
| 392 ResourceFormat format; | 397 ResourceFormat format; |
| 393 }; | 398 }; |
| 394 typedef base::hash_map<ResourceId, Resource> ResourceMap; | 399 typedef base::hash_map<ResourceId, Resource> ResourceMap; |
| 400 |
| 401 static bool CompareResourceMapIteratorsByChildId( |
| 402 const std::pair<ReturnedResource, ResourceMap::iterator>& a, |
| 403 const std::pair<ReturnedResource, ResourceMap::iterator>& b); |
| 404 |
| 395 struct Child { | 405 struct Child { |
| 396 Child(); | 406 Child(); |
| 397 ~Child(); | 407 ~Child(); |
| 398 | 408 |
| 399 ResourceIdMap child_to_parent_map; | 409 ResourceIdMap child_to_parent_map; |
| 400 ResourceIdMap parent_to_child_map; | 410 ResourceIdMap parent_to_child_map; |
| 411 ReturnCallback return_callback; |
| 412 ResourceIdSet in_use_resources; |
| 401 }; | 413 }; |
| 402 typedef base::hash_map<int, Child> ChildMap; | 414 typedef base::hash_map<int, Child> ChildMap; |
| 403 | 415 |
| 404 bool ReadLockFenceHasPassed(Resource* resource) { | 416 bool ReadLockFenceHasPassed(Resource* resource) { |
| 405 return !resource->read_lock_fence.get() || | 417 return !resource->read_lock_fence.get() || |
| 406 resource->read_lock_fence->HasPassed(); | 418 resource->read_lock_fence->HasPassed(); |
| 407 } | 419 } |
| 408 | 420 |
| 409 ResourceProvider(OutputSurface* output_surface, | 421 ResourceProvider(OutputSurface* output_surface, |
| 410 int highp_threshold_min, | 422 int highp_threshold_min, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 421 const Resource* resource); | 433 const Resource* resource); |
| 422 | 434 |
| 423 void TransferResource(WebKit::WebGraphicsContext3D* context, | 435 void TransferResource(WebKit::WebGraphicsContext3D* context, |
| 424 ResourceId id, | 436 ResourceId id, |
| 425 TransferableResource* resource); | 437 TransferableResource* resource); |
| 426 enum DeleteStyle { | 438 enum DeleteStyle { |
| 427 Normal, | 439 Normal, |
| 428 ForShutdown, | 440 ForShutdown, |
| 429 }; | 441 }; |
| 430 void DeleteResourceInternal(ResourceMap::iterator it, DeleteStyle style); | 442 void DeleteResourceInternal(ResourceMap::iterator it, DeleteStyle style); |
| 443 void DeleteAndReturnUnusedResourcesToChild(Child* child_info, |
| 444 DeleteStyle style, |
| 445 const ResourceIdArray& unused); |
| 431 void LazyCreate(Resource* resource); | 446 void LazyCreate(Resource* resource); |
| 432 void LazyAllocate(Resource* resource); | 447 void LazyAllocate(Resource* resource); |
| 433 | 448 |
| 434 // Binds the given GL resource to a texture target for sampling using the | 449 // Binds the given GL resource to a texture target for sampling using the |
| 435 // specified filter for both minification and magnification. The resource | 450 // specified filter for both minification and magnification. The resource |
| 436 // must be locked for reading. | 451 // must be locked for reading. |
| 437 void BindForSampling(ResourceProvider::ResourceId resource_id, | 452 void BindForSampling(ResourceProvider::ResourceId resource_id, |
| 438 GLenum target, | 453 GLenum target, |
| 439 GLenum unit, | 454 GLenum unit, |
| 440 GLenum filter); | 455 GLenum filter); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 465 | 480 |
| 466 scoped_refptr<Fence> current_read_lock_fence_; | 481 scoped_refptr<Fence> current_read_lock_fence_; |
| 467 bool use_rgba_4444_texture_format_; | 482 bool use_rgba_4444_texture_format_; |
| 468 | 483 |
| 469 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); | 484 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); |
| 470 }; | 485 }; |
| 471 | 486 |
| 472 } // namespace cc | 487 } // namespace cc |
| 473 | 488 |
| 474 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ | 489 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ |
| OLD | NEW |