| OLD | NEW |
| 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/texture_uploader.h" | 5 #include "cc/texture_uploader.h" |
| 6 | 6 |
| 7 #include "cc/prioritized_resource.h" | 7 #include "cc/prioritized_resource.h" |
| 8 #include "cc/test/fake_web_graphics_context_3d.h" | 8 #include "cc/test/test_web_graphics_context_3d.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "third_party/khronos/GLES2/gl2.h" | 11 #include "third_party/khronos/GLES2/gl2.h" |
| 12 #include "third_party/khronos/GLES2/gl2ext.h" | 12 #include "third_party/khronos/GLES2/gl2ext.h" |
| 13 | 13 |
| 14 using namespace WebKit; | 14 using namespace WebKit; |
| 15 | 15 |
| 16 namespace cc { | 16 namespace cc { |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 unsigned int RoundUp(unsigned int n, unsigned int mul) | 19 unsigned int RoundUp(unsigned int n, unsigned int mul) |
| 20 { | 20 { |
| 21 return (((n - 1) / mul) * mul) + mul; | 21 return (((n - 1) / mul) * mul) + mul; |
| 22 } | 22 } |
| 23 | 23 |
| 24 class FakeWebGraphicsContext3DTextureUpload : public FakeWebGraphicsContext3D { | 24 class TestWebGraphicsContext3DTextureUpload : public TestWebGraphicsContext3D { |
| 25 public: | 25 public: |
| 26 FakeWebGraphicsContext3DTextureUpload() | 26 TestWebGraphicsContext3DTextureUpload() |
| 27 : m_resultAvailable(0) | 27 : m_resultAvailable(0) |
| 28 , m_unpackAlignment(4) | 28 , m_unpackAlignment(4) |
| 29 { | 29 { |
| 30 } | 30 } |
| 31 | 31 |
| 32 virtual void pixelStorei(WGC3Denum pname, WGC3Dint param) | 32 virtual void pixelStorei(WGC3Denum pname, WGC3Dint param) |
| 33 { | 33 { |
| 34 switch (pname) { | 34 switch (pname) { |
| 35 case GL_UNPACK_ALIGNMENT: | 35 case GL_UNPACK_ALIGNMENT: |
| 36 // param should be a power of two <= 8 | 36 // param should be a power of two <= 8 |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 uploader->upload(data, | 144 uploader->upload(data, |
| 145 gfx::Rect(gfx::Point(0, 0), size), | 145 gfx::Rect(gfx::Point(0, 0), size), |
| 146 gfx::Rect(gfx::Point(0, 0), size), | 146 gfx::Rect(gfx::Point(0, 0), size), |
| 147 gfx::Vector2d(), | 147 gfx::Vector2d(), |
| 148 format, | 148 format, |
| 149 size); | 149 size); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST(TextureUploaderTest, NumBlockingUploads) | 152 TEST(TextureUploaderTest, NumBlockingUploads) |
| 153 { | 153 { |
| 154 scoped_ptr<FakeWebGraphicsContext3DTextureUpload> fakeContext(new FakeWebGra
phicsContext3DTextureUpload); | 154 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fakeContext(new TestWebGra
phicsContext3DTextureUpload); |
| 155 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); | 155 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); |
| 156 | 156 |
| 157 fakeContext->setResultAvailable(0); | 157 fakeContext->setResultAvailable(0); |
| 158 EXPECT_EQ(0, uploader->numBlockingUploads()); | 158 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 159 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 159 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 160 EXPECT_EQ(1, uploader->numBlockingUploads()); | 160 EXPECT_EQ(1, uploader->numBlockingUploads()); |
| 161 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 161 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 162 EXPECT_EQ(2, uploader->numBlockingUploads()); | 162 EXPECT_EQ(2, uploader->numBlockingUploads()); |
| 163 | 163 |
| 164 fakeContext->setResultAvailable(1); | 164 fakeContext->setResultAvailable(1); |
| 165 EXPECT_EQ(0, uploader->numBlockingUploads()); | 165 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 166 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 166 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 167 EXPECT_EQ(0, uploader->numBlockingUploads()); | 167 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 168 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 168 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 169 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 169 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 170 EXPECT_EQ(0, uploader->numBlockingUploads()); | 170 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 171 } | 171 } |
| 172 | 172 |
| 173 TEST(TextureUploaderTest, MarkPendingUploadsAsNonBlocking) | 173 TEST(TextureUploaderTest, MarkPendingUploadsAsNonBlocking) |
| 174 { | 174 { |
| 175 scoped_ptr<FakeWebGraphicsContext3DTextureUpload> fakeContext(new FakeWebGra
phicsContext3DTextureUpload); | 175 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fakeContext(new TestWebGra
phicsContext3DTextureUpload); |
| 176 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); | 176 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); |
| 177 | 177 |
| 178 fakeContext->setResultAvailable(0); | 178 fakeContext->setResultAvailable(0); |
| 179 EXPECT_EQ(0, uploader->numBlockingUploads()); | 179 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 180 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 180 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 181 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 181 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 182 EXPECT_EQ(2, uploader->numBlockingUploads()); | 182 EXPECT_EQ(2, uploader->numBlockingUploads()); |
| 183 | 183 |
| 184 uploader->markPendingUploadsAsNonBlocking(); | 184 uploader->markPendingUploadsAsNonBlocking(); |
| 185 EXPECT_EQ(0, uploader->numBlockingUploads()); | 185 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 186 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 186 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 187 EXPECT_EQ(1, uploader->numBlockingUploads()); | 187 EXPECT_EQ(1, uploader->numBlockingUploads()); |
| 188 | 188 |
| 189 fakeContext->setResultAvailable(1); | 189 fakeContext->setResultAvailable(1); |
| 190 EXPECT_EQ(0, uploader->numBlockingUploads()); | 190 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 191 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); | 191 uploadTexture(uploader.get(), GL_RGBA, gfx::Size(0, 0), NULL); |
| 192 uploader->markPendingUploadsAsNonBlocking(); | 192 uploader->markPendingUploadsAsNonBlocking(); |
| 193 EXPECT_EQ(0, uploader->numBlockingUploads()); | 193 EXPECT_EQ(0, uploader->numBlockingUploads()); |
| 194 } | 194 } |
| 195 | 195 |
| 196 TEST(TextureUploaderTest, UploadContentsTest) | 196 TEST(TextureUploaderTest, UploadContentsTest) |
| 197 { | 197 { |
| 198 scoped_ptr<FakeWebGraphicsContext3DTextureUpload> fakeContext(new FakeWebGra
phicsContext3DTextureUpload); | 198 scoped_ptr<TestWebGraphicsContext3DTextureUpload> fakeContext(new TestWebGra
phicsContext3DTextureUpload); |
| 199 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); | 199 scoped_ptr<TextureUploader> uploader = TextureUploader::create(fakeContext.g
et(), false, false); |
| 200 uint8 buffer[256 * 256 * 4]; | 200 uint8 buffer[256 * 256 * 4]; |
| 201 | 201 |
| 202 // Upload a tightly packed 256x256 RGBA texture. | 202 // Upload a tightly packed 256x256 RGBA texture. |
| 203 memset(buffer, 0, sizeof(buffer)); | 203 memset(buffer, 0, sizeof(buffer)); |
| 204 for (int i = 0; i < 256; ++i) { | 204 for (int i = 0; i < 256; ++i) { |
| 205 // Mark the beginning and end of each row, for the test. | 205 // Mark the beginning and end of each row, for the test. |
| 206 buffer[i * 4 * 256] = 0x1; | 206 buffer[i * 4 * 256] = 0x1; |
| 207 buffer[(i + 1) * 4 * 256 - 1] = 0x2; | 207 buffer[(i + 1) * 4 * 256 - 1] = 0x2; |
| 208 } | 208 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 222 for (int i = 0; i < 86; ++i) { | 222 for (int i = 0; i < 86; ++i) { |
| 223 // Mark the beginning and end of each row, for the test. | 223 // Mark the beginning and end of each row, for the test. |
| 224 buffer[i * 1 * 82] = 0x1; | 224 buffer[i * 1 * 82] = 0x1; |
| 225 buffer[(i + 1) * 82 - 1] = 0x2; | 225 buffer[(i + 1) * 82 - 1] = 0x2; |
| 226 } | 226 } |
| 227 uploadTexture(uploader.get(), GL_LUMINANCE, gfx::Size(82, 86), buffer); | 227 uploadTexture(uploader.get(), GL_LUMINANCE, gfx::Size(82, 86), buffer); |
| 228 } | 228 } |
| 229 | 229 |
| 230 } // namespace | 230 } // namespace |
| 231 } // namespace cc | 231 } // namespace cc |
| OLD | NEW |