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

Side by Side Diff: cc/scheduler/texture_uploader_unittest.cc

Issue 105103004: Convert cc resource system over to GLES2Interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « cc/scheduler/texture_uploader.cc ('k') | cc/test/test_gles2_interface.h » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/scheduler/texture_uploader.h" 5 #include "cc/scheduler/texture_uploader.h"
6 6
7 #include "cc/base/util.h" 7 #include "cc/base/util.h"
8 #include "cc/resources/prioritized_resource.h" 8 #include "cc/resources/prioritized_resource.h"
9 #include "cc/test/test_web_graphics_context_3d.h" 9 #include "gpu/command_buffer/client/gles2_interface_stub.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/khronos/GLES2/gl2.h" 12 #include "third_party/khronos/GLES2/gl2.h"
13 #include "third_party/khronos/GLES2/gl2ext.h" 13 #include "third_party/khronos/GLES2/gl2ext.h"
14 14
15 using blink::WGC3Denum;
16 using blink::WGC3Dint;
17 using blink::WGC3Dsizei;
18 using blink::WebGLId;
19 using blink::WGC3Duint;
20
21 namespace cc { 15 namespace cc {
22 namespace { 16 namespace {
23 17
24 class TestWebGraphicsContext3DTextureUpload : public TestWebGraphicsContext3D { 18 class TextureUploadTestContext : public gpu::gles2::GLES2InterfaceStub {
25 public: 19 public:
26 TestWebGraphicsContext3DTextureUpload() 20 TextureUploadTestContext() : result_available_(0), unpack_alignment_(4) {}
27 : result_available_(0),
28 unpack_alignment_(4) {}
29 21
30 virtual void pixelStorei(WGC3Denum pname, WGC3Dint param) OVERRIDE { 22 virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE {
31 switch (pname) { 23 switch (pname) {
32 case GL_UNPACK_ALIGNMENT: 24 case GL_UNPACK_ALIGNMENT:
33 // Param should be a power of two <= 8. 25 // Param should be a power of two <= 8.
34 EXPECT_EQ(0, param & (param - 1)); 26 EXPECT_EQ(0, param & (param - 1));
35 EXPECT_GE(8, param); 27 EXPECT_GE(8, param);
36 switch (param) { 28 switch (param) {
37 case 1: 29 case 1:
38 case 2: 30 case 2:
39 case 4: 31 case 4:
40 case 8: 32 case 8:
41 unpack_alignment_ = param; 33 unpack_alignment_ = param;
42 break; 34 break;
43 default: 35 default:
44 break; 36 break;
45 } 37 }
46 break; 38 break;
47 default: 39 default:
48 break; 40 break;
49 } 41 }
50 } 42 }
51 43
52 virtual void getQueryObjectuivEXT(WebGLId, WGC3Denum type, WGC3Duint* value) 44 virtual void GetQueryObjectuivEXT(GLuint,
53 OVERRIDE { 45 GLenum type,
46 GLuint* value) OVERRIDE {
54 switch (type) { 47 switch (type) {
55 case GL_QUERY_RESULT_AVAILABLE_EXT: 48 case GL_QUERY_RESULT_AVAILABLE_EXT:
56 *value = result_available_; 49 *value = result_available_;
57 break; 50 break;
58 default: 51 default:
59 *value = 0; 52 *value = 0;
60 break; 53 break;
61 } 54 }
62 } 55 }
63 56
64 virtual void texSubImage2D(WGC3Denum target, 57 virtual void TexSubImage2D(GLenum target,
65 WGC3Dint level, 58 GLint level,
66 WGC3Dint xoffset, 59 GLint xoffset,
67 WGC3Dint yoffset, 60 GLint yoffset,
68 WGC3Dsizei width, 61 GLsizei width,
69 WGC3Dsizei height, 62 GLsizei height,
70 WGC3Denum format, 63 GLenum format,
71 WGC3Denum type, 64 GLenum type,
72 const void* pixels) OVERRIDE { 65 const void* pixels) OVERRIDE {
73 EXPECT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target); 66 EXPECT_EQ(static_cast<unsigned>(GL_TEXTURE_2D), target);
74 EXPECT_EQ(0, level); 67 EXPECT_EQ(0, level);
75 EXPECT_LE(0, width); 68 EXPECT_LE(0, width);
76 EXPECT_LE(0, height); 69 EXPECT_LE(0, height);
77 EXPECT_LE(0, xoffset); 70 EXPECT_LE(0, xoffset);
78 EXPECT_LE(0, yoffset); 71 EXPECT_LE(0, yoffset);
79 EXPECT_LE(0, width); 72 EXPECT_LE(0, width);
80 EXPECT_LE(0, height); 73 EXPECT_LE(0, height);
81 74
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 117
125 // If NULL, we aren't checking texture contents. 118 // If NULL, we aren't checking texture contents.
126 if (pixels == NULL) 119 if (pixels == NULL)
127 return; 120 return;
128 121
129 const uint8* bytes = static_cast<const uint8*>(pixels); 122 const uint8* bytes = static_cast<const uint8*>(pixels);
130 // We'll expect the first byte of every row to be 0x1, and the last byte to 123 // We'll expect the first byte of every row to be 0x1, and the last byte to
131 // be 0x2. 124 // be 0x2.
132 const unsigned int stride = 125 const unsigned int stride =
133 RoundUp(bytes_per_pixel * width, unpack_alignment_); 126 RoundUp(bytes_per_pixel * width, unpack_alignment_);
134 for (WGC3Dsizei row = 0; row < height; ++row) { 127 for (GLsizei row = 0; row < height; ++row) {
135 const uint8* row_bytes = 128 const uint8* row_bytes =
136 bytes + (xoffset * bytes_per_pixel + (yoffset + row) * stride); 129 bytes + (xoffset * bytes_per_pixel + (yoffset + row) * stride);
137 EXPECT_EQ(0x1, row_bytes[0]); 130 EXPECT_EQ(0x1, row_bytes[0]);
138 EXPECT_EQ(0x2, row_bytes[width * bytes_per_pixel - 1]); 131 EXPECT_EQ(0x2, row_bytes[width * bytes_per_pixel - 1]);
139 } 132 }
140 } 133 }
141 134
142 void SetResultAvailable(unsigned result_available) { 135 void SetResultAvailable(unsigned result_available) {
143 result_available_ = result_available; 136 result_available_ = result_available;
144 } 137 }
145 138
146 private: 139 private:
147 unsigned result_available_; 140 unsigned result_available_;
148 unsigned unpack_alignment_; 141 unsigned unpack_alignment_;
149 142
150 DISALLOW_COPY_AND_ASSIGN(TestWebGraphicsContext3DTextureUpload); 143 DISALLOW_COPY_AND_ASSIGN(TextureUploadTestContext);
151 }; 144 };
152 145
153 void UploadTexture(TextureUploader* uploader, 146 void UploadTexture(TextureUploader* uploader,
154 ResourceFormat format, 147 ResourceFormat format,
155 gfx::Size size, 148 gfx::Size size,
156 const uint8* data) { 149 const uint8* data) {
157 uploader->Upload(data, 150 uploader->Upload(data,
158 gfx::Rect(size), 151 gfx::Rect(size),
159 gfx::Rect(size), 152 gfx::Rect(size),
160 gfx::Vector2d(), 153 gfx::Vector2d(),
161 format, 154 format,
162 size); 155 size);
163 } 156 }
164 157
165 TEST(TextureUploaderTest, NumBlockingUploads) { 158 TEST(TextureUploaderTest, NumBlockingUploads) {
166 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fake_context( 159 TextureUploadTestContext context;
167 new TestWebGraphicsContext3DTextureUpload); 160 scoped_ptr<TextureUploader> uploader = TextureUploader::Create(&context);
168 scoped_ptr<TextureUploader> uploader =
169 TextureUploader::Create(fake_context.get());
170 161
171 fake_context->SetResultAvailable(0); 162 context.SetResultAvailable(0);
172 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 163 EXPECT_EQ(0u, uploader->NumBlockingUploads());
173 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 164 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
174 EXPECT_EQ(1u, uploader->NumBlockingUploads()); 165 EXPECT_EQ(1u, uploader->NumBlockingUploads());
175 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 166 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
176 EXPECT_EQ(2u, uploader->NumBlockingUploads()); 167 EXPECT_EQ(2u, uploader->NumBlockingUploads());
177 168
178 fake_context->SetResultAvailable(1); 169 context.SetResultAvailable(1);
179 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 170 EXPECT_EQ(0u, uploader->NumBlockingUploads());
180 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 171 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
181 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 172 EXPECT_EQ(0u, uploader->NumBlockingUploads());
182 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 173 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
183 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 174 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
184 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 175 EXPECT_EQ(0u, uploader->NumBlockingUploads());
185 } 176 }
186 177
187 TEST(TextureUploaderTest, MarkPendingUploadsAsNonBlocking) { 178 TEST(TextureUploaderTest, MarkPendingUploadsAsNonBlocking) {
188 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fake_context( 179 TextureUploadTestContext context;
189 new TestWebGraphicsContext3DTextureUpload); 180 scoped_ptr<TextureUploader> uploader = TextureUploader::Create(&context);
190 scoped_ptr<TextureUploader> uploader =
191 TextureUploader::Create(fake_context.get());
192 181
193 fake_context->SetResultAvailable(0); 182 context.SetResultAvailable(0);
194 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 183 EXPECT_EQ(0u, uploader->NumBlockingUploads());
195 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 184 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
196 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 185 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
197 EXPECT_EQ(2u, uploader->NumBlockingUploads()); 186 EXPECT_EQ(2u, uploader->NumBlockingUploads());
198 187
199 uploader->MarkPendingUploadsAsNonBlocking(); 188 uploader->MarkPendingUploadsAsNonBlocking();
200 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 189 EXPECT_EQ(0u, uploader->NumBlockingUploads());
201 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 190 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
202 EXPECT_EQ(1u, uploader->NumBlockingUploads()); 191 EXPECT_EQ(1u, uploader->NumBlockingUploads());
203 192
204 fake_context->SetResultAvailable(1); 193 context.SetResultAvailable(1);
205 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 194 EXPECT_EQ(0u, uploader->NumBlockingUploads());
206 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL); 195 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(), NULL);
207 uploader->MarkPendingUploadsAsNonBlocking(); 196 uploader->MarkPendingUploadsAsNonBlocking();
208 EXPECT_EQ(0u, uploader->NumBlockingUploads()); 197 EXPECT_EQ(0u, uploader->NumBlockingUploads());
209 } 198 }
210 199
211 TEST(TextureUploaderTest, UploadContentsTest) { 200 TEST(TextureUploaderTest, UploadContentsTest) {
212 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fake_context( 201 TextureUploadTestContext context;
213 new TestWebGraphicsContext3DTextureUpload); 202 scoped_ptr<TextureUploader> uploader = TextureUploader::Create(&context);
214 scoped_ptr<TextureUploader> uploader = 203
215 TextureUploader::Create(fake_context.get());
216 uint8 buffer[256 * 256 * 4]; 204 uint8 buffer[256 * 256 * 4];
217 205
218 // Upload a tightly packed 256x256 RGBA texture. 206 // Upload a tightly packed 256x256 RGBA texture.
219 memset(buffer, 0, sizeof(buffer)); 207 memset(buffer, 0, sizeof(buffer));
220 for (int i = 0; i < 256; ++i) { 208 for (int i = 0; i < 256; ++i) {
221 // Mark the beginning and end of each row, for the test. 209 // Mark the beginning and end of each row, for the test.
222 buffer[i * 4 * 256] = 0x1; 210 buffer[i * 4 * 256] = 0x1;
223 buffer[(i + 1) * 4 * 256 - 1] = 0x2; 211 buffer[(i + 1) * 4 * 256 - 1] = 0x2;
224 } 212 }
225 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(256, 256), buffer); 213 UploadTexture(uploader.get(), RGBA_8888, gfx::Size(256, 256), buffer);
(...skipping 12 matching lines...) Expand all
238 for (int i = 0; i < 86; ++i) { 226 for (int i = 0; i < 86; ++i) {
239 // Mark the beginning and end of each row, for the test. 227 // Mark the beginning and end of each row, for the test.
240 buffer[i * 1 * 82] = 0x1; 228 buffer[i * 1 * 82] = 0x1;
241 buffer[(i + 1) * 82 - 1] = 0x2; 229 buffer[(i + 1) * 82 - 1] = 0x2;
242 } 230 }
243 UploadTexture(uploader.get(), LUMINANCE_8, gfx::Size(82, 86), buffer); 231 UploadTexture(uploader.get(), LUMINANCE_8, gfx::Size(82, 86), buffer);
244 } 232 }
245 233
246 } // namespace 234 } // namespace
247 } // namespace cc 235 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/texture_uploader.cc ('k') | cc/test/test_gles2_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698