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

Side by Side Diff: cc/resources/resource_provider.h

Issue 24078024: cc: Return resources to child compositor via a Callback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: deletechild: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #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 <vector> 11 #include <vector>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/containers/hash_tables.h" 15 #include "base/containers/hash_tables.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/threading/thread_checker.h" 17 #include "base/threading/thread_checker.h"
18 #include "cc/base/cc_export.h" 18 #include "cc/base/cc_export.h"
19 #include "cc/output/context_provider.h" 19 #include "cc/output/context_provider.h"
20 #include "cc/output/output_surface.h" 20 #include "cc/output/output_surface.h"
21 #include "cc/resources/release_callback.h" 21 #include "cc/resources/release_callback.h"
22 #include "cc/resources/return_callback.h"
22 #include "cc/resources/single_release_callback.h" 23 #include "cc/resources/single_release_callback.h"
23 #include "cc/resources/texture_mailbox.h" 24 #include "cc/resources/texture_mailbox.h"
24 #include "cc/resources/transferable_resource.h" 25 #include "cc/resources/transferable_resource.h"
25 #include "third_party/khronos/GLES2/gl2.h" 26 #include "third_party/khronos/GLES2/gl2.h"
26 #include "third_party/skia/include/core/SkBitmap.h" 27 #include "third_party/skia/include/core/SkBitmap.h"
27 #include "third_party/skia/include/core/SkCanvas.h" 28 #include "third_party/skia/include/core/SkCanvas.h"
28 #include "ui/gfx/size.h" 29 #include "ui/gfx/size.h"
29 30
30 namespace WebKit { class WebGraphicsContext3D; } 31 namespace WebKit { class WebGraphicsContext3D; }
31 32
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 134
134 // Finish all context operations, causing any pending callbacks to be 135 // Finish all context operations, causing any pending callbacks to be
135 // scheduled. 136 // scheduled.
136 void Finish(); 137 void Finish();
137 138
138 // Only flush the command buffer if supported. 139 // Only flush the command buffer if supported.
139 // Returns true if the shallow flush occurred, false otherwise. 140 // Returns true if the shallow flush occurred, false otherwise.
140 bool ShallowFlushIfSupported(); 141 bool ShallowFlushIfSupported();
141 142
142 // Creates accounting for a child. Returns a child ID. 143 // Creates accounting for a child. Returns a child ID.
143 int CreateChild(); 144 int CreateChild(const ReturnCallback& return_callback);
144 145
145 // Destroys accounting for the child, deleting all accounted resources. 146 // Destroys accounting for the child, deleting all accounted resources.
146 void DestroyChild(int child); 147 void DestroyChild(int child);
147 148
148 // Gets the child->parent resource ID map. 149 // Gets the child->parent resource ID map.
149 const ResourceIdMap& GetChildToParentMap(int child) const; 150 const ResourceIdMap& GetChildToParentMap(int child) const;
150 151
151 // Prepares resources to be transfered to the parent, moving them to 152 // Prepares resources to be transfered to the parent, moving them to
152 // mailboxes and serializing meta-data into TransferableResources. 153 // mailboxes and serializing meta-data into TransferableResources.
153 // Resources are not removed from the ResourceProvider, but are marked as 154 // Resources are not removed from the ResourceProvider, but are marked as
154 // "in use". 155 // "in use".
155 void PrepareSendToParent(const ResourceIdArray& resources, 156 void PrepareSendToParent(const ResourceIdArray& resources,
156 TransferableResourceArray* transferable_resources); 157 TransferableResourceArray* transferable_resources);
157 158
158 // Prepares resources to be transfered back to the child, moving them to
159 // mailboxes and serializing meta-data into TransferableResources.
160 // Resources are removed from the ResourceProvider. Note: the resource IDs
161 // passed are in the parent namespace and will be translated to the child
162 // namespace when returned.
163 void PrepareSendReturnsToChild(int child,
164 const ResourceIdArray& resources,
165 ReturnedResourceArray* returned_resources);
166
167 // Receives resources from a child, moving them from mailboxes. Resource IDs 159 // Receives resources from a child, moving them from mailboxes. Resource IDs
168 // passed are in the child namespace, and will be translated to the parent 160 // passed are in the child namespace, and will be translated to the parent
169 // namespace, added to the child->parent map. 161 // namespace, added to the child->parent map.
162 // This adds the resources to the working set in the ResourceProvider without
163 // declaring which resources are in use. Use DeclareUsedResourcesFromChild
164 // after calling this method to do that. All calls to ReceiveFromChild should
165 // be followed by a DeclareUsedResourcesFromChild.
170 // NOTE: if the sync_point is set on any TransferableResource, this will 166 // NOTE: if the sync_point is set on any TransferableResource, this will
171 // wait on it. 167 // wait on it.
172 void ReceiveFromChild( 168 void ReceiveFromChild(
173 int child, const TransferableResourceArray& transferable_resources); 169 int child, const TransferableResourceArray& transferable_resources);
174 170
171 // Once a set of resources have been received, they may or may not be used.
172 // This declares what set of resources are currently in use from the child,
173 // releasing any other resources back to the child.
174 void DeclareUsedResourcesFromChild(
175 int child,
176 const ResourceIdArray& resources_from_child);
177
175 // Receives resources from the parent, moving them from mailboxes. Resource 178 // Receives resources from the parent, moving them from mailboxes. Resource
176 // IDs passed are in the child namespace. 179 // IDs passed are in the child namespace.
177 // NOTE: if the sync_point is set on any TransferableResource, this will 180 // NOTE: if the sync_point is set on any TransferableResource, this will
178 // wait on it. 181 // wait on it.
179 void ReceiveReturnsFromParent( 182 void ReceiveReturnsFromParent(
180 const ReturnedResourceArray& transferable_resources); 183 const ReturnedResourceArray& transferable_resources);
181 184
182 // The following lock classes are part of the ResourceProvider API and are 185 // The following lock classes are part of the ResourceProvider API and are
183 // needed to read and write the resource contents. The user must ensure 186 // needed to read and write the resource contents. The user must ensure
184 // that they only use GL locks on GL resources, etc, and this is enforced 187 // that they only use GL locks on GL resources, etc, and this is enforced
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 GLenum filter, 348 GLenum filter,
346 GLenum texture_pool, 349 GLenum texture_pool,
347 GLint wrap_mode, 350 GLint wrap_mode,
348 TextureUsageHint hint); 351 TextureUsageHint hint);
349 Resource(uint8_t* pixels, 352 Resource(uint8_t* pixels,
350 gfx::Size size, 353 gfx::Size size,
351 GLenum format, 354 GLenum format,
352 GLenum filter, 355 GLenum filter,
353 GLint wrap_mode); 356 GLint wrap_mode);
354 357
358 int child_id;
355 unsigned gl_id; 359 unsigned gl_id;
356 // Pixel buffer used for set pixels without unnecessary copying. 360 // Pixel buffer used for set pixels without unnecessary copying.
357 unsigned gl_pixel_buffer_id; 361 unsigned gl_pixel_buffer_id;
358 // Query used to determine when asynchronous set pixels complete. 362 // Query used to determine when asynchronous set pixels complete.
359 unsigned gl_upload_query_id; 363 unsigned gl_upload_query_id;
360 TextureMailbox mailbox; 364 TextureMailbox mailbox;
361 ReleaseCallback release_callback; 365 ReleaseCallback release_callback;
362 uint8_t* pixels; 366 uint8_t* pixels;
363 uint8_t* pixel_buffer; 367 uint8_t* pixel_buffer;
364 int lock_for_read_count; 368 int lock_for_read_count;
(...skipping 19 matching lines...) Expand all
384 TextureUsageHint hint; 388 TextureUsageHint hint;
385 ResourceType type; 389 ResourceType type;
386 }; 390 };
387 typedef base::hash_map<ResourceId, Resource> ResourceMap; 391 typedef base::hash_map<ResourceId, Resource> ResourceMap;
388 struct Child { 392 struct Child {
389 Child(); 393 Child();
390 ~Child(); 394 ~Child();
391 395
392 ResourceIdMap child_to_parent_map; 396 ResourceIdMap child_to_parent_map;
393 ResourceIdMap parent_to_child_map; 397 ResourceIdMap parent_to_child_map;
398 ReturnCallback return_callback;
399 ResourceIdSet in_use_resources;
394 }; 400 };
395 typedef base::hash_map<int, Child> ChildMap; 401 typedef base::hash_map<int, Child> ChildMap;
396 402
397 bool ReadLockFenceHasPassed(Resource* resource) { 403 bool ReadLockFenceHasPassed(Resource* resource) {
398 return !resource->read_lock_fence.get() || 404 return !resource->read_lock_fence.get() ||
399 resource->read_lock_fence->HasPassed(); 405 resource->read_lock_fence->HasPassed();
400 } 406 }
401 407
402 explicit ResourceProvider(OutputSurface* output_surface, 408 explicit ResourceProvider(OutputSurface* output_surface,
403 int highp_threshold_min); 409 int highp_threshold_min);
404 410
405 void CleanUpGLIfNeeded(); 411 void CleanUpGLIfNeeded();
406 412
407 Resource* GetResource(ResourceId id); 413 Resource* GetResource(ResourceId id);
408 const Resource* LockForRead(ResourceId id); 414 const Resource* LockForRead(ResourceId id);
409 void UnlockForRead(ResourceId id); 415 void UnlockForRead(ResourceId id);
410 const Resource* LockForWrite(ResourceId id); 416 const Resource* LockForWrite(ResourceId id);
411 void UnlockForWrite(ResourceId id); 417 void UnlockForWrite(ResourceId id);
412 static void PopulateSkBitmapWithResource(SkBitmap* sk_bitmap, 418 static void PopulateSkBitmapWithResource(SkBitmap* sk_bitmap,
413 const Resource* resource); 419 const Resource* resource);
414 420
415 void TransferResource(WebKit::WebGraphicsContext3D* context, 421 void TransferResource(WebKit::WebGraphicsContext3D* context,
416 ResourceId id, 422 ResourceId id,
417 TransferableResource* resource); 423 TransferableResource* resource);
418 enum DeleteStyle { 424 enum DeleteStyle {
419 Normal, 425 Normal,
420 ForShutdown, 426 ForShutdown,
421 }; 427 };
422 void DeleteResourceInternal(ResourceMap::iterator it, DeleteStyle style); 428 void DeleteResourceInternal(ResourceMap::iterator it, DeleteStyle style);
429 void DeleteAndReturnUnusedResourcesToChild(Child* child_info,
430 DeleteStyle style,
431 const ResourceIdArray& unused);
423 void LazyCreate(Resource* resource); 432 void LazyCreate(Resource* resource);
424 void LazyAllocate(Resource* resource); 433 void LazyAllocate(Resource* resource);
425 434
426 // Binds the given GL resource to a texture target for sampling using the 435 // Binds the given GL resource to a texture target for sampling using the
427 // specified filter for both minification and magnification. The resource 436 // specified filter for both minification and magnification. The resource
428 // must be locked for reading. 437 // must be locked for reading.
429 void BindForSampling(ResourceProvider::ResourceId resource_id, 438 void BindForSampling(ResourceProvider::ResourceId resource_id,
430 GLenum target, 439 GLenum target,
431 GLenum unit, 440 GLenum unit,
432 GLenum filter); 441 GLenum filter);
(...skipping 23 matching lines...) Expand all
456 base::ThreadChecker thread_checker_; 465 base::ThreadChecker thread_checker_;
457 466
458 scoped_refptr<Fence> current_read_lock_fence_; 467 scoped_refptr<Fence> current_read_lock_fence_;
459 468
460 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); 469 DISALLOW_COPY_AND_ASSIGN(ResourceProvider);
461 }; 470 };
462 471
463 } // namespace cc 472 } // namespace cc
464 473
465 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ 474 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698