| 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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 RefPtr<SharedBuffer> m_data; | 168 RefPtr<SharedBuffer> m_data; |
| 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 RefPtr<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 RefPtr<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 RefPtr<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 RefPtr<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 RefPtr<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); |
| 303 | 303 |
| 304 image = m_lazyDecoder->createFrameAtIndex(0); | 304 image = m_lazyDecoder->createFrameAtIndex(0); |
| 305 ASSERT_TRUE(image); | 305 ASSERT_TRUE(image); |
| 306 unsigned secondId = image->uniqueID(); | 306 unsigned secondId = image->uniqueID(); |
| 307 EXPECT_NE(firstId, secondId); | 307 EXPECT_NE(firstId, secondId); |
| 308 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 308 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
| 309 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(1)); | 309 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(1)); |
| 310 EXPECT_EQ(20.0f, m_lazyDecoder->frameDurationAtIndex(1)); | 310 EXPECT_EQ(20.0f, m_lazyDecoder->frameDurationAtIndex(1)); |
| 311 EXPECT_TRUE(m_actualDecoder); | 311 EXPECT_TRUE(m_actualDecoder); |
| 312 | 312 |
| 313 m_frameCount = 3; | 313 m_frameCount = 3; |
| 314 m_frameDuration = 30; | 314 m_frameDuration = 30; |
| 315 m_status = ImageFrame::FrameComplete; | 315 m_status = ImageFrame::FrameComplete; |
| 316 m_lazyDecoder->setData(*m_data, true); | 316 m_lazyDecoder->setData(m_data, true); |
| 317 EXPECT_FALSE(m_actualDecoder); | 317 EXPECT_FALSE(m_actualDecoder); |
| 318 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); | 318 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(0)); |
| 319 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(1)); | 319 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(1)); |
| 320 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(2)); | 320 EXPECT_TRUE(m_lazyDecoder->frameIsCompleteAtIndex(2)); |
| 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 RefPtr<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); |
| 342 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); | 342 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
| 343 EXPECT_EQ(0, m_decodeRequestCount); | 343 EXPECT_EQ(0, m_decodeRequestCount); |
| 344 m_surface->getCanvas()->drawPicture(picture); | 344 m_surface->getCanvas()->drawPicture(picture); |
| 345 EXPECT_EQ(1, m_decodeRequestCount); | 345 EXPECT_EQ(1, m_decodeRequestCount); |
| 346 } | 346 } |
| 347 | 347 |
| 348 TEST_F(DeferredImageDecoderTest, smallerFrameCount) | 348 TEST_F(DeferredImageDecoderTest, smallerFrameCount) |
| 349 { | 349 { |
| 350 m_frameCount = 1; | 350 m_frameCount = 1; |
| 351 m_lazyDecoder->setData(*m_data, false); | 351 m_lazyDecoder->setData(m_data, false); |
| 352 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); | 352 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); |
| 353 m_frameCount = 2; | 353 m_frameCount = 2; |
| 354 m_lazyDecoder->setData(*m_data, false); | 354 m_lazyDecoder->setData(m_data, false); |
| 355 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); | 355 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); |
| 356 m_frameCount = 0; | 356 m_frameCount = 0; |
| 357 m_lazyDecoder->setData(*m_data, true); | 357 m_lazyDecoder->setData(m_data, true); |
| 358 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); | 358 EXPECT_EQ(m_frameCount, m_lazyDecoder->frameCount()); |
| 359 } | 359 } |
| 360 | 360 |
| 361 TEST_F(DeferredImageDecoderTest, frameOpacity) | 361 TEST_F(DeferredImageDecoderTest, frameOpacity) |
| 362 { | 362 { |
| 363 std::unique_ptr<ImageDecoder> actualDecoder = ImageDecoder::create(ImageDeco
der::determineImageType(*m_data), | 363 std::unique_ptr<DeferredImageDecoder> decoder = DeferredImageDecoder::create
(m_data, true, |
| 364 ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileAppl
ied); | 364 ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileAppl
ied); |
| 365 std::unique_ptr<DeferredImageDecoder> decoder = DeferredImageDecoder::create
ForTesting(std::move(actualDecoder)); | |
| 366 decoder->setData(*m_data, true); | |
| 367 | 365 |
| 368 SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); | 366 SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1); |
| 369 | 367 |
| 370 size_t rowBytes = pixInfo.minRowBytes(); | 368 size_t rowBytes = pixInfo.minRowBytes(); |
| 371 size_t size = pixInfo.getSafeSize(rowBytes); | 369 size_t size = pixInfo.getSafeSize(rowBytes); |
| 372 | 370 |
| 373 SkAutoMalloc storage(size); | 371 SkAutoMalloc storage(size); |
| 374 SkPixmap pixmap(pixInfo, storage.get(), rowBytes); | 372 SkPixmap pixmap(pixInfo, storage.get(), rowBytes); |
| 375 | 373 |
| 376 // Before decoding, the frame is not known to be opaque. | 374 // Before decoding, the frame is not known to be opaque. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 392 | 390 |
| 393 // The DeferredImageDecoder would sometimes assume that a frame was a certain | 391 // The DeferredImageDecoder would sometimes assume that a frame was a certain |
| 394 // size even if the actual decoder reported it had a size of 0 bytes. This test | 392 // size even if the actual decoder reported it had a size of 0 bytes. This test |
| 395 // verifies that it's fixed by always checking with the actual decoder when | 393 // verifies that it's fixed by always checking with the actual decoder when |
| 396 // creating a frame. | 394 // creating a frame. |
| 397 TEST_F(DeferredImageDecoderTest, respectActualDecoderSizeOnCreate) | 395 TEST_F(DeferredImageDecoderTest, respectActualDecoderSizeOnCreate) |
| 398 { | 396 { |
| 399 m_data = SharedBuffer::create(animatedGIF, sizeof(animatedGIF)); | 397 m_data = SharedBuffer::create(animatedGIF, sizeof(animatedGIF)); |
| 400 m_frameCount = 2; | 398 m_frameCount = 2; |
| 401 forceFirstFrameToBeEmpty(); | 399 forceFirstFrameToBeEmpty(); |
| 402 m_lazyDecoder->setData(*m_data, false); | 400 m_lazyDecoder->setData(m_data, false); |
| 403 m_lazyDecoder->createFrameAtIndex(0); | 401 m_lazyDecoder->createFrameAtIndex(0); |
| 404 m_lazyDecoder->createFrameAtIndex(1); | 402 m_lazyDecoder->createFrameAtIndex(1); |
| 405 m_lazyDecoder->setData(*m_data, true); | 403 m_lazyDecoder->setData(m_data, true); |
| 406 // Clears only the first frame (0 bytes). If DeferredImageDecoder doesn't | 404 // Clears only the first frame (0 bytes). If DeferredImageDecoder doesn't |
| 407 // check with the actual decoder it reports 4 bytes instead. | 405 // check with the actual decoder it reports 4 bytes instead. |
| 408 size_t frameBytesCleared = m_lazyDecoder->clearCacheExceptFrame(1); | 406 size_t frameBytesCleared = m_lazyDecoder->clearCacheExceptFrame(1); |
| 409 EXPECT_EQ(static_cast<size_t>(0), frameBytesCleared); | 407 EXPECT_EQ(static_cast<size_t>(0), frameBytesCleared); |
| 410 } | 408 } |
| 411 | 409 |
| 412 TEST_F(DeferredImageDecoderTest, data) | 410 TEST_F(DeferredImageDecoderTest, data) |
| 413 { | 411 { |
| 414 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()); |
| 415 EXPECT_EQ(originalData->size(), m_data->size()); | 413 EXPECT_EQ(originalData->size(), m_data->size()); |
| 416 m_lazyDecoder->setData(*originalData, false); | 414 m_lazyDecoder->setData(originalData, false); |
| 417 RefPtr<SharedBuffer> newData = m_lazyDecoder->data(); | 415 RefPtr<SharedBuffer> newData = m_lazyDecoder->data(); |
| 418 EXPECT_EQ(originalData->size(), newData->size()); | 416 EXPECT_EQ(originalData->size(), newData->size()); |
| 419 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())); |
| 420 } | 418 } |
| 421 | 419 |
| 422 } // namespace blink | 420 } // namespace blink |
| OLD | NEW |