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: content/common/gpu/gpu_memory_manager.h

Issue 11293194: ui: Prefer +/- operators to apply offsets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: floats Created 8 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_ 5 #ifndef CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_
6 #define CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_ 6 #define CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_
7 7
8 #if defined(ENABLE_GPU) 8 #if defined(ENABLE_GPU)
9 9
10 #include <set> 10 #include <set>
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest, 96 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
97 TestForegroundStubsGetBonusAllocation); 97 TestForegroundStubsGetBonusAllocation);
98 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest, 98 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
99 TestUpdateAvailableGpuMemory); 99 TestUpdateAvailableGpuMemory);
100 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest, 100 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
101 GpuMemoryAllocationCompareTests); 101 GpuMemoryAllocationCompareTests);
102 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest, 102 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
103 StubMemoryStatsForLastManageTests); 103 StubMemoryStatsForLastManageTests);
104 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest, 104 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
105 TestManagedUsageTracking); 105 TestManagedUsageTracking);
106 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
107 TestBackgroundCutoff);
108 FRIEND_TEST_ALL_PREFIXES(GpuMemoryManagerTest,
109 TestBackgroundMru);
106 110
107 struct ClientState { 111 struct ClientState {
108 ClientState(GpuMemoryManagerClient* client, 112 ClientState(GpuMemoryManagerClient* client,
109 bool has_surface, 113 bool has_surface,
110 bool visible, 114 bool visible,
111 base::TimeTicks last_used_time); 115 base::TimeTicks last_used_time);
112 // The client to send allocations to. 116 // The client to send allocations to.
113 GpuMemoryManagerClient* client; 117 GpuMemoryManagerClient* client;
114 118
115 // Offscreen commandbuffers will not have a surface. 119 // Offscreen commandbuffers will not have a surface.
(...skipping 18 matching lines...) Expand all
134 ClientState* rhs); 138 ClientState* rhs);
135 }; 139 };
136 140
137 typedef std::map<GpuMemoryManagerClient*, ClientState*> ClientMap; 141 typedef std::map<GpuMemoryManagerClient*, ClientState*> ClientMap;
138 142
139 typedef std::vector<ClientState*> ClientStateVector; 143 typedef std::vector<ClientState*> ClientStateVector;
140 144
141 void Manage(); 145 void Manage();
142 void SetClientsHibernatedState(const ClientStateVector& clients) const; 146 void SetClientsHibernatedState(const ClientStateVector& clients) const;
143 size_t GetVisibleClientAllocation(const ClientStateVector& clients) const; 147 size_t GetVisibleClientAllocation(const ClientStateVector& clients) const;
148 size_t GetCurrentBackgroundedAvailableGpuMemory() const;
144 149
145 // Update the amount of GPU memory we think we have in the system, based 150 // Update the amount of GPU memory we think we have in the system, based
146 // on what the stubs' contexts report. 151 // on what the stubs' contexts report.
147 void UpdateAvailableGpuMemory(const ClientStateVector& clients); 152 void UpdateAvailableGpuMemory(const ClientStateVector& clients);
153 void UpdateBackgroundedAvailableGpuMemory();
148 154
149 // The amount of video memory which is available for allocation. 155 // The amount of video memory which is available for allocation.
150 size_t GetAvailableGpuMemory() const; 156 size_t GetAvailableGpuMemory() const;
151 157
152 // Default per-OS value for the amount of available GPU memory, used 158 // Minimum value of available GPU memory, no matter how little the GPU
153 // if we can't query the driver for an exact value. 159 // reports. This is the default value.
154 size_t GetDefaultAvailableGpuMemory() const; 160 size_t GetDefaultAvailableGpuMemory() const;
155 161
156 // Maximum cap on total GPU memory, no matter how much the GPU reports. 162 // Maximum cap on total GPU memory, no matter how much the GPU reports.
157 size_t GetMaximumTotalGpuMemory() const; 163 size_t GetMaximumTotalGpuMemory() const;
158 164
159 // The maximum and minimum amount of memory that a tab may be assigned. 165 // The maximum and minimum amount of memory that a tab may be assigned.
160 size_t GetMaximumTabAllocation() const; 166 size_t GetMaximumTabAllocation() const;
161 size_t GetMinimumTabAllocation() const; 167 size_t GetMinimumTabAllocation() const;
162 168
163 // Get a reasonable memory limit from a viewport's surface area. 169 // Get a reasonable memory limit from a viewport's surface area.
164 static size_t CalcAvailableFromViewportArea(int viewport_area); 170 static size_t CalcAvailableFromViewportArea(int viewport_area);
165 static size_t CalcAvailableFromGpuTotal(size_t total_gpu_memory); 171 static size_t CalcAvailableFromGpuTotal(size_t total_gpu_memory);
166 172
167 // Interfaces for testing 173 // Interfaces for testing
168 void TestingSetClientVisible(GpuMemoryManagerClient* client, bool visible); 174 void TestingSetClientVisible(GpuMemoryManagerClient* client, bool visible);
169 void TestingSetClientLastUsedTime(GpuMemoryManagerClient* client, 175 void TestingSetClientLastUsedTime(GpuMemoryManagerClient* client,
170 base::TimeTicks last_used_time); 176 base::TimeTicks last_used_time);
171 void TestingSetClientHasSurface(GpuMemoryManagerClient* client, 177 void TestingSetClientHasSurface(GpuMemoryManagerClient* client,
172 bool has_surface); 178 bool has_surface);
173 bool TestingCompareClients(GpuMemoryManagerClient* lhs, 179 bool TestingCompareClients(GpuMemoryManagerClient* lhs,
174 GpuMemoryManagerClient* rhs) const; 180 GpuMemoryManagerClient* rhs) const;
175 void TestingDisableScheduleManage() { disable_schedule_manage_ = true; } 181 void TestingDisableScheduleManage() { disable_schedule_manage_ = true; }
182 void TestingSetAvailableGpuMemory(size_t bytes) {
183 bytes_available_gpu_memory_ = bytes;
184 bytes_available_gpu_memory_overridden_ = true;
185 }
186
187 void TestingSetBackgroundedAvailableGpuMemory(size_t bytes) {
188 bytes_backgrounded_available_gpu_memory_ = bytes;
189 }
176 190
177 // All clients of this memory manager which have callbacks we 191 // All clients of this memory manager which have callbacks we
178 // can use to adjust memory usage 192 // can use to adjust memory usage
179 ClientMap clients_; 193 ClientMap clients_;
180 194
181 // All context groups' tracking structures 195 // All context groups' tracking structures
182 std::set<GpuMemoryTrackingGroup*> tracking_groups_; 196 std::set<GpuMemoryTrackingGroup*> tracking_groups_;
183 197
184 base::CancelableClosure delayed_manage_callback_; 198 base::CancelableClosure delayed_manage_callback_;
185 bool manage_immediate_scheduled_; 199 bool manage_immediate_scheduled_;
186 200
187 size_t max_surfaces_with_frontbuffer_soft_limit_; 201 size_t max_surfaces_with_frontbuffer_soft_limit_;
188 202
189 // The maximum amount of memory that may be allocated for GPU resources 203 // The maximum amount of memory that may be allocated for GPU resources
190 size_t bytes_available_gpu_memory_; 204 size_t bytes_available_gpu_memory_;
191 bool bytes_available_gpu_memory_overridden_; 205 bool bytes_available_gpu_memory_overridden_;
192 206
207 // The maximum amount of memory that can be allocated for GPU resources
208 // in backgrounded renderers.
209 size_t bytes_backgrounded_available_gpu_memory_;
210
193 // The current total memory usage, and historical maximum memory usage 211 // The current total memory usage, and historical maximum memory usage
194 size_t bytes_allocated_current_; 212 size_t bytes_allocated_current_;
195 size_t bytes_allocated_managed_visible_; 213 size_t bytes_allocated_managed_visible_;
196 size_t bytes_allocated_managed_backgrounded_; 214 size_t bytes_allocated_managed_backgrounded_;
197 215
198 // The number of browser windows that exist. If we ever receive a 216 // The number of browser windows that exist. If we ever receive a
199 // GpuMsg_SetVideoMemoryWindowCount, then we use this to compute memory 217 // GpuMsg_SetVideoMemoryWindowCount, then we use this to compute memory
200 // budgets, instead of doing more complicated stub-based calculations. 218 // budgets, instead of doing more complicated stub-based calculations.
201 bool window_count_has_been_received_; 219 bool window_count_has_been_received_;
202 uint32 window_count_; 220 uint32 window_count_;
(...skipping 22 matching lines...) Expand all
225 // context is currently rendering on. Returns false if no extension exists 243 // context is currently rendering on. Returns false if no extension exists
226 // to get the exact amount of GPU memory. 244 // to get the exact amount of GPU memory.
227 virtual bool GetTotalGpuMemory(size_t* bytes) = 0; 245 virtual bool GetTotalGpuMemory(size_t* bytes) = 0;
228 }; 246 };
229 247
230 } // namespace content 248 } // namespace content
231 249
232 #endif 250 #endif
233 251
234 #endif // CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_ 252 #endif // CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698