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/memory_program_cache.h" | 5 #include "gpu/command_buffer/service/memory_program_cache.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/sha1.h" | 10 #include "base/sha1.h" |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 ProgramCache::ProgramLoadResult MemoryProgramCache::LoadLinkedProgram( | 173 ProgramCache::ProgramLoadResult MemoryProgramCache::LoadLinkedProgram( |
174 GLuint program, | 174 GLuint program, |
175 Shader* shader_a, | 175 Shader* shader_a, |
176 const ShaderTranslatorInterface* translator_a, | 176 const ShaderTranslatorInterface* translator_a, |
177 Shader* shader_b, | 177 Shader* shader_b, |
178 const ShaderTranslatorInterface* translator_b, | 178 const ShaderTranslatorInterface* translator_b, |
179 const LocationMap* bind_attrib_location_map, | 179 const LocationMap* bind_attrib_location_map, |
180 const ShaderCacheCallback& shader_callback) { | 180 const ShaderCacheCallback& shader_callback) { |
181 char a_sha[kHashLength]; | 181 char a_sha[kHashLength]; |
182 char b_sha[kHashLength]; | 182 char b_sha[kHashLength]; |
183 DCHECK(shader_a && !shader_a->signature_source().empty() && | 183 DCHECK(shader_a && !shader_a->last_compiled_source().empty() && |
184 shader_b && !shader_b->signature_source().empty()); | 184 shader_b && !shader_b->last_compiled_source().empty()); |
185 ComputeShaderHash( | 185 ComputeShaderHash( |
186 shader_a->signature_source(), translator_a, a_sha); | 186 shader_a->last_compiled_source(), translator_a, a_sha); |
187 ComputeShaderHash( | 187 ComputeShaderHash( |
188 shader_b->signature_source(), translator_b, b_sha); | 188 shader_b->last_compiled_source(), translator_b, b_sha); |
189 | 189 |
190 char sha[kHashLength]; | 190 char sha[kHashLength]; |
191 ComputeProgramHash(a_sha, | 191 ComputeProgramHash(a_sha, |
192 b_sha, | 192 b_sha, |
193 bind_attrib_location_map, | 193 bind_attrib_location_map, |
194 sha); | 194 sha); |
195 const std::string sha_string(sha, kHashLength); | 195 const std::string sha_string(sha, kHashLength); |
196 | 196 |
197 ProgramMRUCache::iterator found = store_.Get(sha_string); | 197 ProgramMRUCache::iterator found = store_.Get(sha_string); |
198 if (found == store_.end()) { | 198 if (found == store_.end()) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 scoped_ptr<char[]> binary(new char[length]); | 249 scoped_ptr<char[]> binary(new char[length]); |
250 glGetProgramBinary(program, | 250 glGetProgramBinary(program, |
251 length, | 251 length, |
252 NULL, | 252 NULL, |
253 &format, | 253 &format, |
254 binary.get()); | 254 binary.get()); |
255 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.ProgramBinarySizeBytes", length); | 255 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.ProgramBinarySizeBytes", length); |
256 | 256 |
257 char a_sha[kHashLength]; | 257 char a_sha[kHashLength]; |
258 char b_sha[kHashLength]; | 258 char b_sha[kHashLength]; |
259 DCHECK(shader_a && !shader_a->signature_source().empty() && | 259 DCHECK(shader_a && !shader_a->last_compiled_source().empty() && |
260 shader_b && !shader_b->signature_source().empty()); | 260 shader_b && !shader_b->last_compiled_source().empty()); |
261 ComputeShaderHash( | 261 ComputeShaderHash( |
262 shader_a->signature_source(), translator_a, a_sha); | 262 shader_a->last_compiled_source(), translator_a, a_sha); |
263 ComputeShaderHash( | 263 ComputeShaderHash( |
264 shader_b->signature_source(), translator_b, b_sha); | 264 shader_b->last_compiled_source(), translator_b, b_sha); |
265 | 265 |
266 char sha[kHashLength]; | 266 char sha[kHashLength]; |
267 ComputeProgramHash(a_sha, | 267 ComputeProgramHash(a_sha, |
268 b_sha, | 268 b_sha, |
269 bind_attrib_location_map, | 269 bind_attrib_location_map, |
270 sha); | 270 sha); |
271 const std::string sha_string(sha, sizeof(sha)); | 271 const std::string sha_string(sha, sizeof(sha)); |
272 | 272 |
273 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeBeforeKb", | 273 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeBeforeKb", |
274 curr_size_bytes_ / 1024); | 274 curr_size_bytes_ / 1024); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 program_cache_->LinkedProgramCacheSuccess(program_hash); | 408 program_cache_->LinkedProgramCacheSuccess(program_hash); |
409 } | 409 } |
410 | 410 |
411 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() { | 411 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() { |
412 program_cache_->curr_size_bytes_ -= length_; | 412 program_cache_->curr_size_bytes_ -= length_; |
413 program_cache_->Evict(program_hash_); | 413 program_cache_->Evict(program_hash_); |
414 } | 414 } |
415 | 415 |
416 } // namespace gles2 | 416 } // namespace gles2 |
417 } // namespace gpu | 417 } // namespace gpu |
OLD | NEW |