| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "gpu/command_buffer/service/renderbuffer_manager.h" | 5 #include "gpu/command_buffer/service/renderbuffer_manager.h" | 
| 6 #include "base/logging.h" | 6 #include "base/logging.h" | 
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" | 
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" | 
| 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 
| 11 #include "gpu/command_buffer/service/memory_tracking.h" | 11 #include "gpu/command_buffer/service/memory_tracking.h" | 
|  | 12 #include "ui/gl/gl_implementation.h" | 
| 12 | 13 | 
| 13 namespace gpu { | 14 namespace gpu { | 
| 14 namespace gles2 { | 15 namespace gles2 { | 
| 15 | 16 | 
| 16 RenderbufferManager::RenderbufferManager( | 17 RenderbufferManager::RenderbufferManager( | 
| 17     MemoryTracker* memory_tracker, | 18     MemoryTracker* memory_tracker, | 
| 18     GLint max_renderbuffer_size, | 19     GLint max_renderbuffer_size, | 
| 19     GLint max_samples) | 20     GLint max_samples) | 
| 20     : memory_tracker_( | 21     : memory_tracker_( | 
| 21           new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), | 22           new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), | 
| 22       max_renderbuffer_size_(max_renderbuffer_size), | 23       max_renderbuffer_size_(max_renderbuffer_size), | 
| 23       max_samples_(max_samples), | 24       max_samples_(max_samples), | 
| 24       num_uncleared_renderbuffers_(0), | 25       num_uncleared_renderbuffers_(0), | 
| 25       renderbuffer_info_count_(0), | 26       renderbuffer_info_count_(0), | 
| 26       have_context_(true) { | 27       have_context_(true) { | 
| 27 } | 28 } | 
| 28 | 29 | 
| 29 RenderbufferManager::~RenderbufferManager() { | 30 RenderbufferManager::~RenderbufferManager() { | 
| 30   DCHECK(renderbuffer_infos_.empty()); | 31   DCHECK(renderbuffer_infos_.empty()); | 
| 31   // If this triggers, that means something is keeping a reference to | 32   // If this triggers, that means something is keeping a reference to | 
| 32   // a RenderbufferInfo belonging to this. | 33   // a RenderbufferInfo belonging to this. | 
| 33   CHECK_EQ(renderbuffer_info_count_, 0u); | 34   CHECK_EQ(renderbuffer_info_count_, 0u); | 
| 34 | 35 | 
| 35   DCHECK_EQ(0, num_uncleared_renderbuffers_); | 36   DCHECK_EQ(0, num_uncleared_renderbuffers_); | 
| 36 } | 37 } | 
| 37 | 38 | 
| 38 size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() { | 39 size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() { | 
| 39   return width_ * height_ * samples_ * | 40   uint32 size = 0; | 
| 40          GLES2Util::RenderbufferBytesPerPixel(internal_format_); | 41   RenderbufferManager::ComputeEstimatedRenderbufferSize( | 
|  | 42       width_, height_, samples_, internal_format_, &size); | 
|  | 43   return size; | 
| 41 } | 44 } | 
| 42 | 45 | 
| 43 void RenderbufferManager::RenderbufferInfo::AddToSignature( | 46 void RenderbufferManager::RenderbufferInfo::AddToSignature( | 
| 44     std::string* signature) const { | 47     std::string* signature) const { | 
| 45   DCHECK(signature); | 48   DCHECK(signature); | 
| 46   *signature += base::StringPrintf( | 49   *signature += base::StringPrintf( | 
| 47       "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", | 50       "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", | 
| 48       internal_format_, samples_, width_, height_); | 51       internal_format_, samples_, width_, height_); | 
| 49 } | 52 } | 
| 50 | 53 | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 136   for (RenderbufferInfoMap::const_iterator it = renderbuffer_infos_.begin(); | 139   for (RenderbufferInfoMap::const_iterator it = renderbuffer_infos_.begin(); | 
| 137        it != renderbuffer_infos_.end(); ++it) { | 140        it != renderbuffer_infos_.end(); ++it) { | 
| 138     if (it->second->service_id() == service_id) { | 141     if (it->second->service_id() == service_id) { | 
| 139       *client_id = it->first; | 142       *client_id = it->first; | 
| 140       return true; | 143       return true; | 
| 141     } | 144     } | 
| 142   } | 145   } | 
| 143   return false; | 146   return false; | 
| 144 } | 147 } | 
| 145 | 148 | 
|  | 149 bool RenderbufferManager::ComputeEstimatedRenderbufferSize( | 
|  | 150     int width, int height, int samples, int internal_format, uint32* size) { | 
|  | 151   DCHECK(size); | 
|  | 152 | 
|  | 153   uint32 temp = 0; | 
|  | 154   if (!SafeMultiplyUint32(width, height, &temp)) { | 
|  | 155     return false; | 
|  | 156   } | 
|  | 157   if (!SafeMultiplyUint32(temp, samples, &temp)) { | 
|  | 158     return false; | 
|  | 159   } | 
|  | 160   GLenum impl_format = InternalRenderbufferFormatToImplFormat(internal_format); | 
|  | 161   if (!SafeMultiplyUint32( | 
|  | 162       temp, GLES2Util::RenderbufferBytesPerPixel(impl_format), &temp)) { | 
|  | 163     return false; | 
|  | 164   } | 
|  | 165   *size = temp; | 
|  | 166   return true; | 
|  | 167 } | 
|  | 168 | 
|  | 169 GLenum RenderbufferManager::InternalRenderbufferFormatToImplFormat( | 
|  | 170     GLenum impl_format) { | 
|  | 171   if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { | 
|  | 172     switch (impl_format) { | 
|  | 173       case GL_DEPTH_COMPONENT16: | 
|  | 174         return GL_DEPTH_COMPONENT; | 
|  | 175       case GL_RGBA4: | 
|  | 176       case GL_RGB5_A1: | 
|  | 177         return GL_RGBA; | 
|  | 178       case GL_RGB565: | 
|  | 179         return GL_RGB; | 
|  | 180     } | 
|  | 181   } | 
|  | 182   return impl_format; | 
|  | 183 } | 
|  | 184 | 
| 146 }  // namespace gles2 | 185 }  // namespace gles2 | 
| 147 }  // namespace gpu | 186 }  // namespace gpu | 
| 148 | 187 | 
| 149 | 188 | 
| OLD | NEW | 
|---|