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

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

Issue 1951193002: cc: Add mailbox support to ResourceProvider write locks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@worker_context_stream
Patch Set: compile error fix Created 4 years, 7 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_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 <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 const ReturnedResourceArray& transferable_resources); 213 const ReturnedResourceArray& transferable_resources);
214 214
215 // The following lock classes are part of the ResourceProvider API and are 215 // The following lock classes are part of the ResourceProvider API and are
216 // needed to read and write the resource contents. The user must ensure 216 // needed to read and write the resource contents. The user must ensure
217 // that they only use GL locks on GL resources, etc, and this is enforced 217 // that they only use GL locks on GL resources, etc, and this is enforced
218 // by assertions. 218 // by assertions.
219 class CC_EXPORT ScopedReadLockGL { 219 class CC_EXPORT ScopedReadLockGL {
220 public: 220 public:
221 ScopedReadLockGL(ResourceProvider* resource_provider, 221 ScopedReadLockGL(ResourceProvider* resource_provider,
222 ResourceId resource_id); 222 ResourceId resource_id);
223 virtual ~ScopedReadLockGL(); 223 ~ScopedReadLockGL();
224 224
225 unsigned texture_id() const { return resource_->gl_id; } 225 unsigned texture_id() const { return texture_id_; }
226 GLenum target() const { return resource_->target; } 226 GLenum target() const { return target_; }
227 const gfx::Size& texture_size() const { return resource_->size; } 227 const gfx::Size& size() const { return size_; }
228 228
229 protected: 229 private:
230 ResourceProvider* resource_provider_; 230 ResourceProvider* resource_provider_;
231 ResourceId resource_id_; 231 ResourceId resource_id_;
232 232 unsigned texture_id_;
233 private: 233 GLenum target_;
234 const ResourceProvider::Resource* resource_; 234 ResourceFormat format_;
235 gfx::Size size_;
235 236
236 DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGL); 237 DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGL);
237 }; 238 };
238 239
239 class CC_EXPORT ScopedSamplerGL : public ScopedReadLockGL { 240 class CC_EXPORT ScopedSamplerGL {
240 public: 241 public:
241 ScopedSamplerGL(ResourceProvider* resource_provider, 242 ScopedSamplerGL(ResourceProvider* resource_provider,
242 ResourceId resource_id, 243 ResourceId resource_id,
243 GLenum filter); 244 GLenum filter);
244 ScopedSamplerGL(ResourceProvider* resource_provider, 245 ScopedSamplerGL(ResourceProvider* resource_provider,
245 ResourceId resource_id, 246 ResourceId resource_id,
246 GLenum unit, 247 GLenum unit,
247 GLenum filter); 248 GLenum filter);
248 ~ScopedSamplerGL() override; 249 ~ScopedSamplerGL();
249 250
251 unsigned texture_id() const { return resource_lock_.texture_id(); }
250 GLenum target() const { return target_; } 252 GLenum target() const { return target_; }
251 253
252 private: 254 private:
255 ScopedReadLockGL resource_lock_;
253 GLenum unit_; 256 GLenum unit_;
254 GLenum target_; 257 GLenum target_;
255 258
256 DISALLOW_COPY_AND_ASSIGN(ScopedSamplerGL); 259 DISALLOW_COPY_AND_ASSIGN(ScopedSamplerGL);
257 }; 260 };
258 261
259 class CC_EXPORT ScopedWriteLockGL { 262 class CC_EXPORT ScopedWriteLockGL {
260 public: 263 public:
261 ScopedWriteLockGL(ResourceProvider* resource_provider, 264 ScopedWriteLockGL(ResourceProvider* resource_provider,
262 ResourceId resource_id); 265 ResourceId resource_id,
266 bool create_mailbox);
263 ~ScopedWriteLockGL(); 267 ~ScopedWriteLockGL();
264 268
265 unsigned texture_id() const { return texture_id_; } 269 unsigned texture_id() const { return texture_id_; }
270 GLenum target() const { return target_; }
271 ResourceFormat format() const { return format_; }
272 const gfx::Size& size() const { return size_; }
266 273
267 void UpdateResourceSyncToken(const gpu::SyncToken& sync_token) { 274 const TextureMailbox& mailbox() const { return mailbox_; }
268 set_sync_token_ = true; 275
276 void set_sync_token(const gpu::SyncToken& sync_token) {
269 sync_token_ = sync_token; 277 sync_token_ = sync_token;
270 } 278 }
271 279
272 private: 280 private:
273 ResourceProvider* resource_provider_; 281 ResourceProvider* resource_provider_;
274 ResourceProvider::Resource* resource_; 282 ResourceId resource_id_;
275 unsigned texture_id_; 283 unsigned texture_id_;
276 bool set_sync_token_; 284 GLenum target_;
285 ResourceFormat format_;
286 gfx::Size size_;
287 TextureMailbox mailbox_;
277 gpu::SyncToken sync_token_; 288 gpu::SyncToken sync_token_;
289 base::ThreadChecker thread_checker_;
278 290
279 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGL); 291 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGL);
280 }; 292 };
281 293
294 class CC_EXPORT ScopedTextureProvider {
295 public:
296 ScopedTextureProvider(gpu::gles2::GLES2Interface* gl,
297 ScopedWriteLockGL* resource_lock,
298 bool use_mailbox);
299 ~ScopedTextureProvider();
300
301 unsigned texture_id() const { return texture_id_; }
302
303 private:
304 gpu::gles2::GLES2Interface* gl_;
305 bool use_mailbox_;
306 unsigned texture_id_;
307
308 DISALLOW_COPY_AND_ASSIGN(ScopedTextureProvider);
309 };
310
311 class CC_EXPORT ScopedSkSurfaceProvider {
312 public:
313 ScopedSkSurfaceProvider(ContextProvider* context_provider,
314 ScopedWriteLockGL* resource_lock,
315 bool use_mailbox,
316 bool use_distance_field_text,
317 bool can_use_lcd_text,
318 int msaa_sample_count);
319 ~ScopedSkSurfaceProvider();
320
321 SkSurface* sk_surface() { return sk_surface_.get(); }
322
323 private:
324 ScopedTextureProvider texture_provider_;
325 sk_sp<SkSurface> sk_surface_;
326
327 DISALLOW_COPY_AND_ASSIGN(ScopedSkSurfaceProvider);
328 };
329
282 class CC_EXPORT ScopedReadLockSoftware { 330 class CC_EXPORT ScopedReadLockSoftware {
283 public: 331 public:
284 ScopedReadLockSoftware(ResourceProvider* resource_provider, 332 ScopedReadLockSoftware(ResourceProvider* resource_provider,
285 ResourceId resource_id); 333 ResourceId resource_id);
286 ~ScopedReadLockSoftware(); 334 ~ScopedReadLockSoftware();
287 335
288 const SkBitmap* sk_bitmap() const { 336 const SkBitmap* sk_bitmap() const {
289 DCHECK(valid()); 337 DCHECK(valid());
290 return &sk_bitmap_; 338 return &sk_bitmap_;
291 } 339 }
(...skipping 12 matching lines...) Expand all
304 public: 352 public:
305 ScopedWriteLockSoftware(ResourceProvider* resource_provider, 353 ScopedWriteLockSoftware(ResourceProvider* resource_provider,
306 ResourceId resource_id); 354 ResourceId resource_id);
307 ~ScopedWriteLockSoftware(); 355 ~ScopedWriteLockSoftware();
308 356
309 SkBitmap& sk_bitmap() { return sk_bitmap_; } 357 SkBitmap& sk_bitmap() { return sk_bitmap_; }
310 bool valid() const { return !!sk_bitmap_.getPixels(); } 358 bool valid() const { return !!sk_bitmap_.getPixels(); }
311 359
312 private: 360 private:
313 ResourceProvider* resource_provider_; 361 ResourceProvider* resource_provider_;
314 ResourceProvider::Resource* resource_; 362 ResourceId resource_id_;
315 SkBitmap sk_bitmap_; 363 SkBitmap sk_bitmap_;
316 base::ThreadChecker thread_checker_; 364 base::ThreadChecker thread_checker_;
317 365
318 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware); 366 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware);
319 }; 367 };
320 368
321 class CC_EXPORT ScopedWriteLockGpuMemoryBuffer { 369 class CC_EXPORT ScopedWriteLockGpuMemoryBuffer {
322 public: 370 public:
323 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider, 371 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
324 ResourceId resource_id); 372 ResourceId resource_id);
325 ~ScopedWriteLockGpuMemoryBuffer(); 373 ~ScopedWriteLockGpuMemoryBuffer();
326 374
327 gfx::GpuMemoryBuffer* GetGpuMemoryBuffer(); 375 gfx::GpuMemoryBuffer* GetGpuMemoryBuffer();
328 376
329 private: 377 private:
330 ResourceProvider* resource_provider_; 378 ResourceProvider* resource_provider_;
331 ResourceProvider::Resource* resource_; 379 ResourceId resource_id_;
380 ResourceFormat format_;
381 gfx::Size size_;
332 std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_; 382 std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_;
333 base::ThreadChecker thread_checker_; 383 base::ThreadChecker thread_checker_;
334 384
335 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGpuMemoryBuffer); 385 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGpuMemoryBuffer);
336 }; 386 };
337 387
338 class CC_EXPORT ScopedReadLockGpuMemoryBuffer { 388 class CC_EXPORT ScopedReadLockGpuMemoryBuffer {
339 public: 389 public:
340 ScopedReadLockGpuMemoryBuffer(ResourceProvider* resource_provider, 390 ScopedReadLockGpuMemoryBuffer(ResourceProvider* resource_provider,
341 ResourceId resource_id); 391 ResourceId resource_id);
342 ~ScopedReadLockGpuMemoryBuffer(); 392 ~ScopedReadLockGpuMemoryBuffer();
343 393
344 // This may return nullptr. 394 // This may return nullptr.
345 gfx::GpuMemoryBuffer* GetGpuMemoryBuffer() const; 395 gfx::GpuMemoryBuffer* gpu_memory_buffer() const {
396 return gpu_memory_buffer_;
397 }
346 398
347 // This returns the GL texture that is backed by a GL image bound to the 399 // This returns the GL texture that is backed by a GL image bound to the
348 // resource's GpuMemoryBuffer. 400 // resource's GpuMemoryBuffer.
349 unsigned GetTextureId() const; 401 unsigned texture_id() const { return texture_id_; }
350 402
351 private: 403 private:
352 ResourceProvider* resource_provider_; 404 ResourceProvider* resource_provider_;
353 ResourceId resource_id_; 405 ResourceId resource_id_;
354 const ResourceProvider::Resource* resource_; 406 gfx::GpuMemoryBuffer* gpu_memory_buffer_;
407 unsigned texture_id_;
355 base::ThreadChecker thread_checker_; 408 base::ThreadChecker thread_checker_;
356 409
357 DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGpuMemoryBuffer); 410 DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGpuMemoryBuffer);
358 }; 411 };
359 412
360 class CC_EXPORT ScopedWriteLockGr {
361 public:
362 ScopedWriteLockGr(ResourceProvider* resource_provider,
363 ResourceId resource_id);
364 ~ScopedWriteLockGr();
365
366 void InitSkSurface(GrContext* gr_context,
367 bool use_distance_field_text,
368 bool can_use_lcd_text,
369 int msaa_sample_count);
370 void ReleaseSkSurface();
371
372 SkSurface* sk_surface() { return sk_surface_.get(); }
373
374 gfx::Size GetResourceSize() const { return resource_->size; }
375
376 void UpdateResourceSyncToken(const gpu::SyncToken& sync_token) {
377 set_sync_token_ = true;
378 sync_token_ = sync_token;
379 }
380
381 private:
382 ResourceProvider* resource_provider_;
383 ResourceProvider::Resource* resource_;
384 base::ThreadChecker thread_checker_;
385 sk_sp<SkSurface> sk_surface_;
386 bool set_sync_token_;
387 gpu::SyncToken sync_token_;
388
389 DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGr);
390 };
391
392 class Fence : public base::RefCounted<Fence> { 413 class Fence : public base::RefCounted<Fence> {
393 public: 414 public:
394 Fence() {} 415 Fence() {}
395 416
396 virtual void Set() = 0; 417 virtual void Set() = 0;
397 virtual bool HasPassed() = 0; 418 virtual bool HasPassed() = 0;
398 virtual void Wait() = 0; 419 virtual void Wait() = 0;
399 420
400 protected: 421 protected:
401 friend class base::RefCounted<Fence>; 422 friend class base::RefCounted<Fence>;
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 // A process-unique ID used for disambiguating memory dumps from different 716 // A process-unique ID used for disambiguating memory dumps from different
696 // resource providers. 717 // resource providers.
697 int tracing_id_; 718 int tracing_id_;
698 719
699 DISALLOW_COPY_AND_ASSIGN(ResourceProvider); 720 DISALLOW_COPY_AND_ASSIGN(ResourceProvider);
700 }; 721 };
701 722
702 } // namespace cc 723 } // namespace cc
703 724
704 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_ 725 #endif // CC_RESOURCES_RESOURCE_PROVIDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698