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

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

Issue 10837009: histograms for gpu program cache (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fixes for merge + microseconds Created 8 years, 4 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
« no previous file with comments | « no previous file | gpu/command_buffer/service/program_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/sha1.h" 9 #include "base/sha1.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length); 93 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length);
94 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) { 94 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) {
95 return; 95 return;
96 } 96 }
97 scoped_array<char> binary(new char[length]); 97 scoped_array<char> binary(new char[length]);
98 glGetProgramBinary(program, 98 glGetProgramBinary(program,
99 length, 99 length,
100 NULL, 100 NULL,
101 &format, 101 &format,
102 binary.get()); 102 binary.get());
103 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.ProgramBinarySizeBytes", length);
103 104
104 char a_sha[kHashLength]; 105 char a_sha[kHashLength];
105 char b_sha[kHashLength]; 106 char b_sha[kHashLength];
106 ComputeShaderHash(*shader_a->deferred_compilation_source(), a_sha); 107 ComputeShaderHash(*shader_a->deferred_compilation_source(), a_sha);
107 ComputeShaderHash(*shader_b->deferred_compilation_source(), b_sha); 108 ComputeShaderHash(*shader_b->deferred_compilation_source(), b_sha);
108 109
109 char sha[kHashLength]; 110 char sha[kHashLength];
110 ComputeProgramHash(a_sha, 111 ComputeProgramHash(a_sha,
111 b_sha, 112 b_sha,
112 bind_attrib_location_map, 113 bind_attrib_location_map,
113 sha); 114 sha);
114 const std::string sha_string(sha, sizeof(sha)); 115 const std::string sha_string(sha, sizeof(sha));
115 116
117 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeBeforeKb",
118 curr_size_bytes_ / 1024);
119
116 if (store_.find(sha_string) != store_.end()) { 120 if (store_.find(sha_string) != store_.end()) {
117 const StoreMap::iterator found = store_.find(sha_string); 121 const StoreMap::iterator found = store_.find(sha_string);
118 const ProgramCacheValue* evicting = found->second; 122 const ProgramCacheValue* evicting = found->second;
119 curr_size_bytes_ -= evicting->length; 123 curr_size_bytes_ -= evicting->length;
120 Evict(sha_string, evicting->shader_0_hash, evicting->shader_1_hash); 124 Evict(sha_string, evicting->shader_0_hash, evicting->shader_1_hash);
121 store_.erase(found); 125 store_.erase(found);
122 } 126 }
123 127
124 while (curr_size_bytes_ + length > max_size_bytes_) { 128 while (curr_size_bytes_ + length > max_size_bytes_) {
125 DCHECK(!eviction_helper_.IsEmpty()); 129 DCHECK(!eviction_helper_.IsEmpty());
126 const std::string* program = eviction_helper_.PeekKey(); 130 const std::string* program = eviction_helper_.PeekKey();
127 const StoreMap::iterator found = store_.find(*program); 131 const StoreMap::iterator found = store_.find(*program);
128 const ProgramCacheValue* evicting = found->second.get(); 132 const ProgramCacheValue* evicting = found->second.get();
129 curr_size_bytes_ -= evicting->length; 133 curr_size_bytes_ -= evicting->length;
130 Evict(*program, evicting->shader_0_hash, evicting->shader_1_hash); 134 Evict(*program, evicting->shader_0_hash, evicting->shader_1_hash);
131 store_.erase(found); 135 store_.erase(found);
132 eviction_helper_.PopKey(); 136 eviction_helper_.PopKey();
133 } 137 }
134 store_[sha_string] = new ProgramCacheValue(length, 138 store_[sha_string] = new ProgramCacheValue(length,
135 format, 139 format,
136 binary.release(), 140 binary.release(),
137 a_sha, 141 a_sha,
138 shader_a->attrib_map(), 142 shader_a->attrib_map(),
139 shader_a->uniform_map(), 143 shader_a->uniform_map(),
140 b_sha, 144 b_sha,
141 shader_b->attrib_map(), 145 shader_b->attrib_map(),
142 shader_b->uniform_map()); 146 shader_b->uniform_map());
143 curr_size_bytes_ += length; 147 curr_size_bytes_ += length;
144 eviction_helper_.KeyUsed(sha_string); 148 eviction_helper_.KeyUsed(sha_string);
149
150 UMA_HISTOGRAM_COUNTS("GPU.ProgramCache.MemorySizeAfterKb",
151 curr_size_bytes_ / 1024);
152
145 LinkedProgramCacheSuccess(sha_string, 153 LinkedProgramCacheSuccess(sha_string,
146 std::string(a_sha, kHashLength), 154 std::string(a_sha, kHashLength),
147 std::string(b_sha, kHashLength)); 155 std::string(b_sha, kHashLength));
148 } 156 }
149 157
150 MemoryProgramCache::ProgramCacheValue::ProgramCacheValue( 158 MemoryProgramCache::ProgramCacheValue::ProgramCacheValue(
151 GLsizei _length, 159 GLsizei _length,
152 GLenum _format, 160 GLenum _format,
153 const char* _data, 161 const char* _data,
154 const char* _shader_0_hash, 162 const char* _shader_0_hash,
155 const ShaderTranslator::VariableMap& _attrib_map_0, 163 const ShaderTranslator::VariableMap& _attrib_map_0,
156 const ShaderTranslator::VariableMap& _uniform_map_0, 164 const ShaderTranslator::VariableMap& _uniform_map_0,
157 const char* _shader_1_hash, 165 const char* _shader_1_hash,
158 const ShaderTranslator::VariableMap& _attrib_map_1, 166 const ShaderTranslator::VariableMap& _attrib_map_1,
159 const ShaderTranslator::VariableMap& _uniform_map_1) 167 const ShaderTranslator::VariableMap& _uniform_map_1)
160 : length(_length), 168 : length(_length),
161 format(_format), 169 format(_format),
162 data(_data), 170 data(_data),
163 shader_0_hash(_shader_0_hash, kHashLength), 171 shader_0_hash(_shader_0_hash, kHashLength),
164 attrib_map_0(_attrib_map_0), 172 attrib_map_0(_attrib_map_0),
165 uniform_map_0(_uniform_map_0), 173 uniform_map_0(_uniform_map_0),
166 shader_1_hash(_shader_1_hash, kHashLength), 174 shader_1_hash(_shader_1_hash, kHashLength),
167 attrib_map_1(_attrib_map_1), 175 attrib_map_1(_attrib_map_1),
168 uniform_map_1(_uniform_map_1) {} 176 uniform_map_1(_uniform_map_1) {}
169 177
170 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() {} 178 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() {}
171 179
172 } // namespace gles2 180 } // namespace gles2
173 } // namespace gpu 181 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/command_buffer/service/program_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698