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

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

Issue 634083002: gpu: Compositor management of GpuMemoryBuffer instances. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cc-pre-chromium-image-refactor
Patch Set: rebase Created 6 years, 2 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
« no previous file with comments | « cc/resources/raster_worker_pool_unittest.cc ('k') | cc/resources/resource_provider.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #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>
(...skipping 24 matching lines...) Expand all
35 35
36 class GrContext; 36 class GrContext;
37 37
38 namespace gpu { 38 namespace gpu {
39 namespace gles { 39 namespace gles {
40 class GLES2Interface; 40 class GLES2Interface;
41 } 41 }
42 } 42 }
43 43
44 namespace gfx { 44 namespace gfx {
45 class GpuMemoryBuffer;
45 class Rect; 46 class Rect;
46 class Vector2d; 47 class Vector2d;
47 } 48 }
48 49
49 namespace cc { 50 namespace cc {
50 class BlockingTaskRunner; 51 class BlockingTaskRunner;
52 class GpuMemoryBufferManager;
51 class IdAllocator; 53 class IdAllocator;
52 class SharedBitmap; 54 class SharedBitmap;
53 class SharedBitmapManager; 55 class SharedBitmapManager;
54 class TextureUploader; 56 class TextureUploader;
55 57
56 // 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
57 // created on (in practice, the impl thread). 59 // created on (in practice, the impl thread).
58 class CC_EXPORT ResourceProvider { 60 class CC_EXPORT ResourceProvider {
59 public: 61 public:
60 typedef unsigned ResourceId; 62 typedef unsigned ResourceId;
61 typedef std::vector<ResourceId> ResourceIdArray; 63 typedef std::vector<ResourceId> ResourceIdArray;
62 typedef std::set<ResourceId> ResourceIdSet; 64 typedef std::set<ResourceId> ResourceIdSet;
63 typedef base::hash_map<ResourceId, ResourceId> ResourceIdMap; 65 typedef base::hash_map<ResourceId, ResourceId> ResourceIdMap;
64 enum TextureHint { 66 enum TextureHint {
65 TextureHintDefault = 0x0, 67 TextureHintDefault = 0x0,
66 TextureHintImmutable = 0x1, 68 TextureHintImmutable = 0x1,
67 TextureHintFramebuffer = 0x2, 69 TextureHintFramebuffer = 0x2,
68 TextureHintImmutableFramebuffer = 70 TextureHintImmutableFramebuffer =
69 TextureHintImmutable | TextureHintFramebuffer 71 TextureHintImmutable | TextureHintFramebuffer
70 }; 72 };
71 enum ResourceType { 73 enum ResourceType {
72 InvalidType = 0, 74 InvalidType = 0,
73 GLTexture = 1, 75 GLTexture = 1,
74 Bitmap, 76 Bitmap,
75 }; 77 };
76 78
77 static scoped_ptr<ResourceProvider> Create( 79 static scoped_ptr<ResourceProvider> Create(
78 OutputSurface* output_surface, 80 OutputSurface* output_surface,
79 SharedBitmapManager* shared_bitmap_manager, 81 SharedBitmapManager* shared_bitmap_manager,
82 GpuMemoryBufferManager* gpu_memory_buffer_manager,
80 BlockingTaskRunner* blocking_main_thread_task_runner, 83 BlockingTaskRunner* blocking_main_thread_task_runner,
81 int highp_threshold_min, 84 int highp_threshold_min,
82 bool use_rgba_4444_texture_format, 85 bool use_rgba_4444_texture_format,
83 size_t id_allocation_chunk_size, 86 size_t id_allocation_chunk_size,
84 bool use_distance_field_text); 87 bool use_distance_field_text);
85 virtual ~ResourceProvider(); 88 virtual ~ResourceProvider();
86 89
87 void InitializeSoftware(); 90 void InitializeSoftware();
88 void InitializeGL(); 91 void InitializeGL();
89 92
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 305
303 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware); 306 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware);
304 }; 307 };
305 308
306 class CC_EXPORT ScopedWriteLockGpuMemoryBuffer { 309 class CC_EXPORT ScopedWriteLockGpuMemoryBuffer {
307 public: 310 public:
308 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider, 311 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
309 ResourceProvider::ResourceId resource_id); 312 ResourceProvider::ResourceId resource_id);
310 ~ScopedWriteLockGpuMemoryBuffer(); 313 ~ScopedWriteLockGpuMemoryBuffer();
311 314
312 void* gpu_memory_buffer() { return gpu_memory_buffer_; } 315 gfx::GpuMemoryBuffer* gpu_memory_buffer() { return gpu_memory_buffer_; }
313 int stride() const { return stride_; }
314 316
315 private: 317 private:
316 ResourceProvider* resource_provider_; 318 ResourceProvider* resource_provider_;
317 ResourceProvider::ResourceId resource_id_; 319 ResourceProvider::ResourceId resource_id_;
318 unsigned image_id_; 320 gfx::GpuMemoryBuffer* gpu_memory_buffer_;
319 void* gpu_memory_buffer_;
320 int stride_;
321 321
322 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGpuMemoryBuffer); 322 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGpuMemoryBuffer);
323 }; 323 };
324 324
325 class CC_EXPORT ScopedWriteLockGr { 325 class CC_EXPORT ScopedWriteLockGr {
326 public: 326 public:
327 ScopedWriteLockGr(ResourceProvider* resource_provider, 327 ScopedWriteLockGr(ResourceProvider* resource_provider,
328 ResourceProvider::ResourceId resource_id); 328 ResourceProvider::ResourceId resource_id);
329 ~ScopedWriteLockGr(); 329 ~ScopedWriteLockGr();
330 330
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 GLenum filter; 449 GLenum filter;
450 unsigned image_id; 450 unsigned image_id;
451 unsigned bound_image_id; 451 unsigned bound_image_id;
452 GLenum texture_pool; 452 GLenum texture_pool;
453 GLint wrap_mode; 453 GLint wrap_mode;
454 TextureHint hint; 454 TextureHint hint;
455 ResourceType type; 455 ResourceType type;
456 ResourceFormat format; 456 ResourceFormat format;
457 SharedBitmapId shared_bitmap_id; 457 SharedBitmapId shared_bitmap_id;
458 SharedBitmap* shared_bitmap; 458 SharedBitmap* shared_bitmap;
459 gfx::GpuMemoryBuffer* gpu_memory_buffer;
459 skia::RefPtr<SkSurface> sk_surface; 460 skia::RefPtr<SkSurface> sk_surface;
460 }; 461 };
461 typedef base::hash_map<ResourceId, Resource> ResourceMap; 462 typedef base::hash_map<ResourceId, Resource> ResourceMap;
462 463
463 static bool CompareResourceMapIteratorsByChildId( 464 static bool CompareResourceMapIteratorsByChildId(
464 const std::pair<ReturnedResource, ResourceMap::iterator>& a, 465 const std::pair<ReturnedResource, ResourceMap::iterator>& a,
465 const std::pair<ReturnedResource, ResourceMap::iterator>& b); 466 const std::pair<ReturnedResource, ResourceMap::iterator>& b);
466 467
467 struct Child { 468 struct Child {
468 Child(); 469 Child();
469 ~Child(); 470 ~Child();
470 471
471 ResourceIdMap child_to_parent_map; 472 ResourceIdMap child_to_parent_map;
472 ResourceIdMap parent_to_child_map; 473 ResourceIdMap parent_to_child_map;
473 ReturnCallback return_callback; 474 ReturnCallback return_callback;
474 ResourceIdSet in_use_resources; 475 ResourceIdSet in_use_resources;
475 bool marked_for_deletion; 476 bool marked_for_deletion;
476 }; 477 };
477 typedef base::hash_map<int, Child> ChildMap; 478 typedef base::hash_map<int, Child> ChildMap;
478 479
479 bool ReadLockFenceHasPassed(const Resource* resource) { 480 bool ReadLockFenceHasPassed(const Resource* resource) {
480 return !resource->read_lock_fence.get() || 481 return !resource->read_lock_fence.get() ||
481 resource->read_lock_fence->HasPassed(); 482 resource->read_lock_fence->HasPassed();
482 } 483 }
483 484
484 ResourceProvider(OutputSurface* output_surface, 485 ResourceProvider(OutputSurface* output_surface,
485 SharedBitmapManager* shared_bitmap_manager, 486 SharedBitmapManager* shared_bitmap_manager,
487 GpuMemoryBufferManager* gpu_memory_buffer_manager,
486 BlockingTaskRunner* blocking_main_thread_task_runner, 488 BlockingTaskRunner* blocking_main_thread_task_runner,
487 int highp_threshold_min, 489 int highp_threshold_min,
488 bool use_rgba_4444_texture_format, 490 bool use_rgba_4444_texture_format,
489 size_t id_allocation_chunk_size, 491 size_t id_allocation_chunk_size,
490 bool use_distance_field_text); 492 bool use_distance_field_text);
491 493
492 void CleanUpGLIfNeeded(); 494 void CleanUpGLIfNeeded();
493 495
494 Resource* GetResource(ResourceId id); 496 Resource* GetResource(ResourceId id);
495 const Resource* LockForRead(ResourceId id); 497 const Resource* LockForRead(ResourceId id);
(...skipping 28 matching lines...) Expand all
524 // specified filter for both minification and magnification. Returns the 526 // specified filter for both minification and magnification. Returns the
525 // texture target used. The resource must be locked for reading. 527 // texture target used. The resource must be locked for reading.
526 GLenum BindForSampling(ResourceId resource_id, GLenum unit, GLenum filter); 528 GLenum BindForSampling(ResourceId resource_id, GLenum unit, GLenum filter);
527 529
528 // Returns NULL if the output_surface_ does not have a ContextProvider. 530 // Returns NULL if the output_surface_ does not have a ContextProvider.
529 gpu::gles2::GLES2Interface* ContextGL() const; 531 gpu::gles2::GLES2Interface* ContextGL() const;
530 class GrContext* GrContext() const; 532 class GrContext* GrContext() const;
531 533
532 OutputSurface* output_surface_; 534 OutputSurface* output_surface_;
533 SharedBitmapManager* shared_bitmap_manager_; 535 SharedBitmapManager* shared_bitmap_manager_;
536 GpuMemoryBufferManager* gpu_memory_buffer_manager_;
534 BlockingTaskRunner* blocking_main_thread_task_runner_; 537 BlockingTaskRunner* blocking_main_thread_task_runner_;
535 bool lost_output_surface_; 538 bool lost_output_surface_;
536 int highp_threshold_min_; 539 int highp_threshold_min_;
537 ResourceId next_id_; 540 ResourceId next_id_;
538 ResourceMap resources_; 541 ResourceMap resources_;
539 int next_child_; 542 int next_child_;
540 ChildMap children_; 543 ChildMap children_;
541 544
542 ResourceType default_resource_type_; 545 ResourceType default_resource_type_;
543 bool use_texture_storage_ext_; 546 bool use_texture_storage_ext_;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 return format_gl_data_format[format]; 612 return format_gl_data_format[format];
610 } 613 }
611 614
612 inline GLenum GLInternalFormat(ResourceFormat format) { 615 inline GLenum GLInternalFormat(ResourceFormat format) {
613 return GLDataFormat(format); 616 return GLDataFormat(format);
614 } 617 }
615 618
616 } // namespace cc 619 } // namespace cc
617 620
618 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ 621 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool_unittest.cc ('k') | cc/resources/resource_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698