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

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

Issue 2110083004: Partial raster for GPU (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@partialuma2
Patch Set: hi Created 4 years, 5 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
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_POOL_H_ 5 #ifndef CC_RESOURCES_RESOURCE_POOL_H_
6 #define CC_RESOURCES_RESOURCE_POOL_H_ 6 #define CC_RESOURCES_RESOURCE_POOL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 24 matching lines...) Expand all
35 static std::unique_ptr<ResourcePool> Create( 35 static std::unique_ptr<ResourcePool> Create(
36 ResourceProvider* resource_provider, 36 ResourceProvider* resource_provider,
37 base::SingleThreadTaskRunner* task_runner) { 37 base::SingleThreadTaskRunner* task_runner) {
38 return base::WrapUnique( 38 return base::WrapUnique(
39 new ResourcePool(resource_provider, task_runner, false)); 39 new ResourcePool(resource_provider, task_runner, false));
40 } 40 }
41 41
42 ~ResourcePool() override; 42 ~ResourcePool() override;
43 43
44 Resource* AcquireResource(const gfx::Size& size, ResourceFormat format); 44 Resource* AcquireResource(const gfx::Size& size, ResourceFormat format);
45 Resource* TryAcquireResourceWithContentId(uint64_t content_id); 45
46 void ReleaseResource(Resource* resource, uint64_t content_id); 46 // Tries to acquire the resource with |previous_content_id| for us in partial
47 // raster. If successful, this function will retun the invalidated rect which
48 // must be re-rastered in |total_invalidated_rect|.
49 Resource* TryAcquireResourceForPartialRaster(
50 uint64_t new_content_id,
51 const gfx::Rect& new_invalidated_rect,
52 uint64_t previous_content_id,
53 gfx::Rect* total_invalidated_rect);
54
55 // Called when a resource's content has been fully replaced (and is completely
56 // valid). Updates the resource's content ID to its new value.
57 void OnContentReplaced(ResourceId resource_id, uint64_t content_id);
58 void ReleaseResource(Resource* resource);
47 59
48 void SetResourceUsageLimits(size_t max_memory_usage_bytes, 60 void SetResourceUsageLimits(size_t max_memory_usage_bytes,
49 size_t max_resource_count); 61 size_t max_resource_count);
50 62
51 void ReduceResourceUsage(); 63 void ReduceResourceUsage();
52 void CheckBusyResources(); 64 void CheckBusyResources();
53 65
54 size_t memory_usage_bytes() const { return in_use_memory_usage_bytes_; } 66 size_t memory_usage_bytes() const { return in_use_memory_usage_bytes_; }
55 size_t resource_count() const { return in_use_resources_.size(); } 67 size_t resource_count() const { return in_use_resources_.size(); }
56 68
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, 100 void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd,
89 const ResourceProvider* resource_provider, 101 const ResourceProvider* resource_provider,
90 bool is_free) const; 102 bool is_free) const;
91 103
92 uint64_t content_id() const { return content_id_; } 104 uint64_t content_id() const { return content_id_; }
93 void set_content_id(uint64_t content_id) { content_id_ = content_id; } 105 void set_content_id(uint64_t content_id) { content_id_ = content_id; }
94 106
95 base::TimeTicks last_usage() const { return last_usage_; } 107 base::TimeTicks last_usage() const { return last_usage_; }
96 void set_last_usage(base::TimeTicks time) { last_usage_ = time; } 108 void set_last_usage(base::TimeTicks time) { last_usage_ = time; }
97 109
110 gfx::Rect invalidated_rect() const { return invalidated_rect_; }
111 void set_invalidated_rect(const gfx::Rect& invalidated_rect) {
112 invalidated_rect_ = invalidated_rect;
113 }
114
98 private: 115 private:
99 explicit PoolResource(ResourceProvider* resource_provider) 116 explicit PoolResource(ResourceProvider* resource_provider)
100 : ScopedResource(resource_provider), content_id_(0) {} 117 : ScopedResource(resource_provider), content_id_(0) {}
101 uint64_t content_id_; 118 uint64_t content_id_;
102 base::TimeTicks last_usage_; 119 base::TimeTicks last_usage_;
120 gfx::Rect invalidated_rect_;
103 }; 121 };
104 122
105 void DidFinishUsingResource(std::unique_ptr<PoolResource> resource); 123 void DidFinishUsingResource(std::unique_ptr<PoolResource> resource);
106 void DeleteResource(std::unique_ptr<PoolResource> resource); 124 void DeleteResource(std::unique_ptr<PoolResource> resource);
107 125
108 // Functions which manage periodic eviction of expired resources. 126 // Functions which manage periodic eviction of expired resources.
109 void ScheduleEvictExpiredResourcesIn(base::TimeDelta time_from_now); 127 void ScheduleEvictExpiredResourcesIn(base::TimeDelta time_from_now);
110 void EvictExpiredResources(); 128 void EvictExpiredResources();
111 void EvictResourcesNotUsedSince(base::TimeTicks time_limit); 129 void EvictResourcesNotUsedSince(base::TimeTicks time_limit);
112 bool HasEvictableResources() const; 130 bool HasEvictableResources() const;
113 base::TimeTicks GetUsageTimeForLRUResource() const; 131 base::TimeTicks GetUsageTimeForLRUResource() const;
114 132
115 ResourceProvider* resource_provider_; 133 ResourceProvider* resource_provider_;
116 bool use_gpu_memory_buffers_; 134 bool use_gpu_memory_buffers_;
117 size_t max_memory_usage_bytes_; 135 size_t max_memory_usage_bytes_;
118 size_t max_resource_count_; 136 size_t max_resource_count_;
119 size_t in_use_memory_usage_bytes_; 137 size_t in_use_memory_usage_bytes_;
120 size_t total_memory_usage_bytes_; 138 size_t total_memory_usage_bytes_;
121 size_t total_resource_count_; 139 size_t total_resource_count_;
122 140
123 // Holds most recently used resources at the front of the queue. 141 // Holds most recently used resources at the front of the queue.
124 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>; 142 using ResourceDeque = std::deque<std::unique_ptr<PoolResource>>;
125 ResourceDeque unused_resources_; 143 ResourceDeque unused_resources_;
126 ResourceDeque busy_resources_; 144 ResourceDeque busy_resources_;
127 145
128 std::map<ResourceId, std::unique_ptr<PoolResource>> in_use_resources_; 146 using InUseResourceMap = std::map<ResourceId, std::unique_ptr<PoolResource>>;
147 InUseResourceMap in_use_resources_;
129 148
130 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 149 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
131 bool evict_expired_resources_pending_; 150 bool evict_expired_resources_pending_;
132 base::TimeDelta resource_expiration_delay_; 151 base::TimeDelta resource_expiration_delay_;
133 152
134 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_; 153 base::WeakPtrFactory<ResourcePool> weak_ptr_factory_;
135 154
136 DISALLOW_COPY_AND_ASSIGN(ResourcePool); 155 DISALLOW_COPY_AND_ASSIGN(ResourcePool);
137 }; 156 };
138 157
139 } // namespace cc 158 } // namespace cc
140 159
141 #endif // CC_RESOURCES_RESOURCE_POOL_H_ 160 #endif // CC_RESOURCES_RESOURCE_POOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698