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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 size_t m_frameCount; | 169 size_t m_frameCount; |
170 int m_repetitionCount; | 170 int m_repetitionCount; |
171 ImageFrame::Status m_status; | 171 ImageFrame::Status m_status; |
172 float m_frameDuration; | 172 float m_frameDuration; |
173 IntSize m_decodedSize; | 173 IntSize m_decodedSize; |
174 }; | 174 }; |
175 | 175 |
176 TEST_F(DeferredImageDecoderTest, drawIntoSkPicture) | 176 TEST_F(DeferredImageDecoderTest, drawIntoSkPicture) |
177 { | 177 { |
178 m_lazyDecoder->setData(m_data, true); | 178 m_lazyDecoder->setData(m_data, true); |
179 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 179 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
180 ASSERT_TRUE(image); | 180 ASSERT_TRUE(image); |
181 EXPECT_EQ(1, image->width()); | 181 EXPECT_EQ(1, image->width()); |
182 EXPECT_EQ(1, image->height()); | 182 EXPECT_EQ(1, image->height()); |
183 | 183 |
184 SkPictureRecorder recorder; | 184 SkPictureRecorder recorder; |
185 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); | 185 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); |
186 tempCanvas->drawImage(image.get(), 0, 0); | 186 tempCanvas->drawImage(image.get(), 0, 0); |
187 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); | 187 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
188 EXPECT_EQ(0, m_decodeRequestCount); | 188 EXPECT_EQ(0, m_decodeRequestCount); |
189 | 189 |
190 m_surface->getCanvas()->drawPicture(picture); | 190 m_surface->getCanvas()->drawPicture(picture); |
191 EXPECT_EQ(0, m_decodeRequestCount); | 191 EXPECT_EQ(0, m_decodeRequestCount); |
192 | 192 |
193 SkBitmap canvasBitmap; | 193 SkBitmap canvasBitmap; |
194 canvasBitmap.allocN32Pixels(100, 100); | 194 canvasBitmap.allocN32Pixels(100, 100); |
195 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); | 195 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); |
196 SkAutoLockPixels autoLock(canvasBitmap); | 196 SkAutoLockPixels autoLock(canvasBitmap); |
197 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 197 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
198 } | 198 } |
199 | 199 |
200 TEST_F(DeferredImageDecoderTest, drawIntoSkPictureProgressive) | 200 TEST_F(DeferredImageDecoderTest, drawIntoSkPictureProgressive) |
201 { | 201 { |
202 RefPtr<SharedBuffer> partialData = SharedBuffer::create(m_data->data(), m_da
ta->size() - 10); | 202 RefPtr<SharedBuffer> partialData = SharedBuffer::create(m_data->data(), m_da
ta->size() - 10); |
203 | 203 |
204 // Received only half the file. | 204 // Received only half the file. |
205 m_lazyDecoder->setData(partialData, false); | 205 m_lazyDecoder->setData(partialData, false); |
206 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 206 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
207 ASSERT_TRUE(image); | 207 ASSERT_TRUE(image); |
208 SkPictureRecorder recorder; | 208 SkPictureRecorder recorder; |
209 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); | 209 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); |
210 tempCanvas->drawImage(image.get(), 0, 0); | 210 tempCanvas->drawImage(image.get(), 0, 0); |
211 m_surface->getCanvas()->drawPicture(recorder.finishRecordingAsPicture()); | 211 m_surface->getCanvas()->drawPicture(recorder.finishRecordingAsPicture()); |
212 | 212 |
213 // Fully received the file and draw the SkPicture again. | 213 // Fully received the file and draw the SkPicture again. |
214 m_lazyDecoder->setData(m_data, true); | 214 m_lazyDecoder->setData(m_data, true); |
215 image = m_lazyDecoder->createFrameAtIndex(0); | 215 image = m_lazyDecoder->createFrameAtIndex(0); |
216 ASSERT_TRUE(image); | 216 ASSERT_TRUE(image); |
217 tempCanvas = recorder.beginRecording(100, 100, 0, 0); | 217 tempCanvas = recorder.beginRecording(100, 100, 0, 0); |
218 tempCanvas->drawImage(image.get(), 0, 0); | 218 tempCanvas->drawImage(image.get(), 0, 0); |
219 m_surface->getCanvas()->drawPicture(recorder.finishRecordingAsPicture()); | 219 m_surface->getCanvas()->drawPicture(recorder.finishRecordingAsPicture()); |
220 | 220 |
221 SkBitmap canvasBitmap; | 221 SkBitmap canvasBitmap; |
222 canvasBitmap.allocN32Pixels(100, 100); | 222 canvasBitmap.allocN32Pixels(100, 100); |
223 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); | 223 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); |
224 SkAutoLockPixels autoLock(canvasBitmap); | 224 SkAutoLockPixels autoLock(canvasBitmap); |
225 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 225 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
226 } | 226 } |
227 | 227 |
228 static void rasterizeMain(SkCanvas* canvas, SkPicture* picture) | 228 static void rasterizeMain(SkCanvas* canvas, SkPicture* picture) |
229 { | 229 { |
230 canvas->drawPicture(picture); | 230 canvas->drawPicture(picture); |
231 } | 231 } |
232 | 232 |
233 TEST_F(DeferredImageDecoderTest, decodeOnOtherThread) | 233 TEST_F(DeferredImageDecoderTest, decodeOnOtherThread) |
234 { | 234 { |
235 m_lazyDecoder->setData(m_data, true); | 235 m_lazyDecoder->setData(m_data, true); |
236 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 236 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
237 ASSERT_TRUE(image); | 237 ASSERT_TRUE(image); |
238 EXPECT_EQ(1, image->width()); | 238 EXPECT_EQ(1, image->width()); |
239 EXPECT_EQ(1, image->height()); | 239 EXPECT_EQ(1, image->height()); |
240 | 240 |
241 SkPictureRecorder recorder; | 241 SkPictureRecorder recorder; |
242 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); | 242 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); |
243 tempCanvas->drawImage(image.get(), 0, 0); | 243 tempCanvas->drawImage(image.get(), 0, 0); |
244 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); | 244 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
245 EXPECT_EQ(0, m_decodeRequestCount); | 245 EXPECT_EQ(0, m_decodeRequestCount); |
246 | 246 |
247 // Create a thread to rasterize SkPicture. | 247 // Create a thread to rasterize SkPicture. |
248 std::unique_ptr<WebThread> thread = wrapUnique(Platform::current()->createTh
read("RasterThread")); | 248 std::unique_ptr<WebThread> thread = wrapUnique(Platform::current()->createTh
read("RasterThread")); |
249 thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, crossThreadBind(&raste
rizeMain, crossThreadUnretained(m_surface->getCanvas()), crossThreadUnretained(p
icture.get()))); | 249 thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, crossThreadBind(&raste
rizeMain, crossThreadUnretained(m_surface->getCanvas()), crossThreadUnretained(p
icture.get()))); |
250 thread.reset(); | 250 thread.reset(); |
251 EXPECT_EQ(0, m_decodeRequestCount); | 251 EXPECT_EQ(0, m_decodeRequestCount); |
252 | 252 |
253 SkBitmap canvasBitmap; | 253 SkBitmap canvasBitmap; |
254 canvasBitmap.allocN32Pixels(100, 100); | 254 canvasBitmap.allocN32Pixels(100, 100); |
255 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); | 255 ASSERT_TRUE(m_surface->getCanvas()->readPixels(&canvasBitmap, 0, 0)); |
256 SkAutoLockPixels autoLock(canvasBitmap); | 256 SkAutoLockPixels autoLock(canvasBitmap); |
257 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); | 257 EXPECT_EQ(SkColorSetARGB(255, 255, 255, 255), canvasBitmap.getColor(0, 0)); |
258 } | 258 } |
259 | 259 |
260 TEST_F(DeferredImageDecoderTest, singleFrameImageLoading) | 260 TEST_F(DeferredImageDecoderTest, singleFrameImageLoading) |
261 { | 261 { |
262 m_status = ImageFrame::FramePartial; | 262 m_status = ImageFrame::FramePartial; |
263 m_lazyDecoder->setData(m_data, false); | 263 m_lazyDecoder->setData(m_data, false); |
264 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 264 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
265 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 265 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
266 ASSERT_TRUE(image); | 266 ASSERT_TRUE(image); |
267 unsigned firstId = image->uniqueID(); | 267 unsigned firstId = image->uniqueID(); |
268 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 268 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
269 EXPECT_TRUE(m_actualDecoder); | 269 EXPECT_TRUE(m_actualDecoder); |
270 | 270 |
271 m_status = ImageFrame::FrameComplete; | 271 m_status = ImageFrame::FrameComplete; |
272 m_data->append(" ", 1u); | 272 m_data->append(" ", 1u); |
273 m_lazyDecoder->setData(m_data, true); | 273 m_lazyDecoder->setData(m_data, true); |
274 EXPECT_FALSE(m_actualDecoder); | 274 EXPECT_FALSE(m_actualDecoder); |
275 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 275 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
276 | 276 |
277 image = m_lazyDecoder->createFrameAtIndex(0); | 277 image = m_lazyDecoder->createFrameAtIndex(0); |
278 ASSERT_TRUE(image); | 278 ASSERT_TRUE(image); |
279 unsigned secondId = image->uniqueID(); | 279 unsigned secondId = image->uniqueID(); |
280 EXPECT_FALSE(m_decodeRequestCount); | 280 EXPECT_FALSE(m_decodeRequestCount); |
281 EXPECT_NE(firstId, secondId); | 281 EXPECT_NE(firstId, secondId); |
282 } | 282 } |
283 | 283 |
284 TEST_F(DeferredImageDecoderTest, multiFrameImageLoading) | 284 TEST_F(DeferredImageDecoderTest, multiFrameImageLoading) |
285 { | 285 { |
286 m_repetitionCount = 10; | 286 m_repetitionCount = 10; |
287 m_frameCount = 1; | 287 m_frameCount = 1; |
288 m_frameDuration = 10; | 288 m_frameDuration = 10; |
289 m_status = ImageFrame::FramePartial; | 289 m_status = ImageFrame::FramePartial; |
290 m_lazyDecoder->setData(m_data, false); | 290 m_lazyDecoder->setData(m_data, false); |
291 | 291 |
292 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 292 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
293 ASSERT_TRUE(image); | 293 ASSERT_TRUE(image); |
294 unsigned firstId = image->uniqueID(); | 294 unsigned firstId = image->uniqueID(); |
295 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 295 EXPECT_FALSE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
296 EXPECT_EQ(10.0f, m_lazyDecoder->frameDurationAtIndex(0)); | 296 EXPECT_EQ(10.0f, m_lazyDecoder->frameDurationAtIndex(0)); |
297 | 297 |
298 m_frameCount = 2; | 298 m_frameCount = 2; |
299 m_frameDuration = 20; | 299 m_frameDuration = 20; |
300 m_status = ImageFrame::FrameComplete; | 300 m_status = ImageFrame::FrameComplete; |
301 m_data->append(" ", 1u); | 301 m_data->append(" ", 1u); |
302 m_lazyDecoder->setData(m_data, false); | 302 m_lazyDecoder->setData(m_data, false); |
(...skipping 18 matching lines...) Expand all Loading... |
321 EXPECT_EQ(10.0f, m_lazyDecoder->frameDurationAtIndex(0)); | 321 EXPECT_EQ(10.0f, m_lazyDecoder->frameDurationAtIndex(0)); |
322 EXPECT_EQ(20.0f, m_lazyDecoder->frameDurationAtIndex(1)); | 322 EXPECT_EQ(20.0f, m_lazyDecoder->frameDurationAtIndex(1)); |
323 EXPECT_EQ(30.0f, m_lazyDecoder->frameDurationAtIndex(2)); | 323 EXPECT_EQ(30.0f, m_lazyDecoder->frameDurationAtIndex(2)); |
324 EXPECT_EQ(10, m_lazyDecoder->repetitionCount()); | 324 EXPECT_EQ(10, m_lazyDecoder->repetitionCount()); |
325 } | 325 } |
326 | 326 |
327 TEST_F(DeferredImageDecoderTest, decodedSize) | 327 TEST_F(DeferredImageDecoderTest, decodedSize) |
328 { | 328 { |
329 m_decodedSize = IntSize(22, 33); | 329 m_decodedSize = IntSize(22, 33); |
330 m_lazyDecoder->setData(m_data, true); | 330 m_lazyDecoder->setData(m_data, true); |
331 RefPtr<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); | 331 sk_sp<SkImage> image = m_lazyDecoder->createFrameAtIndex(0); |
332 ASSERT_TRUE(image); | 332 ASSERT_TRUE(image); |
333 EXPECT_EQ(m_decodedSize.width(), image->width()); | 333 EXPECT_EQ(m_decodedSize.width(), image->width()); |
334 EXPECT_EQ(m_decodedSize.height(), image->height()); | 334 EXPECT_EQ(m_decodedSize.height(), image->height()); |
335 | 335 |
336 useMockImageDecoderFactory(); | 336 useMockImageDecoderFactory(); |
337 | 337 |
338 // The following code should not fail any assert. | 338 // The following code should not fail any assert. |
339 SkPictureRecorder recorder; | 339 SkPictureRecorder recorder; |
340 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); | 340 SkCanvas* tempCanvas = recorder.beginRecording(100, 100, 0, 0); |
341 tempCanvas->drawImage(image.get(), 0, 0); | 341 tempCanvas->drawImage(image.get(), 0, 0); |
(...skipping 23 matching lines...) Expand all Loading... |
365 | 365 |
366 SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); | 366 SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); |
367 | 367 |
368 size_t rowBytes = pixInfo.minRowBytes(); | 368 size_t rowBytes = pixInfo.minRowBytes(); |
369 size_t size = pixInfo.getSafeSize(rowBytes); | 369 size_t size = pixInfo.getSafeSize(rowBytes); |
370 | 370 |
371 SkAutoMalloc storage(size); | 371 SkAutoMalloc storage(size); |
372 SkPixmap pixmap(pixInfo, storage.get(), rowBytes); | 372 SkPixmap pixmap(pixInfo, storage.get(), rowBytes); |
373 | 373 |
374 // Before decoding, the frame is not known to be opaque. | 374 // Before decoding, the frame is not known to be opaque. |
375 RefPtr<SkImage> frame = decoder->createFrameAtIndex(0); | 375 sk_sp<SkImage> frame = decoder->createFrameAtIndex(0); |
376 ASSERT_TRUE(frame); | 376 ASSERT_TRUE(frame); |
377 EXPECT_FALSE(frame->isOpaque()); | 377 EXPECT_FALSE(frame->isOpaque()); |
378 | 378 |
379 // Force a lazy decode by reading pixels. | 379 // Force a lazy decode by reading pixels. |
380 EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); | 380 EXPECT_TRUE(frame->readPixels(pixmap, 0, 0)); |
381 | 381 |
382 // After decoding, the frame is known to be opaque. | 382 // After decoding, the frame is known to be opaque. |
383 frame = decoder->createFrameAtIndex(0); | 383 frame = decoder->createFrameAtIndex(0); |
384 ASSERT_TRUE(frame); | 384 ASSERT_TRUE(frame); |
385 EXPECT_TRUE(frame->isOpaque()); | 385 EXPECT_TRUE(frame->isOpaque()); |
(...skipping 25 matching lines...) Expand all Loading... |
411 { | 411 { |
412 RefPtr<SharedBuffer> originalData = SharedBuffer::create(m_data->data(), m_d
ata->size()); | 412 RefPtr<SharedBuffer> originalData = SharedBuffer::create(m_data->data(), m_d
ata->size()); |
413 EXPECT_EQ(originalData->size(), m_data->size()); | 413 EXPECT_EQ(originalData->size(), m_data->size()); |
414 m_lazyDecoder->setData(originalData, false); | 414 m_lazyDecoder->setData(originalData, false); |
415 RefPtr<SharedBuffer> newData = m_lazyDecoder->data(); | 415 RefPtr<SharedBuffer> newData = m_lazyDecoder->data(); |
416 EXPECT_EQ(originalData->size(), newData->size()); | 416 EXPECT_EQ(originalData->size(), newData->size()); |
417 EXPECT_EQ(0, std::memcmp(originalData->data(), newData->data(), newData->siz
e())); | 417 EXPECT_EQ(0, std::memcmp(originalData->data(), newData->data(), newData->siz
e())); |
418 } | 418 } |
419 | 419 |
420 } // namespace blink | 420 } // namespace blink |
OLD | NEW |