| 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 #include "cc/resources/resource_provider.h" |     5 #include "cc/resources/resource_provider.h" | 
|     6  |     6  | 
|     7 #include <stddef.h> |     7 #include <stddef.h> | 
|     8 #include <stdint.h> |     8 #include <stdint.h> | 
|     9  |     9  | 
|    10 #include <algorithm> |    10 #include <algorithm> | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|    24 #include "base/trace_event/trace_event.h" |    24 #include "base/trace_event/trace_event.h" | 
|    25 #include "cc/resources/platform_color.h" |    25 #include "cc/resources/platform_color.h" | 
|    26 #include "cc/resources/resource_util.h" |    26 #include "cc/resources/resource_util.h" | 
|    27 #include "cc/resources/returned_resource.h" |    27 #include "cc/resources/returned_resource.h" | 
|    28 #include "cc/resources/shared_bitmap_manager.h" |    28 #include "cc/resources/shared_bitmap_manager.h" | 
|    29 #include "cc/resources/transferable_resource.h" |    29 #include "cc/resources/transferable_resource.h" | 
|    30 #include "gpu/GLES2/gl2extchromium.h" |    30 #include "gpu/GLES2/gl2extchromium.h" | 
|    31 #include "gpu/command_buffer/client/context_support.h" |    31 #include "gpu/command_buffer/client/context_support.h" | 
|    32 #include "gpu/command_buffer/client/gles2_interface.h" |    32 #include "gpu/command_buffer/client/gles2_interface.h" | 
|    33 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |    33 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" | 
 |    34 #include "media/base/media_switches.h" | 
|    34 #include "skia/ext/texture_handle.h" |    35 #include "skia/ext/texture_handle.h" | 
|    35 #include "third_party/khronos/GLES2/gl2.h" |    36 #include "third_party/khronos/GLES2/gl2.h" | 
|    36 #include "third_party/khronos/GLES2/gl2ext.h" |    37 #include "third_party/khronos/GLES2/gl2ext.h" | 
|    37 #include "third_party/skia/include/core/SkCanvas.h" |    38 #include "third_party/skia/include/core/SkCanvas.h" | 
|    38 #include "third_party/skia/include/core/SkSurface.h" |    39 #include "third_party/skia/include/core/SkSurface.h" | 
|    39 #include "third_party/skia/include/gpu/GrContext.h" |    40 #include "third_party/skia/include/gpu/GrContext.h" | 
|    40 #include "third_party/skia/include/gpu/GrTextureProvider.h" |    41 #include "third_party/skia/include/gpu/GrTextureProvider.h" | 
|    41 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" |    42 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" | 
|    42 #include "ui/gfx/geometry/rect.h" |    43 #include "ui/gfx/geometry/rect.h" | 
|    43 #include "ui/gfx/geometry/vector2d.h" |    44 #include "ui/gfx/geometry/vector2d.h" | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    85       break; |    86       break; | 
|    86     case BGRA_8888: |    87     case BGRA_8888: | 
|    87       storage_format = GL_BGRA8_EXT; |    88       storage_format = GL_BGRA8_EXT; | 
|    88       break; |    89       break; | 
|    89     case RGBA_4444: |    90     case RGBA_4444: | 
|    90     case ALPHA_8: |    91     case ALPHA_8: | 
|    91     case LUMINANCE_8: |    92     case LUMINANCE_8: | 
|    92     case RGB_565: |    93     case RGB_565: | 
|    93     case ETC1: |    94     case ETC1: | 
|    94     case RED_8: |    95     case RED_8: | 
 |    96     case RG_88: | 
