OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |