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

Side by Side Diff: cc/resource_provider.h

Issue 11622008: cc: Defer texture allocation (to allow async allocations). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase. Rebase test fixes. Created 7 years, 11 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/layer_tree_host_impl_unittest.cc ('k') | cc/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_RESOURCE_PROVIDER_H_ 5 #ifndef CC_RESOURCE_PROVIDER_H_
6 #define CC_RESOURCE_PROVIDER_H_ 6 #define CC_RESOURCE_PROVIDER_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 uint8_t* mapPixelBuffer(ResourceId id); 229 uint8_t* mapPixelBuffer(ResourceId id);
230 void unmapPixelBuffer(ResourceId id); 230 void unmapPixelBuffer(ResourceId id);
231 231
232 // Update pixels from acquired pixel buffer. 232 // Update pixels from acquired pixel buffer.
233 void setPixelsFromBuffer(ResourceId id); 233 void setPixelsFromBuffer(ResourceId id);
234 234
235 // Asynchronously update pixels from acquired pixel buffer. 235 // Asynchronously update pixels from acquired pixel buffer.
236 void beginSetPixels(ResourceId id); 236 void beginSetPixels(ResourceId id);
237 bool didSetPixelsComplete(ResourceId id); 237 bool didSetPixelsComplete(ResourceId id);
238 238
239 // For tests only! This prevents detecting uninitialized reads.
240 // Use setPixels or lockForWrite to allocate implicitly.
241 void allocateForTesting(ResourceId id);
242
239 private: 243 private:
240 struct Resource { 244 struct Resource {
241 Resource(); 245 Resource();
242 ~Resource(); 246 ~Resource();
243 Resource(unsigned textureId, const gfx::Size& size, GLenum format, GLenu m filter); 247 Resource(unsigned textureId, const gfx::Size& size, GLenum format, GLenu m filter);
244 Resource(uint8_t* pixels, const gfx::Size& size, GLenum format, GLenum f ilter); 248 Resource(uint8_t* pixels, const gfx::Size& size, GLenum format, GLenum f ilter);
245 249
246 unsigned glId; 250 unsigned glId;
247 // Pixel buffer used for set pixels without unnecessary copying. 251 // Pixel buffer used for set pixels without unnecessary copying.
248 unsigned glPixelBufferId; 252 unsigned glPixelBufferId;
249 // Query used to determine when asynchronous set pixels complete. 253 // Query used to determine when asynchronous set pixels complete.
250 unsigned glUploadQueryId; 254 unsigned glUploadQueryId;
251 Mailbox mailbox; 255 Mailbox mailbox;
252 base::Callback<void(unsigned)> mailboxReleaseCallback; 256 base::Callback<void(unsigned)> mailboxReleaseCallback;
253 uint8_t* pixels; 257 uint8_t* pixels;
254 uint8_t* pixelBuffer; 258 uint8_t* pixelBuffer;
255 int lockForReadCount; 259 int lockForReadCount;
256 bool lockedForWrite; 260 bool lockedForWrite;
257 bool external; 261 bool external;
258 bool exported; 262 bool exported;
259 bool markedForDeletion; 263 bool markedForDeletion;
260 bool pendingSetPixels; 264 bool pendingSetPixels;
265 bool allocated;
261 gfx::Size size; 266 gfx::Size size;
262 GLenum format; 267 GLenum format;
263 // TODO(skyostil): Use a separate sampler object for filter state. 268 // TODO(skyostil): Use a separate sampler object for filter state.
264 GLenum filter; 269 GLenum filter;
265 ResourceType type; 270 ResourceType type;
266 }; 271 };
267 typedef base::hash_map<ResourceId, Resource> ResourceMap; 272 typedef base::hash_map<ResourceId, Resource> ResourceMap;
268 struct Child { 273 struct Child {
269 Child(); 274 Child();
270 ~Child(); 275 ~Child();
271 276
272 ResourceIdMap childToParentMap; 277 ResourceIdMap childToParentMap;
273 ResourceIdMap parentToChildMap; 278 ResourceIdMap parentToChildMap;
274 }; 279 };
275 typedef base::hash_map<int, Child> ChildMap; 280 typedef base::hash_map<int, Child> ChildMap;
276 281
277 explicit ResourceProvider(OutputSurface*); 282 explicit ResourceProvider(OutputSurface*);
278 bool initialize(); 283 bool initialize();
279 284
280 const Resource* lockForRead(ResourceId); 285 const Resource* lockForRead(ResourceId);
281 void unlockForRead(ResourceId); 286 void unlockForRead(ResourceId);
282 const Resource* lockForWrite(ResourceId); 287 const Resource* lockForWrite(ResourceId);
283 void unlockForWrite(ResourceId); 288 void unlockForWrite(ResourceId);
284 static void populateSkBitmapWithResource(SkBitmap*, const Resource*); 289 static void populateSkBitmapWithResource(SkBitmap*, const Resource*);
285 290
286 bool transferResource(WebKit::WebGraphicsContext3D*, ResourceId, Transferabl eResource*); 291 bool transferResource(WebKit::WebGraphicsContext3D*, ResourceId, Transferabl eResource*);
287 void deleteResourceInternal(ResourceMap::iterator it); 292 void deleteResourceInternal(ResourceMap::iterator it);
293 void lazyAllocate(Resource*);
288 294
289 OutputSurface* m_outputSurface; 295 OutputSurface* m_outputSurface;
290 ResourceId m_nextId; 296 ResourceId m_nextId;
291 ResourceMap m_resources; 297 ResourceMap m_resources;
292 int m_nextChild; 298 int m_nextChild;
293 ChildMap m_children; 299 ChildMap m_children;
294 300
295 ResourceType m_defaultResourceType; 301 ResourceType m_defaultResourceType;
296 bool m_useTextureStorageExt; 302 bool m_useTextureStorageExt;
297 bool m_useTextureUsageHint; 303 bool m_useTextureUsageHint;
298 bool m_useShallowFlush; 304 bool m_useShallowFlush;
299 scoped_ptr<TextureUploader> m_textureUploader; 305 scoped_ptr<TextureUploader> m_textureUploader;
300 scoped_ptr<AcceleratedTextureCopier> m_textureCopier; 306 scoped_ptr<AcceleratedTextureCopier> m_textureCopier;
301 int m_maxTextureSize; 307 int m_maxTextureSize;
302 GLenum m_bestTextureFormat; 308 GLenum m_bestTextureFormat;
303 309
304 base::ThreadChecker m_threadChecker; 310 base::ThreadChecker m_threadChecker;
305 311
306 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); 312 DISALLOW_COPY_AND_ASSIGN(ResourceProvider);
307 }; 313 };
308 314
309 } 315 }
310 316
311 #endif // CC_RESOURCE_PROVIDER_H_ 317 #endif // CC_RESOURCE_PROVIDER_H_
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl_unittest.cc ('k') | cc/resource_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698