|    95     case LUMINANCE_F16: |    97     case LUMINANCE_F16: | 
|    96       NOTREACHED(); |    98       NOTREACHED(); | 
|    97       break; |    99       break; | 
|    98   } |   100   } | 
|    99  |   101  | 
|   100   return storage_format; |   102   return storage_format; | 
|   101 } |   103 } | 
|   102  |   104  | 
|   103 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) { |   105 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) { | 
|   104   switch (format) { |   106   switch (format) { | 
|   105     case RGBA_8888: |   107     case RGBA_8888: | 
|   106       return true; |   108       return true; | 
|   107     case BGRA_8888: |   109     case BGRA_8888: | 
|   108       return use_bgra; |   110       return use_bgra; | 
|   109     case RGBA_4444: |   111     case RGBA_4444: | 
|   110     case ALPHA_8: |   112     case ALPHA_8: | 
|   111     case LUMINANCE_8: |   113     case LUMINANCE_8: | 
|   112     case RGB_565: |   114     case RGB_565: | 
|   113     case ETC1: |   115     case ETC1: | 
|   114     case RED_8: |   116     case RED_8: | 
 |   117     case RG_88: | 
|   115     case LUMINANCE_F16: |   118     case LUMINANCE_F16: | 
|   116       return false; |   119       return false; | 
|   117   } |   120   } | 
|   118   return false; |   121   return false; | 
|   119 } |   122 } | 
|   120  |   123  | 
|   121 GrPixelConfig ToGrPixelConfig(ResourceFormat format) { |   124 GrPixelConfig ToGrPixelConfig(ResourceFormat format) { | 
|   122   switch (format) { |   125   switch (format) { | 
|   123     case RGBA_8888: |   126     case RGBA_8888: | 
|   124       return kRGBA_8888_GrPixelConfig; |   127       return kRGBA_8888_GrPixelConfig; | 
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   449   use_texture_format_bgra_ = caps.texture_format_bgra8888; |   452   use_texture_format_bgra_ = caps.texture_format_bgra8888; | 
|   450   use_texture_usage_hint_ = caps.texture_usage; |   453   use_texture_usage_hint_ = caps.texture_usage; | 
|   451   use_compressed_texture_etc1_ = caps.texture_format_etc1; |   454   use_compressed_texture_etc1_ = caps.texture_format_etc1; | 
|   452  |   455  | 
|   453   if (caps.disable_one_component_textures) { |   456   if (caps.disable_one_component_textures) { | 
|   454     yuv_resource_format_ = yuv_highbit_resource_format_ = RGBA_8888; |   457     yuv_resource_format_ = yuv_highbit_resource_format_ = RGBA_8888; | 
|   455   } else { |   458   } else { | 
|   456     yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8; |   459     yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8; | 
|   457     yuv_highbit_resource_format_ = |   460     yuv_highbit_resource_format_ = | 
|   458         caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_; |   461         caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_; | 
 |   462     if (base::FeatureList::IsEnabled(media::kUseRGTexture) || | 
 |   463         !caps.texture_half_float_linear) { | 
 |   464       yuv_highbit_resource_format_ = caps.texture_rg ? RG_88 : RGBA_8888; | 
 |   465     } | 
|   459   } |   466   } | 
|   460  |   467  | 
|   461   use_sync_query_ = caps.sync_query; |   468   use_sync_query_ = caps.sync_query; | 
|   462  |   469  | 
|   463   GLES2Interface* gl = ContextGL(); |   470   GLES2Interface* gl = ContextGL(); | 
|   464  |   471  | 
|   465   max_texture_size_ = 0;  // Context expects cleared value. |   472   max_texture_size_ = 0;  // Context expects cleared value. | 
|   466   gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_); |   473   gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_); | 
|   467   best_texture_format_ = |   474   best_texture_format_ = | 
|   468       PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_); |   475       PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_); | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   516     case RGBA_4444: |   523     case RGBA_4444: | 
|   517     case RGBA_8888: |   524     case RGBA_8888: | 
|   518     case RGB_565: |   525     case RGB_565: | 
|   519     case LUMINANCE_8: |   526     case LUMINANCE_8: | 
|   520       return true; |   527       return true; | 
|   521     case BGRA_8888: |   528     case BGRA_8888: | 
|   522       return caps.texture_format_bgra8888; |   529       return caps.texture_format_bgra8888; | 
|   523     case ETC1: |   530     case ETC1: | 
|   524       return caps.texture_format_etc1; |   531       return caps.texture_format_etc1; | 
|   525     case RED_8: |   532     case RED_8: | 
 |   533     case RG_88: | 
