OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 0x77, 0x53, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, | 52 0x77, 0x53, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, |
53 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, | 53 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, |
54 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, | 54 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, |
55 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, | 55 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, |
56 0x0c, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8, 0xff, | 56 0x0c, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8, 0xff, |
57 0xff, 0x3f, 0x00, 0x05, 0xfe, 0x02, 0xfe, 0xdc, 0xcc, 0x59, | 57 0xff, 0x3f, 0x00, 0x05, 0xfe, 0x02, 0xfe, 0xdc, 0xcc, 0x59, |
58 0xe7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, | 58 0xe7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, |
59 0x42, 0x60, 0x82, | 59 0x42, 0x60, 0x82, |
60 }; | 60 }; |
61 | 61 |
62 static SkCanvas* createRasterCanvas(int width, int height) | |
63 { | |
64 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(SkBitmap::kARGB_8888_Co
nfig, width, height)); | |
65 return new SkCanvas(device); | |
66 } | |
67 | |
68 struct Rasterizer { | 62 struct Rasterizer { |
69 SkCanvas* canvas; | 63 SkCanvas* canvas; |
70 SkPicture* picture; | 64 SkPicture* picture; |
71 }; | 65 }; |
72 | 66 |
73 } // namespace | 67 } // namespace |
74 | 68 |
75 class DeferredImageDecoderTest : public ::testing::Test, public MockImageDecoder
Client { | 69 class DeferredImageDecoderTest : public ::testing::Test, public MockImageDecoder
Client { |
76 public: | 70 public: |
77 virtual void SetUp() OVERRIDE | 71 virtual void SetUp() OVERRIDE |
78 { | 72 { |
79 ImageDecodingStore::initializeOnce(); | 73 ImageDecodingStore::initializeOnce(); |
80 DeferredImageDecoder::setEnabled(true); | 74 DeferredImageDecoder::setEnabled(true); |
81 m_data = SharedBuffer::create(whitePNG, sizeof(whitePNG)); | 75 m_data = SharedBuffer::create(whitePNG, sizeof(whitePNG)); |
82 OwnPtr<MockImageDecoder> decoder = MockImageDecoder::create(this); | 76 OwnPtr<MockImageDecoder> decoder = MockImageDecoder::create(this); |
83 m_actualDecoder = decoder.get(); | 77 m_actualDecoder = decoder.get(); |
84 m_actualDecoder->setSize(1, 1); | 78 m_actualDecoder->setSize(1, 1); |
85 m_lazyDecoder = DeferredImageDecoder::createForTesting(decoder.release()
); | 79 m_lazyDecoder = DeferredImageDecoder::createForTesting(decoder.release()
); |
86 m_canvas.reset(createRasterCanvas(100, 100)); | 80 m_canvas.reset(SkCanvas::NewRasterN32(100, 100)); |
| 81 ASSERT_TRUE(m_canvas); |
87 m_frameBufferRequestCount = 0; | 82 m_frameBufferRequestCount = 0; |
88 m_frameCount = 1; | 83 m_frameCount = 1; |
89 m_repetitionCount = cAnimationNone; | 84 m_repetitionCount = cAnimationNone; |
90 m_status = ImageFrame::FrameComplete; | 85 m_status = ImageFrame::FrameComplete; |
91 m_frameDuration = 0; | 86 m_frameDuration = 0; |
92 m_decodedSize = m_actualDecoder->size(); | 87 m_decodedSize = m_actualDecoder->size(); |
93 } | 88 } |
94 | 89 |
95 virtual void TearDown() OVERRIDE | 90 virtual void TearDown() OVERRIDE |
96 { | 91 { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 | 158 |
164 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); | 159 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); |
165 tempCanvas->drawBitmap(image->bitmap(), 0, 0); | 160 tempCanvas->drawBitmap(image->bitmap(), 0, 0); |
166 m_picture.endRecording(); | 161 m_picture.endRecording(); |
167 EXPECT_EQ(0, m_frameBufferRequestCount); | 162 EXPECT_EQ(0, m_frameBufferRequestCount); |
168 | 163 |
169 m_canvas->drawPicture(m_picture); | 164 m_canvas->drawPicture(m_picture); |
170 EXPECT_EQ(0, m_frameBufferRequestCount); | 165 EXPECT_EQ(0, m_frameBufferRequestCount); |
171 | 166 |
172 SkBitmap canvasBitmap; | 167 SkBitmap canvasBitmap; |
173 canvasBitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); | 168 ASSERT_TRUE(canvasBitmap.allocN32Pixels(100, 100)); |
174 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); | 169 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); |
175 SkAutoLockPixels autoLock(canvasBitmap); | 170 SkAutoLockPixels autoLock(canvasBitmap); |
176 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 171 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
177 } | 172 } |
178 | 173 |
179 TEST_F(DeferredImageDecoderTest, drawIntoSkPictureProgressive) | 174 TEST_F(DeferredImageDecoderTest, drawIntoSkPictureProgressive) |
180 { | 175 { |
181 RefPtr<SharedBuffer> partialData = SharedBuffer::create(m_data->data(), m_da
ta->size() - 10); | 176 RefPtr<SharedBuffer> partialData = SharedBuffer::create(m_data->data(), m_da
ta->size() - 10); |
182 | 177 |
183 // Received only half the file. | 178 // Received only half the file. |
184 m_lazyDecoder->setData(partialData.get(), false); | 179 m_lazyDecoder->setData(partialData.get(), false); |
185 RefPtr<NativeImageSkia> image = m_lazyDecoder->frameBufferAtIndex(0)->asNewN
ativeImage(); | 180 RefPtr<NativeImageSkia> image = m_lazyDecoder->frameBufferAtIndex(0)->asNewN
ativeImage(); |
186 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); | 181 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); |
187 tempCanvas->drawBitmap(image->bitmap(), 0, 0); | 182 tempCanvas->drawBitmap(image->bitmap(), 0, 0); |
188 m_picture.endRecording(); | 183 m_picture.endRecording(); |
189 m_canvas->drawPicture(m_picture); | 184 m_canvas->drawPicture(m_picture); |
190 | 185 |
191 // Fully received the file and draw the SkPicture again. | 186 // Fully received the file and draw the SkPicture again. |
192 m_lazyDecoder->setData(m_data.get(), true); | 187 m_lazyDecoder->setData(m_data.get(), true); |
193 image = m_lazyDecoder->frameBufferAtIndex(0)->asNewNativeImage(); | 188 image = m_lazyDecoder->frameBufferAtIndex(0)->asNewNativeImage(); |
194 tempCanvas = m_picture.beginRecording(100, 100); | 189 tempCanvas = m_picture.beginRecording(100, 100); |
195 tempCanvas->drawBitmap(image->bitmap(), 0, 0); | 190 tempCanvas->drawBitmap(image->bitmap(), 0, 0); |
196 m_picture.endRecording(); | 191 m_picture.endRecording(); |
197 m_canvas->drawPicture(m_picture); | 192 m_canvas->drawPicture(m_picture); |
198 | 193 |
199 SkBitmap canvasBitmap; | 194 SkBitmap canvasBitmap; |
200 canvasBitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); | 195 ASSERT_TRUE(canvasBitmap.allocN32Pixels(100, 100)); |
201 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); | 196 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); |
202 SkAutoLockPixels autoLock(canvasBitmap); | 197 SkAutoLockPixels autoLock(canvasBitmap); |
203 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 198 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
204 } | 199 } |
205 | 200 |
206 static void rasterizeMain(SkCanvas* canvas, SkPicture* picture) | 201 static void rasterizeMain(SkCanvas* canvas, SkPicture* picture) |
207 { | 202 { |
208 canvas->drawPicture(*picture); | 203 canvas->drawPicture(*picture); |
209 } | 204 } |
210 | 205 |
(...skipping 11 matching lines...) Expand all Loading... |
222 m_picture.endRecording(); | 217 m_picture.endRecording(); |
223 EXPECT_EQ(0, m_frameBufferRequestCount); | 218 EXPECT_EQ(0, m_frameBufferRequestCount); |
224 | 219 |
225 // Create a thread to rasterize SkPicture. | 220 // Create a thread to rasterize SkPicture. |
226 OwnPtr<blink::WebThread> thread = adoptPtr(blink::Platform::current()->creat
eThread("RasterThread")); | 221 OwnPtr<blink::WebThread> thread = adoptPtr(blink::Platform::current()->creat
eThread("RasterThread")); |
227 thread->postTask(new Task(WTF::bind(&rasterizeMain, m_canvas.get(), &m_pictu
re))); | 222 thread->postTask(new Task(WTF::bind(&rasterizeMain, m_canvas.get(), &m_pictu
re))); |
228 thread.clear(); | 223 thread.clear(); |
229 EXPECT_EQ(0, m_frameBufferRequestCount); | 224 EXPECT_EQ(0, m_frameBufferRequestCount); |
230 | 225 |
231 SkBitmap canvasBitmap; | 226 SkBitmap canvasBitmap; |
232 canvasBitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100); | 227 ASSERT_TRUE(canvasBitmap.allocN32Pixels(100, 100)); |
233 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); | 228 ASSERT_TRUE(m_canvas->readPixels(&canvasBitmap, 0, 0)); |
234 SkAutoLockPixels autoLock(canvasBitmap); | 229 SkAutoLockPixels autoLock(canvasBitmap); |
235 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 230 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
236 } | 231 } |
237 | 232 |
238 TEST_F(DeferredImageDecoderTest, singleFrameImageLoading) | 233 TEST_F(DeferredImageDecoderTest, singleFrameImageLoading) |
239 { | 234 { |
240 m_status = ImageFrame::FramePartial; | 235 m_status = ImageFrame::FramePartial; |
241 m_lazyDecoder->setData(m_data.get(), false); | 236 m_lazyDecoder->setData(m_data.get(), false); |
242 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 237 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 // The following code should not fail any assert. | 319 // The following code should not fail any assert. |
325 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); | 320 SkCanvas* tempCanvas = m_picture.beginRecording(100, 100); |
326 tempCanvas->drawBitmap(image->bitmap(), 0, 0); | 321 tempCanvas->drawBitmap(image->bitmap(), 0, 0); |
327 m_picture.endRecording(); | 322 m_picture.endRecording(); |
328 EXPECT_EQ(0, m_frameBufferRequestCount); | 323 EXPECT_EQ(0, m_frameBufferRequestCount); |
329 m_canvas->drawPicture(m_picture); | 324 m_canvas->drawPicture(m_picture); |
330 EXPECT_EQ(1, m_frameBufferRequestCount); | 325 EXPECT_EQ(1, m_frameBufferRequestCount); |
331 } | 326 } |
332 | 327 |
333 } // namespace WebCore | 328 } // namespace WebCore |
OLD | NEW |