| 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" |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 next_id_index_ = 0; | 200 next_id_index_ = 0; |
| 201 } | 201 } |
| 202 | 202 |
| 203 return ids_[next_id_index_++]; | 203 return ids_[next_id_index_++]; |
| 204 } | 204 } |
| 205 | 205 |
| 206 private: | 206 private: |
| 207 DISALLOW_COPY_AND_ASSIGN(BufferIdAllocator); | 207 DISALLOW_COPY_AND_ASSIGN(BufferIdAllocator); |
| 208 }; | 208 }; |
| 209 | 209 |
| 210 // Query object based fence implementation used to detect completion of copy | 210 } // namespace |
| 211 // texture operations. Fence has passed when query result is available. | |
| 212 class CopyTextureFence : public ResourceProvider::Fence { | |
| 213 public: | |
| 214 CopyTextureFence(gpu::gles2::GLES2Interface* gl, unsigned query_id) | |
| 215 : gl_(gl), query_id_(query_id) {} | |
| 216 | 211 |
| 217 // Overridden from ResourceProvider::Fence: | 212 bool ResourceProvider::CopyTextureFence::HasPassed() { |
| 218 void Set() override {} | 213 unsigned available = 1; |
| 219 bool HasPassed() override { | 214 gl_->GetQueryObjectuivEXT(query_id_, GL_QUERY_RESULT_AVAILABLE_EXT, |
| 220 unsigned available = 1; | 215 &available); |
| 221 gl_->GetQueryObjectuivEXT( | 216 if (!available) |
| 222 query_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available); | 217 return false; |
| 223 if (!available) | |
| 224 return false; | |
| 225 | 218 |
| 226 ProcessResult(); | 219 ProcessResult(); |
| 227 return true; | 220 return true; |
| 228 } | 221 } |
| 229 void Wait() override { | 222 void ResourceProvider::CopyTextureFence::Wait() { |
| 230 // ProcessResult() will wait for result to become available. | 223 // ProcessResult() will wait for result to become available. |
| 231 ProcessResult(); | 224 ProcessResult(); |
| 232 } | 225 } |
| 233 | 226 |
| 234 private: | 227 void ResourceProvider::CopyTextureFence::ProcessResult() { |
| 235 ~CopyTextureFence() override {} | |
| 236 | |
| 237 void ProcessResult() { | |
| 238 unsigned time_elapsed_us = 0; | 228 unsigned time_elapsed_us = 0; |
| 239 gl_->GetQueryObjectuivEXT(query_id_, GL_QUERY_RESULT_EXT, &time_elapsed_us); | 229 gl_->GetQueryObjectuivEXT(query_id_, GL_QUERY_RESULT_EXT, &time_elapsed_us); |
| 240 UMA_HISTOGRAM_CUSTOM_COUNTS("Renderer4.CopyTextureLatency", time_elapsed_us, | 230 UMA_HISTOGRAM_CUSTOM_COUNTS("Renderer4.CopyTextureLatency", time_elapsed_us, |
| 241 0, 256000, 50); | 231 0, 256000, 50); |
| 242 } | 232 } |
| 243 | 233 |
| 244 gpu::gles2::GLES2Interface* gl_; | |
| 245 unsigned query_id_; | |
| 246 | |
| 247 DISALLOW_COPY_AND_ASSIGN(CopyTextureFence); | |
| 248 }; | |
| 249 | |
| 250 } // namespace | |
| 251 | |
| 252 ResourceProvider::Resource::~Resource() {} | 234 ResourceProvider::Resource::~Resource() {} |
| 253 | 235 |
| 254 ResourceProvider::Resource::Resource(GLuint texture_id, | 236 ResourceProvider::Resource::Resource(GLuint texture_id, |
| 255 const gfx::Size& size, | 237 const gfx::Size& size, |
| 256 Origin origin, | 238 Origin origin, |
| 257 GLenum target, | 239 GLenum target, |
| 258 GLenum filter, | 240 GLenum filter, |
| 259 GLenum texture_pool, | 241 GLenum texture_pool, |
| 260 GLint wrap_mode, | 242 GLint wrap_mode, |
| 261 TextureHint hint, | 243 TextureHint hint, |
| (...skipping 1796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2058 } | 2040 } |
| 2059 | 2041 |
| 2060 class GrContext* ResourceProvider::GrContext(bool worker_context) const { | 2042 class GrContext* ResourceProvider::GrContext(bool worker_context) const { |
| 2061 ContextProvider* context_provider = | 2043 ContextProvider* context_provider = |
| 2062 worker_context ? output_surface_->worker_context_provider() | 2044 worker_context ? output_surface_->worker_context_provider() |
| 2063 : output_surface_->context_provider(); | 2045 : output_surface_->context_provider(); |
| 2064 return context_provider ? context_provider->GrContext() : NULL; | 2046 return context_provider ? context_provider->GrContext() : NULL; |
| 2065 } | 2047 } |
| 2066 | 2048 |
| 2067 } // namespace cc | 2049 } // namespace cc |
| OLD | NEW |