| 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 |