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

Side by Side Diff: gpu/command_buffer/service/program_cache_unittest.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/program_cache.h" 5 #include "gpu/command_buffer/service/program_cache.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "gpu/command_buffer/service/mocks.h" 8 #include "gpu/command_buffer/service/mocks.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 using ::testing::Return; 11 using ::testing::Return;
12 12
13 namespace gpu { 13 namespace gpu {
14 namespace gles2 { 14 namespace gles2 {
15 15
16 class NoBackendProgramCache : public ProgramCache { 16 class NoBackendProgramCache : public ProgramCache {
17 public: 17 public:
18 ProgramLoadResult LoadLinkedProgram( 18 ProgramLoadResult LoadLinkedProgram(
19 GLuint /* program */, 19 GLuint /* program */,
20 Shader* /* shader_a */, 20 Shader* /* shader_a */,
21 const ShaderTranslatorInterface* /* translator_a */,
22 Shader* /* shader_b */, 21 Shader* /* shader_b */,
23 const ShaderTranslatorInterface* /* translator_b */,
24 const LocationMap* /* bind_attrib_location_map */, 22 const LocationMap* /* bind_attrib_location_map */,
25 const ShaderCacheCallback& /* callback */) override { 23 const ShaderCacheCallback& /* callback */) override {
26 return PROGRAM_LOAD_SUCCESS; 24 return PROGRAM_LOAD_SUCCESS;
27 } 25 }
28 void SaveLinkedProgram(GLuint /* program */, 26 void SaveLinkedProgram(GLuint /* program */,
29 const Shader* /* shader_a */, 27 const Shader* /* shader_a */,
30 const ShaderTranslatorInterface* /* translator_b */,
31 const Shader* /* shader_b */, 28 const Shader* /* shader_b */,
32 const ShaderTranslatorInterface* /* translator_b */,
33 const LocationMap* /* bind_attrib_location_map */, 29 const LocationMap* /* bind_attrib_location_map */,
34 const ShaderCacheCallback& /* callback */) override {} 30 const ShaderCacheCallback& /* callback */) override {}
35 31
36 void LoadProgram(const std::string& /* program */) override {} 32 void LoadProgram(const std::string& /* program */) override {}
37 33
38 void ClearBackend() override {} 34 void ClearBackend() override {}
39 35
40 void SaySuccessfullyCached(const std::string& shader1, 36 void SaySuccessfullyCached(const std::string& shader1,
41 const ShaderTranslatorInterface* translator_1,
42 const std::string& shader2, 37 const std::string& shader2,
43 const ShaderTranslatorInterface* translator_2,
44 std::map<std::string, GLint>* attrib_map) { 38 std::map<std::string, GLint>* attrib_map) {
45 char a_sha[kHashLength]; 39 char a_sha[kHashLength];
46 char b_sha[kHashLength]; 40 char b_sha[kHashLength];
47 ComputeShaderHash(shader1, translator_1, a_sha); 41 ComputeShaderHash(shader1, a_sha);
48 ComputeShaderHash(shader2, translator_2, b_sha); 42 ComputeShaderHash(shader2, b_sha);
49 43
50 char sha[kHashLength]; 44 char sha[kHashLength];
51 ComputeProgramHash(a_sha, 45 ComputeProgramHash(a_sha,
52 b_sha, 46 b_sha,
53 attrib_map, 47 attrib_map,
54 sha); 48 sha);
55 const std::string shaString(sha, kHashLength); 49 const std::string shaString(sha, kHashLength);
56 50
57 LinkedProgramCacheSuccess(shaString); 51 LinkedProgramCacheSuccess(shaString);
58 } 52 }
59 53
60 void ComputeShaderHash(const std::string& shader, 54 void ComputeShaderHash(const std::string& shader,
61 const ShaderTranslatorInterface* translator,
62 char* result) const { 55 char* result) const {
63 ProgramCache::ComputeShaderHash(shader, translator, result); 56 ProgramCache::ComputeShaderHash(shader, result);
64 } 57 }
65 58
66 void ComputeProgramHash(const char* hashed_shader_0, 59 void ComputeProgramHash(const char* hashed_shader_0,
67 const char* hashed_shader_1, 60 const char* hashed_shader_1,
68 const LocationMap* bind_attrib_location_map, 61 const LocationMap* bind_attrib_location_map,
69 char* result) const { 62 char* result) const {
70 ProgramCache::ComputeProgramHash(hashed_shader_0, 63 ProgramCache::ComputeProgramHash(hashed_shader_0,
71 hashed_shader_1, 64 hashed_shader_1,
72 bind_attrib_location_map, 65 bind_attrib_location_map,
73 result); 66 result);
(...skipping 14 matching lines...) Expand all
88 }; 81 };
89 82
90 TEST_F(ProgramCacheTest, LinkStatusSave) { 83 TEST_F(ProgramCacheTest, LinkStatusSave) {
91 const std::string shader1 = "abcd1234"; 84 const std::string shader1 = "abcd1234";
92 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 85 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
93 { 86 {
94 std::string shader_a = shader1; 87 std::string shader_a = shader1;
95 std::string shader_b = shader2; 88 std::string shader_b = shader2;
96 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 89 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
97 cache_->GetLinkedProgramStatus( 90 cache_->GetLinkedProgramStatus(
98 shader_a, NULL, shader_b, NULL, NULL)); 91 shader_a, shader_b, NULL));
99 cache_->SaySuccessfullyCached(shader_a, NULL, shader_b, NULL, NULL); 92 cache_->SaySuccessfullyCached(shader_a, shader_b, NULL);
100 93
101 shader_a.clear(); 94 shader_a.clear();
102 shader_b.clear(); 95 shader_b.clear();
103 } 96 }
104 // make sure it was copied 97 // make sure it was copied
105 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, 98 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
106 cache_->GetLinkedProgramStatus( 99 cache_->GetLinkedProgramStatus(
107 shader1, NULL, shader2, NULL, NULL)); 100 shader1, shader2, NULL));
108 } 101 }
109 102
110 TEST_F(ProgramCacheTest, LinkUnknownOnFragmentSourceChange) { 103 TEST_F(ProgramCacheTest, LinkUnknownOnFragmentSourceChange) {
111 const std::string shader1 = "abcd1234"; 104 const std::string shader1 = "abcd1234";
112 std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 105 std::string shader2 = "abcda sda b1~#4 bbbbb1234";
113 cache_->SaySuccessfullyCached(shader1, NULL, shader2, NULL, NULL); 106 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
114 107
115 shader2 = "different!"; 108 shader2 = "different!";
116 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 109 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
117 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 110 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
118 } 111 }
119 112
120 TEST_F(ProgramCacheTest, LinkUnknownOnVertexSourceChange) { 113 TEST_F(ProgramCacheTest, LinkUnknownOnVertexSourceChange) {
121 std::string shader1 = "abcd1234"; 114 std::string shader1 = "abcd1234";
122 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 115 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
123 cache_->SaySuccessfullyCached(shader1, NULL, shader2, NULL, NULL); 116 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
124 117
125 shader1 = "different!"; 118 shader1 = "different!";
126 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 119 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
127 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 120 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
128 } 121 }
129 122
130 TEST_F(ProgramCacheTest, StatusEviction) { 123 TEST_F(ProgramCacheTest, StatusEviction) {
131 const std::string shader1 = "abcd1234"; 124 const std::string shader1 = "abcd1234";
132 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 125 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
133 cache_->SaySuccessfullyCached(shader1, NULL, shader2, NULL, NULL); 126 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
134 char a_sha[ProgramCache::kHashLength]; 127 char a_sha[ProgramCache::kHashLength];
135 char b_sha[ProgramCache::kHashLength]; 128 char b_sha[ProgramCache::kHashLength];
136 cache_->ComputeShaderHash(shader1, NULL, a_sha); 129 cache_->ComputeShaderHash(shader1, a_sha);
137 cache_->ComputeShaderHash(shader2, NULL, b_sha); 130 cache_->ComputeShaderHash(shader2, b_sha);
138 131
139 char sha[ProgramCache::kHashLength]; 132 char sha[ProgramCache::kHashLength];
140 cache_->ComputeProgramHash(a_sha, 133 cache_->ComputeProgramHash(a_sha,
141 b_sha, 134 b_sha,
142 NULL, 135 NULL,
143 sha); 136 sha);
144 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 137 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
145 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 138 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
146 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 139 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
147 } 140 }
148 141
149 TEST_F(ProgramCacheTest, EvictionWithReusedShader) { 142 TEST_F(ProgramCacheTest, EvictionWithReusedShader) {
150 const std::string shader1 = "abcd1234"; 143 const std::string shader1 = "abcd1234";
151 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 144 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
152 const std::string shader3 = "asbjbbjj239a"; 145 const std::string shader3 = "asbjbbjj239a";
153 cache_->SaySuccessfullyCached(shader1, NULL, shader2, NULL, NULL); 146 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
154 cache_->SaySuccessfullyCached(shader1, NULL, shader3, NULL, NULL); 147 cache_->SaySuccessfullyCached(shader1, shader3, NULL);
155 148
156 char a_sha[ProgramCache::kHashLength]; 149 char a_sha[ProgramCache::kHashLength];
157 char b_sha[ProgramCache::kHashLength]; 150 char b_sha[ProgramCache::kHashLength];
158 char c_sha[ProgramCache::kHashLength]; 151 char c_sha[ProgramCache::kHashLength];
159 cache_->ComputeShaderHash(shader1, NULL, a_sha); 152 cache_->ComputeShaderHash(shader1, a_sha);
160 cache_->ComputeShaderHash(shader2, NULL, b_sha); 153 cache_->ComputeShaderHash(shader2, b_sha);
161 cache_->ComputeShaderHash(shader3, NULL, c_sha); 154 cache_->ComputeShaderHash(shader3, c_sha);
162 155
163 char sha[ProgramCache::kHashLength]; 156 char sha[ProgramCache::kHashLength];
164 cache_->ComputeProgramHash(a_sha, 157 cache_->ComputeProgramHash(a_sha,
165 b_sha, 158 b_sha,
166 NULL, 159 NULL,
167 sha); 160 sha);
168 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 161 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
169 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 162 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
170 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 163 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
171 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, 164 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
172 cache_->GetLinkedProgramStatus(shader1, NULL, shader3, NULL, NULL)); 165 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
173 166
174 167
175 cache_->ComputeProgramHash(a_sha, 168 cache_->ComputeProgramHash(a_sha,
176 c_sha, 169 c_sha,
177 NULL, 170 NULL,
178 sha); 171 sha);
179 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 172 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
180 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 173 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
181 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 174 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
182 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 175 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
183 cache_->GetLinkedProgramStatus(shader1, NULL, shader3, NULL, NULL)); 176 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
184 } 177 }
185 178
186 TEST_F(ProgramCacheTest, StatusClear) { 179 TEST_F(ProgramCacheTest, StatusClear) {
187 const std::string shader1 = "abcd1234"; 180 const std::string shader1 = "abcd1234";
188 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 181 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
189 const std::string shader3 = "asbjbbjj239a"; 182 const std::string shader3 = "asbjbbjj239a";
190 cache_->SaySuccessfullyCached(shader1, NULL, shader2, NULL, NULL); 183 cache_->SaySuccessfullyCached(shader1, shader2, NULL);
191 cache_->SaySuccessfullyCached(shader1, NULL, shader3, NULL, NULL); 184 cache_->SaySuccessfullyCached(shader1, shader3, NULL);
192 cache_->Clear(); 185 cache_->Clear();
193 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 186 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
194 cache_->GetLinkedProgramStatus(shader1, NULL, shader2, NULL, NULL)); 187 cache_->GetLinkedProgramStatus(shader1, shader2, NULL));
195 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 188 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
196 cache_->GetLinkedProgramStatus(shader1, NULL, shader3, NULL, NULL)); 189 cache_->GetLinkedProgramStatus(shader1, shader3, NULL));
197 } 190 }
198 191
199 } // namespace gles2 192 } // namespace gles2
200 } // namespace gpu 193 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_cache.cc ('k') | gpu/command_buffer/service/program_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698