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

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: Style fixes, thorough tests 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 gpu {
11 namespace gles2 {
12
13 class NoBackendProgramCache : public ProgramCache {
14 public:
15 virtual ProgramLoadResult LoadLinkedProgram(
16 const GLuint program,
greggman 2012/07/10 21:43:30 style: for unused parameters the format is return
dmurph 2012/07/11 23:32:52 Done.
17 ShaderManager::ShaderInfo* shader_a,
18 ShaderManager::ShaderInfo* shader_b,
19 const LocationMap* bind_attrib_location_map) const OVERRIDE {
20 return PROGRAM_LOAD_SUCCESS;
21 }
22 virtual void SaveLinkedProgram(
greggman 2012/07/10 21:43:30 see above
dmurph 2012/07/11 23:32:52 Done.
23 const GLuint program,
24 const ShaderManager::ShaderInfo* shader_a,
25 const ShaderManager::ShaderInfo* shader_b,
26 const LocationMap* bind_attrib_location_map) OVERRIDE { }
27
28 virtual void ClearBackend() OVERRIDE {}
29
30 void SaySuccessfullyCached(const std::string& shader1,
31 const std::string& shader2,
greggman 2012/07/10 21:43:30 style: indent
dmurph 2012/07/11 23:32:52 Done.
32 std::map<std::string, GLint>* attrib_map) {
33 char a_sha[kHashLength];
34 char b_sha[kHashLength];
35 ComputeShaderHash(shader1, a_sha);
36 ComputeShaderHash(shader2, b_sha);
37
38 char sha[kHashLength];
39 ComputeProgramHash(a_sha,
40 b_sha,
41 attrib_map,
42 sha);
43 const std::string shaString(sha, kHashLength);
44
45 LinkedProgramCacheSuccess(shaString,
46 std::string(a_sha, kHashLength),
47 std::string(b_sha, kHashLength));
48 }
49
50 void ComputeShaderHash(const std::string& shader,
51 char* result) const {
52 ProgramCache::ComputeShaderHash(shader, result);
53 }
54
55 void ComputeProgramHash(const char* hashed_shader_0,
56 const char* hashed_shader_1,
57 const LocationMap* bind_attrib_location_map,
58 char* result) const {
59 ProgramCache::ComputeProgramHash(hashed_shader_0,
60 hashed_shader_1,
61 bind_attrib_location_map,
62 result);
63 }
64
65 void Evict(const std::string& program_hash,
66 const std::string& shader_0_hash,
67 const std::string& shader_1_hash) {
68 ProgramCache::Evict(program_hash, shader_0_hash, shader_1_hash);
69 }
70 };
71
72 class ProgramCacheTest : public testing::Test {
73 public:
74 ProgramCacheTest() :
75 cache_(new NoBackendProgramCache()) { }
76
77 protected:
78 scoped_ptr<NoBackendProgramCache> cache_;
79 };
80
81 TEST_F(ProgramCacheTest, ProgramCacheCompilationStatus) {
82 const std::string shader1 = "abcd1234";
83 {
84 std::string shader = shader1;
85 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
86 cache_->GetShaderCompilationStatus(shader));
87 cache_->ShaderCompilationSucceeded(shader);
88 shader.clear();
89 }
90 // make sure it was copied
91 EXPECT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
92 cache_->GetShaderCompilationStatus(shader1));
93 }
94
95 TEST_F(ProgramCacheTest, ProgramCacheProgramLinkStatus) {
96 const std::string shader1 = "abcd1234";
97 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
98 {
99 std::string shader_a = shader1;
100 std::string shader_b = shader2;
101 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
102 cache_->GetLinkedProgramStatus(shader_a, shader_b, NULL));
103 cache_->SaySuccessfullyCached(shader_a, shader_b, NULL);
104
105 shader_a.clear();
106 shader_b.clear();
107 }
108 // make sure it was copied
109 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
110 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
111 }
112
113 TEST_F(ProgramCacheTest, ProgramCacheEviction) {
114 const std::string shader1 = "abcd1234";
115 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
116 cache_->ShaderCompilationSucceeded(shader1);
117 cache_->ShaderCompilationSucceeded(shader2);
118 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
119 char a_sha[ProgramCache::kHashLength];
120 char b_sha[ProgramCache::kHashLength];
121 cache_->ComputeShaderHash(shader1, a_sha);
122 cache_->ComputeShaderHash(shader2, b_sha);
123
124 char sha[ProgramCache::kHashLength];
125 cache_->ComputeProgramHash(a_sha,
126 b_sha,
greggman 2012/07/10 21:43:30 style: indent
dmurph 2012/07/11 23:32:52 Done.
127 NULL,
128 sha);
129 cache_->Evict(std::string(sha, ProgramCache::kHashLength),
130 std::string(a_sha, ProgramCache::kHashLength),
greggman 2012/07/10 21:43:30 style: indent
dmurph 2012/07/11 23:32:52 Done.
131 std::string(b_sha, ProgramCache::kHashLength));
132 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
133 cache_->GetShaderCompilationStatus(shader1));
134 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
135 cache_->GetShaderCompilationStatus(shader2));
136 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
137 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
138 }
139
140 TEST_F(ProgramCacheTest, ProgramCacheEvictionWithReusedShader) {
141 const std::string shader1 = "abcd1234";
142 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
143 const std::string shader3 = "asbjbbjj239a";
144 cache_->ShaderCompilationSucceeded(shader1);
145 cache_->ShaderCompilationSucceeded(shader2);
146 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
147 cache_->ShaderCompilationSucceeded(shader3);
148 cache_->SaySuccessfullyCached(shader1, shader3, NULL);
149
150 char a_sha[ProgramCache::kHashLength];
151 char b_sha[ProgramCache::kHashLength];
152 char c_sha[ProgramCache::kHashLength];
153 cache_->ComputeShaderHash(shader1, a_sha);
154 cache_->ComputeShaderHash(shader2, b_sha);
155 cache_->ComputeShaderHash(shader3, c_sha);
156
157 char sha[ProgramCache::kHashLength];
158 cache_->ComputeProgramHash(a_sha,
159 b_sha,
160 NULL,
161 sha);
162 cache_->Evict(std::string(sha, ProgramCache::kHashLength),
163 std::string(a_sha, ProgramCache::kHashLength),
164 std::string(b_sha, ProgramCache::kHashLength));
165 EXPECT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
166 cache_->GetShaderCompilationStatus(shader1));
167 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
168 cache_->GetShaderCompilationStatus(shader2));
169 EXPECT_EQ(ProgramCache::COMPILATION_SUCCEEDED,
170 cache_->GetShaderCompilationStatus(shader3));
171 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
172 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
173 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
174 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
175
176
177 cache_->ComputeProgramHash(a_sha,
178 c_sha,
179 NULL,
180 sha);
181 cache_->Evict(std::string(sha, ProgramCache::kHashLength),
182 std::string(a_sha, ProgramCache::kHashLength),
183 std::string(c_sha, ProgramCache::kHashLength));
184 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
185 cache_->GetShaderCompilationStatus(shader1));
186 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
187 cache_->GetShaderCompilationStatus(shader2));
188 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
189 cache_->GetShaderCompilationStatus(shader3));
190 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
191 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
192 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
193 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
194 }
195
196 TEST_F(ProgramCacheTest, ProgramCacheClear) {
197 const std::string shader1 = "abcd1234";
198 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
199 const std::string shader3 = "asbjbbjj239a";
200 cache_->ShaderCompilationSucceeded(shader1);
201 cache_->ShaderCompilationSucceeded(shader2);
202 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
203 cache_->ShaderCompilationSucceeded(shader3);
204 cache_->SaySuccessfullyCached(shader1, shader3, NULL);
205 cache_->Clear();
206 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
207 cache_->GetShaderCompilationStatus(shader1));
208 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
209 cache_->GetShaderCompilationStatus(shader2));
210 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN,
211 cache_->GetShaderCompilationStatus(shader3));
212 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
213 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
214 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
215 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
216 }
217
218 } // namespace gles2
219 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698