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

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

Issue 10534173: GPU Program Caching (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Patch Created 8 years, 5 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/service/program_cache.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11 typedef std::map<std::string, GLint> LocationMap;
greggman 2012/06/26 23:00:27 sorry to harp on this but just to make it clear. I
dmurph 2012/07/04 00:01:29 Done.
12 } // anonymous namespace
13
14 namespace gpu {
15 namespace gles2 {
16
17 class NoBackendProgramCache : public ProgramCache {
18 public:
19 bool LoadLinkedProgram(const GLuint program,
20 ShaderManager::ShaderInfo* shader_a,
21 ShaderManager::ShaderInfo* shader_b,
22 const LocationMap* bind_attrib_location_map) const {
23 return true;
24 }
25 void SaveLinkedProgram(const GLuint program,
26 const ShaderManager::ShaderInfo* shader_a,
27 const ShaderManager::ShaderInfo* shader_b,
28 const LocationMap* bind_attrib_location_map) { }
29
30 void ClearBackend() {}
31
32 void SaySuccessfullyCached(const std::string& shader1,
33 const std::string& shader2,
34 std::map<std::string, GLint>* attrib_map) {
35 char a_sha[kHashLength];
36 char b_sha[kHashLength];
37 ComputeShaderHash(shader1, a_sha);
38 ComputeShaderHash(shader2, b_sha);
39
40 char sha[kHashLength];
41 ComputeProgramHash(a_sha,
42 b_sha,
43 attrib_map,
44 sha);
45 const std::string shaString(sha, kHashLength);
46
47 LinkedProgramCacheSuccess(shaString,
48 std::string(a_sha, kHashLength),
greggman 2012/06/26 23:00:27 style: indenting
dmurph 2012/07/04 00:01:29 Done.
49 std::string(b_sha, kHashLength));
50 }
51
52 void ComputeShaderHash(const std::string& shader,
53 char* result) const {
54 ProgramCache::ComputeShaderHash(shader, result);
55 }
56
57 void ComputeProgramHash(const char* hashed_shader_0,
58 const char* hashed_shader_1,
59 const LocationMap* bind_attrib_location_map,
60 char* result) const {
61 ProgramCache::ComputeProgramHash(hashed_shader_0,
62 hashed_shader_1,
63 bind_attrib_location_map,
64 result);
65 }
66
67 void evict(const std::string& program_hash,
greggman 2012/06/26 23:00:27 style: functions are UpperCase
68 const std::string& shader_0_hash,
69 const std::string& shader_1_hash) {
70 ProgramCache::Evict(program_hash, shader_0_hash, shader_1_hash);
71 }
72
73 const uint32 hash_length() const {
greggman 2012/06/26 23:00:27 Is there a reason have this vs just using ProgramC
dmurph 2012/07/04 00:01:29 it was because I has kHashLength as a protected fi
74 return ProgramCache::kHashLength;
75 }
76 };
77
78 class ProgramCacheTest : public testing::Test {
79 public:
80 ProgramCacheTest() :
81 cache_(new NoBackendProgramCache()) { }
82
83 protected:
84 scoped_ptr<NoBackendProgramCache> cache_;
85 };
86
87 TEST_F(ProgramCacheTest, ProgramCacheCompilationStatus) {
88 const std::string shader1 = "abcd1234";
89 {
greggman 2012/06/26 23:00:27 what's this extra code block for?
dmurph 2012/07/04 00:01:29 So the strings given will be destructed, to make s
90 std::string shader = shader1;
91 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
92 cache_->GetShaderCompilationStatus(shader));
93 cache_->ShaderCompilationSucceeded(shader);
94 shader.clear();
greggman 2012/06/26 23:00:27 why are you clearing this string?
dmurph 2012/07/04 00:01:29 same. I can get rid of these checks if they seem
95 }
96 // make sure it was copied
97 ASSERT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
98 cache_->GetShaderCompilationStatus(shader1));
99 }
100
101 TEST_F(ProgramCacheTest, ProgramCacheProgramLinkStatus) {
102 const std::string shader1 = "abcd1234";
103 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
104 {
greggman 2012/06/26 23:00:27 same as above. What's the extra code block for and
105 std::string shaderA = shader1;
greggman 2012/06/26 23:00:27 style: variables are under_score
106 std::string shaderB = shader2;
107 ASSERT_EQ(ProgramCache::LINK_UNKNOWN,
108 cache_->GetLinkedProgramStatus(shaderA, shaderB, NULL));
109 cache_->SaySuccessfullyCached(shaderA, shaderB, NULL);
110
111 shaderA.clear();
112 shaderB.clear();
113 }
114 // make sure it was copied
115 ASSERT_EQ(ProgramCache::LINK_SUCCEEDED,
116 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
117 }
118
119 TEST_F(ProgramCacheTest, ProgramCacheEviction) {
120 const std::string shader1 = "abcd1234";
121 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
122 cache_->ShaderCompilationSucceeded(shader1);
123 cache_->ShaderCompilationSucceeded(shader2);
124 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
125 const uint32 kHashLength = cache_->hash_length();
126 char a_sha[kHashLength];
greggman 2012/06/26 23:00:27 dynamically sized c arrays are not standard c. Thi
dmurph 2012/07/04 00:01:29 Done.
127 char b_sha[kHashLength];
128 cache_->ComputeShaderHash(shader1, a_sha);
129 cache_->ComputeShaderHash(shader2, b_sha);
130
131 char sha[kHashLength];
132 cache_->ComputeProgramHash(a_sha,
133 b_sha,
greggman 2012/06/26 23:00:27 style: indenting
dmurph 2012/07/04 00:01:29 Done.
134 NULL,
135 sha);
136 cache_->evict(std::string(sha, kHashLength),
137 std::string(a_sha, kHashLength),
greggman 2012/06/26 23:00:27 style: indenting
dmurph 2012/07/04 00:01:29 Done.
138 std::string(b_sha, kHashLength));
139 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
140 cache_->GetShaderCompilationStatus(shader1));
141 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
142 cache_->GetShaderCompilationStatus(shader2));
143 ASSERT_EQ(ProgramCache::LINK_UNKNOWN,
144 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
145 }
146
147 TEST_F(ProgramCacheTest, ProgramCacheEvictionWithReusedShader) {
148 const std::string shader1 = "abcd1234";
149 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
150 const std::string shader3 = "asbjbbjj239a";
151 cache_->ShaderCompilationSucceeded(shader1);
152 cache_->ShaderCompilationSucceeded(shader2);
153 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
154 cache_->ShaderCompilationSucceeded(shader3);
155 cache_->SaySuccessfullyCached(shader1, shader3, NULL);
156
157 const uint32 kHashLength = cache_->hash_length();
158 char a_sha[kHashLength];
159 char b_sha[kHashLength];
160 char c_sha[kHashLength];
161 cache_->ComputeShaderHash(shader1, a_sha);
162 cache_->ComputeShaderHash(shader2, b_sha);
163 cache_->ComputeShaderHash(shader3, c_sha);
164
165 char sha[kHashLength];
166 cache_->ComputeProgramHash(a_sha,
167 b_sha,
168 NULL,
169 sha);
170 cache_->evict(std::string(sha, kHashLength),
171 std::string(a_sha, kHashLength),
172 std::string(b_sha, kHashLength));
173 ASSERT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
174 cache_->GetShaderCompilationStatus(shader1));
175 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
176 cache_->GetShaderCompilationStatus(shader2));
177 ASSERT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
178 cache_->GetShaderCompilationStatus(shader3));
179 ASSERT_EQ(ProgramCache::LINK_UNKNOWN,
180 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
181
182 cache_->ComputeProgramHash(a_sha,
183 c_sha,
184 NULL,
185 sha);
186 cache_->evict(std::string(sha, kHashLength),
187 std::string(a_sha, kHashLength),
188 std::string(c_sha, kHashLength));
189 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
190 cache_->GetShaderCompilationStatus(shader1));
191 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
192 cache_->GetShaderCompilationStatus(shader2));
193 ASSERT_EQ(ProgramCache::COMPILATION_UNKNOWN,
194 cache_->GetShaderCompilationStatus(shader3));
195 }
196
197 } // namespace gles2
198 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698