Chromium Code Reviews| 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 <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" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/numerics/safe_math.h" | 12 #include "base/numerics/safe_math.h" |
| 13 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
| 14 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
| 15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/trace_event/trace_event.h" | 16 #include "base/trace_event/trace_event.h" |
| 17 #include "cc/base/math_util.h" | |
| 18 #include "cc/resources/platform_color.h" | 17 #include "cc/resources/platform_color.h" |
| 18 #include "cc/resources/resource_util.h" | |
| 19 #include "cc/resources/returned_resource.h" | 19 #include "cc/resources/returned_resource.h" |
| 20 #include "cc/resources/shared_bitmap_manager.h" | 20 #include "cc/resources/shared_bitmap_manager.h" |
| 21 #include "cc/resources/transferable_resource.h" | 21 #include "cc/resources/transferable_resource.h" |
| 22 #include "gpu/GLES2/gl2extchromium.h" | 22 #include "gpu/GLES2/gl2extchromium.h" |
| 23 #include "gpu/command_buffer/client/gles2_interface.h" | 23 #include "gpu/command_buffer/client/gles2_interface.h" |
| 24 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" | 24 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
| 25 #include "third_party/khronos/GLES2/gl2.h" | 25 #include "third_party/khronos/GLES2/gl2.h" |
| 26 #include "third_party/khronos/GLES2/gl2ext.h" | 26 #include "third_party/khronos/GLES2/gl2ext.h" |
| 27 #include "third_party/skia/include/core/SkSurface.h" | 27 #include "third_party/skia/include/core/SkSurface.h" |
| 28 #include "third_party/skia/include/gpu/GrContext.h" | 28 #include "third_party/skia/include/gpu/GrContext.h" |
| (...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 711 dest.writePixels(source_info, image, image_stride, 0, 0); | 711 dest.writePixels(source_info, image, image_stride, 0, 0); |
| 712 } else { | 712 } else { |
| 713 DCHECK(resource->gl_id); | 713 DCHECK(resource->gl_id); |
| 714 DCHECK(!resource->pending_set_pixels); | 714 DCHECK(!resource->pending_set_pixels); |
| 715 DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D)); | 715 DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D)); |
| 716 GLES2Interface* gl = ContextGL(); | 716 GLES2Interface* gl = ContextGL(); |
| 717 DCHECK(gl); | 717 DCHECK(gl); |
| 718 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id); | 718 gl->BindTexture(GL_TEXTURE_2D, resource->gl_id); |
| 719 | 719 |
| 720 if (resource->format == ETC1) { | 720 if (resource->format == ETC1) { |
| 721 base::CheckedNumeric<int> num_bytes = BitsPerPixel(ETC1); | 721 int image_bytes = ResourceUtil::CheckedSizeInBytes(image_size, ETC1); |
|
vmpstr
2015/07/16 19:04:00
This will cause a possible truncation size_t -> in
| |
| 722 num_bytes *= image_size.width(); | |
| 723 num_bytes *= image_size.height(); | |
| 724 num_bytes /= 8; | |
| 725 gl->CompressedTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(ETC1), | 722 gl->CompressedTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(ETC1), |
| 726 image_size.width(), image_size.height(), 0, | 723 image_size.width(), image_size.height(), 0, |
| 727 num_bytes.ValueOrDie(), image); | 724 image_bytes, image); |
| 728 } else { | 725 } else { |
| 729 gl->TexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image_size.width(), | 726 gl->TexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image_size.width(), |
| 730 image_size.height(), GLDataFormat(resource->format), | 727 image_size.height(), GLDataFormat(resource->format), |
| 731 GLDataType(resource->format), image); | 728 GLDataType(resource->format), image); |
| 732 } | 729 } |
| 733 } | 730 } |
| 734 } | 731 } |
| 735 | 732 |
| 736 ResourceProvider::Resource* ResourceProvider::InsertResource( | 733 ResourceProvider::Resource* ResourceProvider::InsertResource( |
| 737 ResourceId id, | 734 ResourceId id, |
| (...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1517 DCHECK(!resource->image_id); | 1514 DCHECK(!resource->image_id); |
| 1518 DCHECK_NE(ETC1, resource->format); | 1515 DCHECK_NE(ETC1, resource->format); |
| 1519 | 1516 |
| 1520 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type); | 1517 DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type); |
| 1521 GLES2Interface* gl = ContextGL(); | 1518 GLES2Interface* gl = ContextGL(); |
| 1522 DCHECK(gl); | 1519 DCHECK(gl); |
| 1523 if (!resource->gl_pixel_buffer_id) | 1520 if (!resource->gl_pixel_buffer_id) |
| 1524 resource->gl_pixel_buffer_id = buffer_id_allocator_->NextId(); | 1521 resource->gl_pixel_buffer_id = buffer_id_allocator_->NextId(); |
| 1525 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, | 1522 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, |
| 1526 resource->gl_pixel_buffer_id); | 1523 resource->gl_pixel_buffer_id); |
| 1527 unsigned bytes_per_pixel = BitsPerPixel(resource->format) / 8; | 1524 int resource_bytes = ResourceUtil::UncheckedSizeInBytesAligned( |
|
vmpstr
2015/07/16 19:04:00
I don't think this will compile on windows because
prashant.n
2015/07/22 15:44:58
I'll change this to size_t. But BufferData takes s
| |
| 1528 gl->BufferData( | 1525 resource->size, resource->format); |
| 1529 GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, | 1526 gl->BufferData(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, resource_bytes, NULL, |
| 1530 resource->size.height() * | 1527 GL_DYNAMIC_DRAW); |
| 1531 MathUtil::RoundUp(bytes_per_pixel * resource->size.width(), 4u), | |
| 1532 NULL, GL_DYNAMIC_DRAW); | |
| 1533 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0); | 1528 gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0); |
| 1534 } | 1529 } |
| 1535 | 1530 |
| 1536 void ResourceProvider::ReleasePixelBuffer(ResourceId id) { | 1531 void ResourceProvider::ReleasePixelBuffer(ResourceId id) { |
| 1537 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | 1532 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
| 1538 "ResourceProvider::ReleasePixelBuffer"); | 1533 "ResourceProvider::ReleasePixelBuffer"); |
| 1539 | 1534 |
| 1540 Resource* resource = GetResource(id); | 1535 Resource* resource = GetResource(id); |
| 1541 DCHECK(resource->origin == Resource::INTERNAL); | 1536 DCHECK(resource->origin == Resource::INTERNAL); |
| 1542 DCHECK_EQ(resource->exported_count, 0); | 1537 DCHECK_EQ(resource->exported_count, 0); |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1945 } | 1940 } |
| 1946 | 1941 |
| 1947 class GrContext* ResourceProvider::GrContext(bool worker_context) const { | 1942 class GrContext* ResourceProvider::GrContext(bool worker_context) const { |
| 1948 ContextProvider* context_provider = | 1943 ContextProvider* context_provider = |
| 1949 worker_context ? output_surface_->worker_context_provider() | 1944 worker_context ? output_surface_->worker_context_provider() |
| 1950 : output_surface_->context_provider(); | 1945 : output_surface_->context_provider(); |
| 1951 return context_provider ? context_provider->GrContext() : NULL; | 1946 return context_provider ? context_provider->GrContext() : NULL; |
| 1952 } | 1947 } |
| 1953 | 1948 |
| 1954 } // namespace cc | 1949 } // namespace cc |
| OLD | NEW |