|   526       return caps.texture_rg; |   534       return caps.texture_rg; | 
|   527     case LUMINANCE_F16: |   535     case LUMINANCE_F16: | 
|   528       return caps.texture_half_float_linear; |   536       return caps.texture_half_float_linear; | 
|   529   } |   537   } | 
|   530  |   538  | 
|   531   NOTREACHED(); |   539   NOTREACHED(); | 
|   532   return false; |   540   return false; | 
|   533 } |   541 } | 
|   534  |   542  | 
|   535 bool ResourceProvider::InUseByConsumer(ResourceId id) { |   543 bool ResourceProvider::InUseByConsumer(ResourceId id) { | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   649   Resource* resource = InsertResource( |   657   Resource* resource = InsertResource( | 
|   650       id, |   658       id, | 
|   651       Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR)); |   659       Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR)); | 
|   652   resource->allocated = true; |   660   resource->allocated = true; | 
|   653   resource->color_space = color_space; |   661   resource->color_space = color_space; | 
|   654   return id; |   662   return id; | 
|   655 } |   663 } | 
|   656  |   664  | 
|   657 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |   665 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( | 
|   658     const TextureMailbox& mailbox, |   666     const TextureMailbox& mailbox, | 
 |   667     ResourceFormat format, | 
|   659     std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl, |   668     std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl, | 
|   660     bool read_lock_fences_enabled) { |   669     bool read_lock_fences_enabled) { | 
|   661   DCHECK(thread_checker_.CalledOnValidThread()); |   670   DCHECK(thread_checker_.CalledOnValidThread()); | 
|   662   // Just store the information. Mailbox will be consumed in LockForRead(). |   671   // Just store the information. Mailbox will be consumed in LockForRead(). | 
|   663   ResourceId id = next_id_++; |   672   ResourceId id = next_id_++; | 
|   664   DCHECK(mailbox.IsValid()); |   673   DCHECK(mailbox.IsValid()); | 
|   665   Resource* resource = nullptr; |   674   Resource* resource = nullptr; | 
|   666   if (mailbox.IsTexture()) { |   675   if (mailbox.IsTexture()) { | 
|   667     resource = InsertResource( |   676     resource = InsertResource( | 
|   668         id, |   677         id, Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL, | 
|   669         Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL, |   678                      mailbox.target(), | 
|   670                  mailbox.target(), |   679                      mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, | 
|   671                  mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, |   680                      TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, format)); | 
|   672                  TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, RGBA_8888)); |  | 
|   673   } else { |   681   } else { | 
|   674     DCHECK(mailbox.IsSharedMemory()); |   682     DCHECK(mailbox.IsSharedMemory()); | 
|   675     SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); |   683     SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); | 
|   676     uint8_t* pixels = shared_bitmap->pixels(); |   684     uint8_t* pixels = shared_bitmap->pixels(); | 
|   677     DCHECK(pixels); |   685     DCHECK(pixels); | 
|   678     resource = InsertResource( |   686     resource = InsertResource( | 
|   679         id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), |   687         id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), | 
|   680                      Resource::EXTERNAL, GL_LINEAR)); |   688                      Resource::EXTERNAL, GL_LINEAR)); | 
 |   689     resource->format = format; | 
