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 |