Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: gpu/command_buffer/service/memory_program_cache.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "gpu/command_buffer/common/constants.h" 12 #include "gpu/command_buffer/common/constants.h"
13 #include "gpu/command_buffer/service/disk_cache_proto.pb.h" 13 #include "gpu/command_buffer/service/disk_cache_proto.pb.h"
14 #include "gpu/command_buffer/service/gl_utils.h" 14 #include "gpu/command_buffer/service/gl_utils.h"
15 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 15 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
16 #include "gpu/command_buffer/service/gpu_switches.h" 16 #include "gpu/command_buffer/service/gpu_switches.h"
17 #include "gpu/command_buffer/service/shader_manager.h" 17 #include "gpu/command_buffer/service/shader_manager.h"
18 #include "gpu/command_buffer/service/shader_translator.h"
19 #include "ui/gl/gl_bindings.h" 18 #include "ui/gl/gl_bindings.h"
20 19
21 namespace { 20 namespace {
22 21
23 size_t GetCacheSizeBytes() { 22 size_t GetCacheSizeBytes() {
24 const base::CommandLine* command_line = 23 const base::CommandLine* command_line =
25 base::CommandLine::ForCurrentProcess(); 24 base::CommandLine::ForCurrentProcess();
26 if (command_line->HasSwitch(switches::kGpuProgramCacheSizeKb)) { 25 if (command_line->HasSwitch(switches::kGpuProgramCacheSizeKb)) {
27 size_t size; 26 size_t size;
28 if (base::StringToSizeT( 27 if (base::StringToSizeT(
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 MemoryProgramCache::~MemoryProgramCache() {} 165 MemoryProgramCache::~MemoryProgramCache() {}
167 166
168 void MemoryProgramCache::ClearBackend() { 167 void MemoryProgramCache::ClearBackend() {
169 store_.Clear(); 168 store_.Clear();
170 DCHECK_EQ(0U, curr_size_bytes_); 169 DCHECK_EQ(0U, curr_size_bytes_);
171 } 170 }
172 171
173 ProgramCache::ProgramLoadResult MemoryProgramCache::LoadLinkedProgram( 172 ProgramCache::ProgramLoadResult MemoryProgramCache::LoadLinkedProgram(
174 GLuint program, 173 GLuint program,
175 Shader* shader_a, 174 Shader* shader_a,
176 const ShaderTranslatorInterface* translator_a,
177 Shader* shader_b, 175 Shader* shader_b,
178 const ShaderTranslatorInterface* translator_b,
179 const LocationMap* bind_attrib_location_map, 176 const LocationMap* bind_attrib_location_map,
180 const ShaderCacheCallback& shader_callback) { 177 const ShaderCacheCallback& shader_callback) {
181 char a_sha[kHashLength]; 178 char a_sha[kHashLength];
182 char b_sha[kHashLength]; 179 char b_sha[kHashLength];
183 DCHECK(shader_a && !shader_a->last_compiled_source().empty() && 180 DCHECK(shader_a && !shader_a->last_compiled_source().empty() &&
184 shader_b && !shader_b->last_compiled_source().empty()); 181 shader_b && !shader_b->last_compiled_source().empty());
185 ComputeShaderHash( 182 ComputeShaderHash(
186 shader_a->last_compiled_source(), translator_a, a_sha); 183 shader_a->last_compiled_signature(), a_sha);
187 ComputeShaderHash( 184 ComputeShaderHash(
188 shader_b->last_compiled_source(), translator_b, b_sha); 185 shader_b->last_compiled_signature(), b_sha);
189 186
190 char sha[kHashLength]; 187 char sha[kHashLength];
191 ComputeProgramHash(a_sha, 188 ComputeProgramHash(a_sha,
192 b_sha, 189 b_sha,
193 bind_attrib_location_map, 190 bind_attrib_location_map,
194 sha); 191 sha);
195 const std::string sha_string(sha, kHashLength); 192 const std::string sha_string(sha, kHashLength);
196 193
197 ProgramMRUCache::iterator found = store_.Get(sha_string); 194 ProgramMRUCache::iterator found = store_.Get(sha_string);
198 if (found == store_.end()) { 195 if (found == store_.end()) {
(...skipping 29 matching lines...) Expand all
228 FillShaderProto(proto->mutable_fragment_shader(), b_sha, shader_b); 225 FillShaderProto(proto->mutable_fragment_shader(), b_sha, shader_b);
229 RunShaderCallback(shader_callback, proto.get(), sha_string); 226 RunShaderCallback(shader_callback, proto.get(), sha_string);
230 } 227 }
231 228
232 return PROGRAM_LOAD_SUCCESS; 229 return PROGRAM_LOAD_SUCCESS;
233 } 230 }
234 231
235 void MemoryProgramCache::SaveLinkedProgram( 232 void MemoryProgramCache::SaveLinkedProgram(
236 GLuint program, 233 GLuint program,
237 const Shader* shader_a, 234 const Shader* shader_a,
238 const ShaderTranslatorInterface* translator_a,
239 const Shader* shader_b, 235 const Shader* shader_b,
240 const ShaderTranslatorInterface* translator_b,
241 const LocationMap* bind_attrib_location_map, 236 const LocationMap* bind_attrib_location_map,
242 const ShaderCacheCallback& shader_callback) { 237 const ShaderCacheCallback& shader_callback) {
243 GLenum format; 238 GLenum format;
244 GLsizei length = 0; 239 GLsizei length = 0;
245 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length); 240 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length);
246 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) { 241 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) {
247 return; 242 return;
248 } 243 }
249 scoped_ptr<char[]> binary(new char[length]); 244 scoped_ptr<char[]> binary(new char[length]);
250 glGetProgramBinary(program, 245 glGetProgramBinary(program,
251 length, 246 length,
252 NULL, 247 NULL,
253 &format, 248 &format,
254 binary.get()); 249 binary.get());
255 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.ProgramBinarySizeBytes", length); 250 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.ProgramBinarySizeBytes", length);
256 251
257 char a_sha[kHashLength]; 252 char a_sha[kHashLength];
258 char b_sha[kHashLength]; 253 char b_sha[kHashLength];
259 DCHECK(shader_a && !shader_a->last_compiled_source().empty() && 254 DCHECK(shader_a && !shader_a->last_compiled_source().empty() &&
260 shader_b && !shader_b->last_compiled_source().empty()); 255 shader_b && !shader_b->last_compiled_source().empty());
261 ComputeShaderHash( 256 ComputeShaderHash(
262 shader_a->last_compiled_source(), translator_a, a_sha); 257 shader_a->last_compiled_signature(), a_sha);
263 ComputeShaderHash( 258 ComputeShaderHash(
264 shader_b->last_compiled_source(), translator_b, b_sha); 259 shader_b->last_compiled_signature(), b_sha);
265 260
266 char sha[kHashLength]; 261 char sha[kHashLength];
267 ComputeProgramHash(a_sha, 262 ComputeProgramHash(a_sha,
268 b_sha, 263 b_sha,
269 bind_attrib_location_map, 264 bind_attrib_location_map,
270 sha); 265 sha);
271 const std::string sha_string(sha, sizeof(sha)); 266 const std::string sha_string(sha, sizeof(sha));
272 267
273 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeBeforeKb", 268 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeBeforeKb",
274 curr_size_bytes_ / 1024); 269 curr_size_bytes_ / 1024);
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 program_cache_->LinkedProgramCacheSuccess(program_hash); 403 program_cache_->LinkedProgramCacheSuccess(program_hash);
409 } 404 }
410 405
411 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() { 406 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() {
412 program_cache_->curr_size_bytes_ -= length_; 407 program_cache_->curr_size_bytes_ -= length_;
413 program_cache_->Evict(program_hash_); 408 program_cache_->Evict(program_hash_);
414 } 409 }
415 410
416 } // namespace gles2 411 } // namespace gles2
417 } // namespace gpu 412 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.h ('k') | gpu/command_buffer/service/memory_program_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698