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

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

Issue 1144523003: Rename cc::ResourceProvider::ResourceId to cc::ResourceId and move it to its own file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.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 #include "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 bool ResourceProvider::IsLost(ResourceId id) { 454 bool ResourceProvider::IsLost(ResourceId id) {
455 Resource* resource = GetResource(id); 455 Resource* resource = GetResource(id);
456 return resource->lost; 456 return resource->lost;
457 } 457 }
458 458
459 bool ResourceProvider::AllowOverlay(ResourceId id) { 459 bool ResourceProvider::AllowOverlay(ResourceId id) {
460 Resource* resource = GetResource(id); 460 Resource* resource = GetResource(id);
461 return resource->allow_overlay; 461 return resource->allow_overlay;
462 } 462 }
463 463
464 ResourceProvider::ResourceId ResourceProvider::CreateResource( 464 ResourceId ResourceProvider::CreateResource(const gfx::Size& size,
465 const gfx::Size& size, 465 GLint wrap_mode,
466 GLint wrap_mode, 466 TextureHint hint,
467 TextureHint hint, 467 ResourceFormat format) {
468 ResourceFormat format) {
469 DCHECK(!size.IsEmpty()); 468 DCHECK(!size.IsEmpty());
470 switch (default_resource_type_) { 469 switch (default_resource_type_) {
471 case RESOURCE_TYPE_GL_TEXTURE: 470 case RESOURCE_TYPE_GL_TEXTURE:
472 return CreateGLTexture(size, 471 return CreateGLTexture(size,
473 GL_TEXTURE_2D, 472 GL_TEXTURE_2D,
474 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, 473 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
475 wrap_mode, 474 wrap_mode,
476 hint, 475 hint,
477 format); 476 format);
478 case RESOURCE_TYPE_BITMAP: 477 case RESOURCE_TYPE_BITMAP:
479 DCHECK_EQ(RGBA_8888, format); 478 DCHECK_EQ(RGBA_8888, format);
480 return CreateBitmap(size, wrap_mode); 479 return CreateBitmap(size, wrap_mode);
481 } 480 }
482 481
483 LOG(FATAL) << "Invalid default resource type."; 482 LOG(FATAL) << "Invalid default resource type.";
484 return 0; 483 return 0;
485 } 484 }
486 485
487 ResourceProvider::ResourceId ResourceProvider::CreateManagedResource( 486 ResourceId ResourceProvider::CreateManagedResource(const gfx::Size& size,
488 const gfx::Size& size, 487 GLenum target,
489 GLenum target, 488 GLint wrap_mode,
490 GLint wrap_mode, 489 TextureHint hint,
491 TextureHint hint, 490 ResourceFormat format) {
492 ResourceFormat format) {
493 DCHECK(!size.IsEmpty()); 491 DCHECK(!size.IsEmpty());
494 switch (default_resource_type_) { 492 switch (default_resource_type_) {
495 case RESOURCE_TYPE_GL_TEXTURE: 493 case RESOURCE_TYPE_GL_TEXTURE:
496 return CreateGLTexture(size, 494 return CreateGLTexture(size,
497 target, 495 target,
498 GL_TEXTURE_POOL_MANAGED_CHROMIUM, 496 GL_TEXTURE_POOL_MANAGED_CHROMIUM,
499 wrap_mode, 497 wrap_mode,
500 hint, 498 hint,
501 format); 499 format);
502 case RESOURCE_TYPE_BITMAP: 500 case RESOURCE_TYPE_BITMAP:
503 DCHECK_EQ(RGBA_8888, format); 501 DCHECK_EQ(RGBA_8888, format);
504 return CreateBitmap(size, wrap_mode); 502 return CreateBitmap(size, wrap_mode);
505 } 503 }
506 504
507 LOG(FATAL) << "Invalid default resource type."; 505 LOG(FATAL) << "Invalid default resource type.";
508 return 0; 506 return 0;
509 } 507 }
510 508
511 ResourceProvider::ResourceId ResourceProvider::CreateGLTexture( 509 ResourceId ResourceProvider::CreateGLTexture(const gfx::Size& size,
512 const gfx::Size& size, 510 GLenum target,
513 GLenum target, 511 GLenum texture_pool,
514 GLenum texture_pool, 512 GLint wrap_mode,
515 GLint wrap_mode, 513 TextureHint hint,
516 TextureHint hint, 514 ResourceFormat format) {
517 ResourceFormat format) {
518 DCHECK_LE(size.width(), max_texture_size_); 515 DCHECK_LE(size.width(), max_texture_size_);
519 DCHECK_LE(size.height(), max_texture_size_); 516 DCHECK_LE(size.height(), max_texture_size_);
520 DCHECK(thread_checker_.CalledOnValidThread()); 517 DCHECK(thread_checker_.CalledOnValidThread());
521 518
522 ResourceId id = next_id_++; 519 ResourceId id = next_id_++;
523 Resource* resource = InsertResource( 520 Resource* resource = InsertResource(
524 id, Resource(0, size, Resource::INTERNAL, target, GL_LINEAR, texture_pool, 521 id, Resource(0, size, Resource::INTERNAL, target, GL_LINEAR, texture_pool,
525 wrap_mode, hint, format)); 522 wrap_mode, hint, format));
526 resource->allocated = false; 523 resource->allocated = false;
527 return id; 524 return id;
528 } 525 }
529 526
530 ResourceProvider::ResourceId ResourceProvider::CreateBitmap( 527 ResourceId ResourceProvider::CreateBitmap(const gfx::Size& size,
531 const gfx::Size& size, GLint wrap_mode) { 528 GLint wrap_mode) {
532 DCHECK(thread_checker_.CalledOnValidThread()); 529 DCHECK(thread_checker_.CalledOnValidThread());
533 530
534 scoped_ptr<SharedBitmap> bitmap = 531 scoped_ptr<SharedBitmap> bitmap =
535 shared_bitmap_manager_->AllocateSharedBitmap(size); 532 shared_bitmap_manager_->AllocateSharedBitmap(size);
536 uint8_t* pixels = bitmap->pixels(); 533 uint8_t* pixels = bitmap->pixels();
537 DCHECK(pixels); 534 DCHECK(pixels);
538 535
539 ResourceId id = next_id_++; 536 ResourceId id = next_id_++;
540 Resource* resource = 537 Resource* resource =
541 InsertResource(id, Resource(pixels, bitmap.release(), size, 538 InsertResource(id, Resource(pixels, bitmap.release(), size,
542 Resource::INTERNAL, GL_LINEAR, wrap_mode)); 539 Resource::INTERNAL, GL_LINEAR, wrap_mode));
543 resource->allocated = true; 540 resource->allocated = true;
544 return id; 541 return id;
545 } 542 }
546 543
547 ResourceProvider::ResourceId ResourceProvider::CreateResourceFromIOSurface( 544 ResourceId ResourceProvider::CreateResourceFromIOSurface(
548 const gfx::Size& size, 545 const gfx::Size& size,
549 unsigned io_surface_id) { 546 unsigned io_surface_id) {
550 DCHECK(thread_checker_.CalledOnValidThread()); 547 DCHECK(thread_checker_.CalledOnValidThread());
551 548
552 ResourceId id = next_id_++; 549 ResourceId id = next_id_++;
553 Resource* resource = InsertResource( 550 Resource* resource = InsertResource(
554 id, Resource(0, gfx::Size(), Resource::INTERNAL, GL_TEXTURE_RECTANGLE_ARB, 551 id, Resource(0, gfx::Size(), Resource::INTERNAL, GL_TEXTURE_RECTANGLE_ARB,
555 GL_LINEAR, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, 552 GL_LINEAR, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
556 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888)); 553 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888));
557 LazyCreate(resource); 554 LazyCreate(resource);
558 GLES2Interface* gl = ContextGL(); 555 GLES2Interface* gl = ContextGL();
559 DCHECK(gl); 556 DCHECK(gl);
560 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource->gl_id); 557 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource->gl_id);
561 gl->TexImageIOSurface2DCHROMIUM( 558 gl->TexImageIOSurface2DCHROMIUM(
562 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0); 559 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0);
563 resource->allocated = true; 560 resource->allocated = true;
564 return id; 561 return id;
565 } 562 }
566 563
567 ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 564 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
568 const TextureMailbox& mailbox, 565 const TextureMailbox& mailbox,
569 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { 566 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
570 DCHECK(thread_checker_.CalledOnValidThread()); 567 DCHECK(thread_checker_.CalledOnValidThread());
571 // Just store the information. Mailbox will be consumed in LockForRead(). 568 // Just store the information. Mailbox will be consumed in LockForRead().
572 ResourceId id = next_id_++; 569 ResourceId id = next_id_++;
573 DCHECK(mailbox.IsValid()); 570 DCHECK(mailbox.IsValid());
574 Resource* resource = nullptr; 571 Resource* resource = nullptr;
575 if (mailbox.IsTexture()) { 572 if (mailbox.IsTexture()) {
576 resource = InsertResource( 573 resource = InsertResource(
577 id, Resource(0, gfx::Size(), Resource::EXTERNAL, mailbox.target(), 574 id, Resource(0, gfx::Size(), Resource::EXTERNAL, mailbox.target(),
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 953
957 void ResourceProvider::UnlockForWrite(ResourceProvider::Resource* resource) { 954 void ResourceProvider::UnlockForWrite(ResourceProvider::Resource* resource) {
958 DCHECK(resource->locked_for_write); 955 DCHECK(resource->locked_for_write);
959 DCHECK_EQ(resource->exported_count, 0); 956 DCHECK_EQ(resource->exported_count, 0);
960 DCHECK(resource->origin == Resource::INTERNAL); 957 DCHECK(resource->origin == Resource::INTERNAL);
961 resource->locked_for_write = false; 958 resource->locked_for_write = false;
962 } 959 }
963 960
964 ResourceProvider::ScopedReadLockGL::ScopedReadLockGL( 961 ResourceProvider::ScopedReadLockGL::ScopedReadLockGL(
965 ResourceProvider* resource_provider, 962 ResourceProvider* resource_provider,
966 ResourceProvider::ResourceId resource_id) 963 ResourceId resource_id)
967 : resource_provider_(resource_provider), 964 : resource_provider_(resource_provider),
968 resource_id_(resource_id), 965 resource_id_(resource_id),
969 resource_(resource_provider->LockForRead(resource_id)) { 966 resource_(resource_provider->LockForRead(resource_id)) {
970 DCHECK(resource_); 967 DCHECK(resource_);
971 } 968 }
972 969
973 ResourceProvider::ScopedReadLockGL::~ScopedReadLockGL() { 970 ResourceProvider::ScopedReadLockGL::~ScopedReadLockGL() {
974 resource_provider_->UnlockForRead(resource_id_); 971 resource_provider_->UnlockForRead(resource_id_);
975 } 972 }
976 973
977 ResourceProvider::ScopedSamplerGL::ScopedSamplerGL( 974 ResourceProvider::ScopedSamplerGL::ScopedSamplerGL(
978 ResourceProvider* resource_provider, 975 ResourceProvider* resource_provider,
979 ResourceProvider::ResourceId resource_id, 976 ResourceId resource_id,
980 GLenum filter) 977 GLenum filter)
981 : ScopedReadLockGL(resource_provider, resource_id), 978 : ScopedReadLockGL(resource_provider, resource_id),
982 unit_(GL_TEXTURE0), 979 unit_(GL_TEXTURE0),
983 target_(resource_provider->BindForSampling(resource_id, unit_, filter)) { 980 target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {
984 } 981 }
985 982
986 ResourceProvider::ScopedSamplerGL::ScopedSamplerGL( 983 ResourceProvider::ScopedSamplerGL::ScopedSamplerGL(
987 ResourceProvider* resource_provider, 984 ResourceProvider* resource_provider,
988 ResourceProvider::ResourceId resource_id, 985 ResourceId resource_id,
989 GLenum unit, 986 GLenum unit,
990 GLenum filter) 987 GLenum filter)
991 : ScopedReadLockGL(resource_provider, resource_id), 988 : ScopedReadLockGL(resource_provider, resource_id),
992 unit_(unit), 989 unit_(unit),
993 target_(resource_provider->BindForSampling(resource_id, unit_, filter)) { 990 target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {
994 } 991 }
995 992
996 ResourceProvider::ScopedSamplerGL::~ScopedSamplerGL() { 993 ResourceProvider::ScopedSamplerGL::~ScopedSamplerGL() {
997 } 994 }
998 995
999 ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL( 996 ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL(
1000 ResourceProvider* resource_provider, 997 ResourceProvider* resource_provider,
1001 ResourceProvider::ResourceId resource_id) 998 ResourceId resource_id)
1002 : resource_provider_(resource_provider), 999 : resource_provider_(resource_provider),
1003 resource_(resource_provider->LockForWrite(resource_id)) { 1000 resource_(resource_provider->LockForWrite(resource_id)) {
1004 resource_provider_->LazyAllocate(resource_); 1001 resource_provider_->LazyAllocate(resource_);
1005 texture_id_ = resource_->gl_id; 1002 texture_id_ = resource_->gl_id;
1006 DCHECK(texture_id_); 1003 DCHECK(texture_id_);
1007 } 1004 }
1008 1005
1009 ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() { 1006 ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() {
1010 resource_provider_->UnlockForWrite(resource_); 1007 resource_provider_->UnlockForWrite(resource_);
1011 } 1008 }
1012 1009
1013 void ResourceProvider::PopulateSkBitmapWithResource( 1010 void ResourceProvider::PopulateSkBitmapWithResource(
1014 SkBitmap* sk_bitmap, const Resource* resource) { 1011 SkBitmap* sk_bitmap, const Resource* resource) {
1015 DCHECK_EQ(RGBA_8888, resource->format); 1012 DCHECK_EQ(RGBA_8888, resource->format);
1016 SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(), 1013 SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(),
1017 resource->size.height()); 1014 resource->size.height());
1018 sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes()); 1015 sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes());
1019 } 1016 }
1020 1017
1021 ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware( 1018 ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware(
1022 ResourceProvider* resource_provider, 1019 ResourceProvider* resource_provider,
1023 ResourceProvider::ResourceId resource_id) 1020 ResourceId resource_id)
1024 : resource_provider_(resource_provider), 1021 : resource_provider_(resource_provider), resource_id_(resource_id) {
1025 resource_id_(resource_id) {
1026 const Resource* resource = resource_provider->LockForRead(resource_id); 1022 const Resource* resource = resource_provider->LockForRead(resource_id);
1027 wrap_mode_ = resource->wrap_mode; 1023 wrap_mode_ = resource->wrap_mode;
1028 ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource); 1024 ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource);
1029 } 1025 }
1030 1026
1031 ResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() { 1027 ResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() {
1032 resource_provider_->UnlockForRead(resource_id_); 1028 resource_provider_->UnlockForRead(resource_id_);
1033 } 1029 }
1034 1030
1035 ResourceProvider::ScopedWriteLockSoftware::ScopedWriteLockSoftware( 1031 ResourceProvider::ScopedWriteLockSoftware::ScopedWriteLockSoftware(
1036 ResourceProvider* resource_provider, 1032 ResourceProvider* resource_provider,
1037 ResourceProvider::ResourceId resource_id) 1033 ResourceId resource_id)
1038 : resource_provider_(resource_provider), 1034 : resource_provider_(resource_provider),
1039 resource_(resource_provider->LockForWrite(resource_id)) { 1035 resource_(resource_provider->LockForWrite(resource_id)) {
1040 ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource_); 1036 ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource_);
1041 DCHECK(valid()); 1037 DCHECK(valid());
1042 } 1038 }
1043 1039
1044 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { 1040 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() {
1045 DCHECK(thread_checker_.CalledOnValidThread()); 1041 DCHECK(thread_checker_.CalledOnValidThread());
1046 resource_provider_->UnlockForWrite(resource_); 1042 resource_provider_->UnlockForWrite(resource_);
1047 } 1043 }
1048 1044
1049 ResourceProvider::ScopedWriteLockGpuMemoryBuffer:: 1045 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
1050 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider, 1046 ScopedWriteLockGpuMemoryBuffer(ResourceProvider* resource_provider,
1051 ResourceProvider::ResourceId resource_id) 1047 ResourceId resource_id)
1052 : resource_provider_(resource_provider), 1048 : resource_provider_(resource_provider),
1053 resource_(resource_provider->LockForWrite(resource_id)), 1049 resource_(resource_provider->LockForWrite(resource_id)),
1054 gpu_memory_buffer_manager_(resource_provider->gpu_memory_buffer_manager_), 1050 gpu_memory_buffer_manager_(resource_provider->gpu_memory_buffer_manager_),
1055 gpu_memory_buffer_(nullptr), 1051 gpu_memory_buffer_(nullptr),
1056 size_(resource_->size), 1052 size_(resource_->size),
1057 format_(resource_->format) { 1053 format_(resource_->format) {
1058 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type); 1054 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type);
1059 std::swap(gpu_memory_buffer_, resource_->gpu_memory_buffer); 1055 std::swap(gpu_memory_buffer_, resource_->gpu_memory_buffer);
1060 } 1056 }
1061 1057
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( 1095 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
1100 size_, ToGpuMemoryBufferFormat(format_), gfx::GpuMemoryBuffer::MAP); 1096 size_, ToGpuMemoryBufferFormat(format_), gfx::GpuMemoryBuffer::MAP);
1101 gpu_memory_buffer_ = gpu_memory_buffer.release(); 1097 gpu_memory_buffer_ = gpu_memory_buffer.release();
1102 } 1098 }
1103 1099
1104 return gpu_memory_buffer_; 1100 return gpu_memory_buffer_;
1105 } 1101 }
1106 1102
1107 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( 1103 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
1108 ResourceProvider* resource_provider, 1104 ResourceProvider* resource_provider,
1109 ResourceProvider::ResourceId resource_id) 1105 ResourceId resource_id)
1110 : resource_provider_(resource_provider), 1106 : resource_provider_(resource_provider),
1111 resource_(resource_provider->LockForWrite(resource_id)) { 1107 resource_(resource_provider->LockForWrite(resource_id)) {
1112 DCHECK(thread_checker_.CalledOnValidThread()); 1108 DCHECK(thread_checker_.CalledOnValidThread());
1113 resource_provider_->LazyAllocate(resource_); 1109 resource_provider_->LazyAllocate(resource_);
1114 } 1110 }
1115 1111
1116 ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { 1112 ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
1117 DCHECK(thread_checker_.CalledOnValidThread()); 1113 DCHECK(thread_checker_.CalledOnValidThread());
1118 DCHECK(resource_->locked_for_write); 1114 DCHECK(resource_->locked_for_write);
1119 resource_provider_->UnlockForWrite(resource_); 1115 resource_provider_->UnlockForWrite(resource_);
(...skipping 936 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 } 2052 }
2057 2053
2058 class GrContext* ResourceProvider::GrContext(bool worker_context) const { 2054 class GrContext* ResourceProvider::GrContext(bool worker_context) const {
2059 ContextProvider* context_provider = 2055 ContextProvider* context_provider =
2060 worker_context ? output_surface_->worker_context_provider() 2056 worker_context ? output_surface_->worker_context_provider()
2061 : output_surface_->context_provider(); 2057 : output_surface_->context_provider();
2062 return context_provider ? context_provider->GrContext() : NULL; 2058 return context_provider ? context_provider->GrContext() : NULL;
2063 } 2059 }
2064 2060
2065 } // namespace cc 2061 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698