|   681   } |   690   } | 
|   682   resource->allocated = true; |   691   resource->allocated = true; | 
|   683   resource->set_mailbox(mailbox); |   692   resource->set_mailbox(mailbox); | 
|   684   resource->color_space = mailbox.color_space(); |   693   resource->color_space = mailbox.color_space(); | 
|   685   resource->release_callback_impl = |   694   resource->release_callback_impl = | 
|   686       base::Bind(&SingleReleaseCallbackImpl::Run, |   695       base::Bind(&SingleReleaseCallbackImpl::Run, | 
|   687                  base::Owned(release_callback_impl.release())); |   696                  base::Owned(release_callback_impl.release())); | 
|   688   resource->read_lock_fences_enabled = read_lock_fences_enabled; |   697   resource->read_lock_fences_enabled = read_lock_fences_enabled; | 
|   689   resource->is_overlay_candidate = mailbox.is_overlay_candidate(); |   698   resource->is_overlay_candidate = mailbox.is_overlay_candidate(); | 
|   690   resource->color_space = mailbox.color_space(); |   699   resource->color_space = mailbox.color_space(); | 
|   691  |   700  | 
|   692   return id; |   701   return id; | 
|   693 } |   702 } | 
|   694  |   703  | 
 |   704 // TODO(dswang): remove this method. crbug.com/624436 | 
 |   705 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( | 
 |   706     const TextureMailbox& mailbox, | 
 |   707     std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl, | 
 |   708     bool read_lock_fences_enabled) { | 
 |   709   return CreateResourceFromTextureMailbox( | 
 |   710       mailbox, RGBA_8888, std::move(release_callback_impl), false); | 
 |   711 } | 
 |   712  | 
|   695 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |   713 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( | 
|   696     const TextureMailbox& mailbox, |   714     const TextureMailbox& mailbox, | 
|   697     std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) { |   715     std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) { | 
|   698   return CreateResourceFromTextureMailbox( |   716   return CreateResourceFromTextureMailbox( | 
|   699       mailbox, std::move(release_callback_impl), false); |   717       mailbox, std::move(release_callback_impl), false); | 
|   700 } |   718 } | 
|   701  |   719  | 
|   702 void ResourceProvider::DeleteResource(ResourceId id) { |   720 void ResourceProvider::DeleteResource(ResourceId id) { | 
|   703   DCHECK(thread_checker_.CalledOnValidThread()); |   721   DCHECK(thread_checker_.CalledOnValidThread()); | 
|   704   ResourceMap::iterator it = resources_.find(id); |   722   ResourceMap::iterator it = resources_.find(id); | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   818  |   836  | 
|   819 ResourceProvider::ResourceType ResourceProvider::GetResourceType( |   837 ResourceProvider::ResourceType ResourceProvider::GetResourceType( | 
|   820     ResourceId id) { |   838     ResourceId id) { | 
|   821   return GetResource(id)->type; |   839   return GetResource(id)->type; | 
|   822 } |   840 } | 
|   823  |   841  | 
|   824 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) { |   842 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) { | 
|   825   return GetResource(id)->target; |   843   return GetResource(id)->target; | 
|   826 } |   844 } | 
|   827  |   845  | 
 |   846 ResourceFormat ResourceProvider::GetResourceFormat(ResourceId id) { | 
 |   847   return GetResource(id)->format; | 
 |   848 } | 
 |   849  | 
|   828 bool ResourceProvider::IsImmutable(ResourceId id) { |   850 bool ResourceProvider::IsImmutable(ResourceId id) { | 
|   829   if (IsGpuResourceType(default_resource_type_)) { |   851   if (IsGpuResourceType(default_resource_type_)) { | 
|   830     return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE; |   852     return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE; | 
|   831   } else { |   853   } else { | 
|   832     // Software resources are immutable; they cannot change format or be |   854     // Software resources are immutable; they cannot change format or be | 
|   833     // resized. |   855     // resized. | 
|   834     return true; |   856     return true; | 
|   835   } |   857   } | 
|   836 } |   858 } | 
|   837  |   859  | 
| (...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2055  |  2077  | 
|  2056     const int kImportance = 2; |  2078     const int kImportance = 2; | 
|  2057     pmd->CreateSharedGlobalAllocatorDump(guid); |  2079     pmd->CreateSharedGlobalAllocatorDump(guid); | 
|  2058     pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); |  2080     pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); | 
|  2059   } |  2081   } | 
|  2060  |  2082  | 
|  2061   return true; |  2083   return true; | 
|  2062 } |  2084 } | 
|  2063  |  2085  | 
|  2064 }  // namespace cc |  2086 }  // namespace cc | 
| OLD | NEW |