| 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 |