Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: tests/ImageDecodingTest.cpp

Issue 1340803002: discardable pixelrefs are gone, update tests accordingly (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests/DrawBitmapRectTest.cpp ('k') | tests/ImageTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "Resources.h" 8 #include "Resources.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 0xff6fac98, 0xff941d27, 0xff5fe411, 0xfffbb283, 354 0xff6fac98, 0xff941d27, 0xff5fe411, 0xfffbb283,
355 0xffd86e99, 0xff169162, 0xff71128c, 0xff39cab4, 355 0xffd86e99, 0xff169162, 0xff71128c, 0xff39cab4,
356 0xffa7fe63, 0xff4c956b, 0xffbc22e0, 0xffb272e4, 356 0xffa7fe63, 0xff4c956b, 0xffbc22e0, 0xffb272e4,
357 0xff129f4a, 0xffe34513, 0xff3d3742, 0xffbd190a, 357 0xff129f4a, 0xffe34513, 0xff3d3742, 0xffbd190a,
358 0xffb07222, 0xff2e23f8, 0xfff089d9, 0xffb35738, 358 0xffb07222, 0xff2e23f8, 0xfff089d9, 0xffb35738,
359 0xffa86022, 0xff3340fe, 0xff95fe71, 0xff6a71df 359 0xffa86022, 0xff3340fe, 0xff95fe71, 0xff6a71df
360 }; 360 };
361 static_assert((kExpectedWidth * kExpectedHeight) == SK_ARRAY_COUNT(kExpectedPixe ls), 361 static_assert((kExpectedWidth * kExpectedHeight) == SK_ARRAY_COUNT(kExpectedPixe ls),
362 "array_size_mismatch"); 362 "array_size_mismatch");
363 363
364 static bool decode_into_bitmap(skiatest::Reporter* r, SkBitmap* bm, SkData* enco ded) {
365 SkAutoTDelete<SkImageGenerator> gen(SkImageGenerator::NewFromEncoded(encoded ));
366 if (!gen) {
367 REPORTER_ASSERT(r, false);
368 return false;
369 }
370 if (!gen->tryGenerateBitmap(bm)) {
371 REPORTER_ASSERT(r, false);
372 return false;
373 }
374 return true;
375 }
376
364 DEF_TEST(WebP, reporter) { 377 DEF_TEST(WebP, reporter) {
365 const unsigned char encodedWebP[] = { 378 const unsigned char encodedWebP[] = {
366 0x52, 0x49, 0x46, 0x46, 0x2c, 0x01, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50, 379 0x52, 0x49, 0x46, 0x46, 0x2c, 0x01, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50,
367 0x56, 0x50, 0x38, 0x4c, 0x20, 0x01, 0x00, 0x00, 0x2f, 0x07, 0xc0, 0x01, 380 0x56, 0x50, 0x38, 0x4c, 0x20, 0x01, 0x00, 0x00, 0x2f, 0x07, 0xc0, 0x01,
368 0x00, 0xff, 0x01, 0x45, 0x03, 0x00, 0xe2, 0xd5, 0xae, 0x60, 0x2b, 0xad, 381 0x00, 0xff, 0x01, 0x45, 0x03, 0x00, 0xe2, 0xd5, 0xae, 0x60, 0x2b, 0xad,
369 0xd9, 0x68, 0x76, 0xb6, 0x8d, 0x6a, 0x1d, 0xc0, 0xe6, 0x19, 0xd6, 0x16, 382 0xd9, 0x68, 0x76, 0xb6, 0x8d, 0x6a, 0x1d, 0xc0, 0xe6, 0x19, 0xd6, 0x16,
370 0xb7, 0xb4, 0xef, 0xcf, 0xc3, 0x15, 0x6c, 0xb3, 0xbd, 0x77, 0x0d, 0x85, 383 0xb7, 0xb4, 0xef, 0xcf, 0xc3, 0x15, 0x6c, 0xb3, 0xbd, 0x77, 0x0d, 0x85,
371 0x6d, 0x1b, 0xa9, 0xb1, 0x2b, 0xdc, 0x3d, 0x83, 0xdb, 0x00, 0x00, 0xc8, 384 0x6d, 0x1b, 0xa9, 0xb1, 0x2b, 0xdc, 0x3d, 0x83, 0xdb, 0x00, 0x00, 0xc8,
372 0x26, 0xe5, 0x01, 0x99, 0x8a, 0xd5, 0xdd, 0xfc, 0x82, 0xcd, 0xcd, 0x9a, 385 0x26, 0xe5, 0x01, 0x99, 0x8a, 0xd5, 0xdd, 0xfc, 0x82, 0xcd, 0xcd, 0x9a,
373 0x8c, 0x13, 0xcc, 0x1b, 0xba, 0xf5, 0x05, 0xdb, 0xee, 0x6a, 0xdb, 0x38, 386 0x8c, 0x13, 0xcc, 0x1b, 0xba, 0xf5, 0x05, 0xdb, 0xee, 0x6a, 0xdb, 0x38,
374 0x60, 0xfe, 0x43, 0x2c, 0xd4, 0x6a, 0x99, 0x4d, 0xc6, 0xc0, 0xd3, 0x28, 387 0x60, 0xfe, 0x43, 0x2c, 0xd4, 0x6a, 0x99, 0x4d, 0xc6, 0xc0, 0xd3, 0x28,
375 0x1b, 0xc1, 0xb1, 0x17, 0x4e, 0x43, 0x0e, 0x3d, 0x27, 0xe9, 0xe4, 0x84, 388 0x1b, 0xc1, 0xb1, 0x17, 0x4e, 0x43, 0x0e, 0x3d, 0x27, 0xe9, 0xe4, 0x84,
376 0x4f, 0x24, 0x62, 0x69, 0x85, 0x43, 0x8d, 0xc2, 0x04, 0x00, 0x07, 0x59, 389 0x4f, 0x24, 0x62, 0x69, 0x85, 0x43, 0x8d, 0xc2, 0x04, 0x00, 0x07, 0x59,
377 0x60, 0xfd, 0x8b, 0x4d, 0x60, 0x32, 0x72, 0xcf, 0x88, 0x0c, 0x2f, 0x2f, 390 0x60, 0xfd, 0x8b, 0x4d, 0x60, 0x32, 0x72, 0xcf, 0x88, 0x0c, 0x2f, 0x2f,
378 0xad, 0x62, 0xbd, 0x27, 0x09, 0x16, 0x70, 0x78, 0x6c, 0xd9, 0x82, 0xef, 391 0xad, 0x62, 0xbd, 0x27, 0x09, 0x16, 0x70, 0x78, 0x6c, 0xd9, 0x82, 0xef,
379 0x1a, 0xa2, 0xcc, 0xf0, 0xf1, 0x6f, 0xd8, 0x78, 0x2e, 0x39, 0xa1, 0xcf, 392 0x1a, 0xa2, 0xcc, 0xf0, 0xf1, 0x6f, 0xd8, 0x78, 0x2e, 0x39, 0xa1, 0xcf,
380 0x14, 0x4b, 0x89, 0xb4, 0x1b, 0x48, 0x15, 0x7c, 0x48, 0x6f, 0x8c, 0x20, 393 0x14, 0x4b, 0x89, 0xb4, 0x1b, 0x48, 0x15, 0x7c, 0x48, 0x6f, 0x8c, 0x20,
381 0xb7, 0x00, 0xcf, 0xfc, 0xdb, 0xd0, 0xe9, 0xe7, 0x42, 0x09, 0xa4, 0x03, 394 0xb7, 0x00, 0xcf, 0xfc, 0xdb, 0xd0, 0xe9, 0xe7, 0x42, 0x09, 0xa4, 0x03,
382 0x40, 0xac, 0xda, 0x40, 0x01, 0x00, 0x5f, 0xa1, 0x3d, 0x64, 0xe1, 0xf4, 395 0x40, 0xac, 0xda, 0x40, 0x01, 0x00, 0x5f, 0xa1, 0x3d, 0x64, 0xe1, 0xf4,
383 0x03, 0x45, 0x29, 0xe0, 0xe2, 0x4a, 0xc3, 0xa2, 0xe8, 0xe0, 0x25, 0x12, 396 0x03, 0x45, 0x29, 0xe0, 0xe2, 0x4a, 0xc3, 0xa2, 0xe8, 0xe0, 0x25, 0x12,
384 0x74, 0xc6, 0xe8, 0xfb, 0x93, 0x4f, 0x9f, 0x5e, 0xc0, 0xa6, 0x91, 0x1b, 397 0x74, 0xc6, 0xe8, 0xfb, 0x93, 0x4f, 0x9f, 0x5e, 0xc0, 0xa6, 0x91, 0x1b,
385 0xa4, 0x24, 0x82, 0xc3, 0x61, 0x07, 0x4c, 0x49, 0x4f, 0x53, 0xae, 0x5f, 398 0xa4, 0x24, 0x82, 0xc3, 0x61, 0x07, 0x4c, 0x49, 0x4f, 0x53, 0xae, 0x5f,
386 0x5d, 0x39, 0x36, 0xc0, 0x5b, 0x57, 0x54, 0x60, 0x10, 0x00, 0x00, 0xd1, 399 0x5d, 0x39, 0x36, 0xc0, 0x5b, 0x57, 0x54, 0x60, 0x10, 0x00, 0x00, 0xd1,
387 0x68, 0xb6, 0x6d, 0xdb, 0x36, 0x22, 0xfa, 0x1f, 0x35, 0x75, 0x22, 0xec, 400 0x68, 0xb6, 0x6d, 0xdb, 0x36, 0x22, 0xfa, 0x1f, 0x35, 0x75, 0x22, 0xec,
388 0x31, 0xbc, 0x5d, 0x8f, 0x87, 0x53, 0xa2, 0x05, 0x8c, 0x2f, 0xcd, 0xa8, 401 0x31, 0xbc, 0x5d, 0x8f, 0x87, 0x53, 0xa2, 0x05, 0x8c, 0x2f, 0xcd, 0xa8,
389 0xa7, 0xf3, 0xa3, 0xbd, 0x83, 0x8b, 0x2a, 0xc8, 0x58, 0xf5, 0xac, 0x80, 402 0xa7, 0xf3, 0xa3, 0xbd, 0x83, 0x8b, 0x2a, 0xc8, 0x58, 0xf5, 0xac, 0x80,
390 0xe3, 0xfe, 0x66, 0xa4, 0x7c, 0x1b, 0x6c, 0xd1, 0xa9, 0xd8, 0x14, 0xd0, 403 0xe3, 0xfe, 0x66, 0xa4, 0x7c, 0x1b, 0x6c, 0xd1, 0xa9, 0xd8, 0x14, 0xd0,
391 0xc5, 0xb5, 0x39, 0x71, 0x97, 0x19, 0x19, 0x1b 404 0xc5, 0xb5, 0x39, 0x71, 0x97, 0x19, 0x19, 0x1b
392 }; 405 };
393 SkAutoDataUnref encoded(SkData::NewWithCopy(encodedWebP, 406
394 sizeof(encodedWebP)));
395 SkBitmap bm; 407 SkBitmap bm;
396 408 SkAutoDataUnref encoded(SkData::NewWithoutCopy(encodedWebP, sizeof(encodedWe bP)));
397 bool success = SkInstallDiscardablePixelRef(encoded, &bm); 409 if (!decode_into_bitmap(reporter, &bm, encoded)) {
398
399 REPORTER_ASSERT(reporter, success);
400 if (!success) {
401 return; 410 return;
402 } 411 }
403 SkAutoLockPixels alp(bm); 412 if (kExpectedWidth != bm.width() || kExpectedHeight != bm.height()) {
413 REPORTER_ASSERT(reporter, false);
414 return;
415 }
404 416
405 bool rightSize = ((kExpectedWidth == bm.width()) 417 bool error = false;
406 && (kExpectedHeight == bm.height())); 418 const SkColor* correctPixel = kExpectedPixels;
407 REPORTER_ASSERT(reporter, rightSize); 419 for (int y = 0; y < bm.height(); ++y) {
408 if (rightSize) { 420 for (int x = 0; x < bm.width(); ++x) {
409 bool error = false; 421 error |= (*correctPixel != bm.getColor(x, y));
410 const SkColor* correctPixel = kExpectedPixels; 422 ++correctPixel;
411 for (int y = 0; y < bm.height(); ++y) {
412 for (int x = 0; x < bm.width(); ++x) {
413 error |= (*correctPixel != bm.getColor(x, y));
414 ++correctPixel;
415 }
416 } 423 }
417 REPORTER_ASSERT(reporter, !error); 424 }
425 REPORTER_ASSERT(reporter, !error);
426 }
427
428 ////////////////////////////////////////////////////////////////////////////////
429
430 /**
431 * A test for the SkDecodingImageGenerator::Create
432 */
433 DEF_TEST(ImprovedBitmapFactory, reporter) {
434 SkString pngFilename = GetResourcePath("randPixels.png");
435 SkAutoTDelete<SkStreamRewindable> stream(SkStream::NewFromFile(pngFilename.c _str()));
436 if (sk_exists(pngFilename.c_str())) {
437 // example of how Android will do this inside their BitmapFactory
438 SkDecodingImageGenerator::Options opts(1, true, kN32_SkColorType);
439 SkBitmap bm;
440 SkImageGenerator* gen = SkDecodingImageGenerator::Create(stream, opts);
441 REPORTER_ASSERT(reporter, gen->tryGenerateBitmap(&bm));
418 } 442 }
419 } 443 }
420 444
421 //////////////////////////////////////////////////////////////////////////////// 445 ////////////////////////////////////////////////////////////////////////////////
422 446
423 // example of how Android will do this inside their BitmapFactory
424 static SkPixelRef* install_pixel_ref(SkBitmap* bitmap,
425 SkStreamRewindable* stream,
426 int sampleSize, bool ditherImage) {
427 SkASSERT(bitmap != nullptr);
428 SkASSERT(stream != nullptr);
429 SkASSERT(stream->rewind());
430 SkColorType colorType = bitmap->colorType();
431 SkDecodingImageGenerator::Options opts(sampleSize, ditherImage, colorType);
432 if (SkInstallDiscardablePixelRef(
433 SkDecodingImageGenerator::Create(stream, opts), bitmap)) {
434 return bitmap->pixelRef();
435 }
436 return nullptr;
437 }
438 /**
439 * A test for the SkDecodingImageGenerator::Create and
440 * SkInstallDiscardablePixelRef functions.
441 */
442 DEF_TEST(ImprovedBitmapFactory, reporter) {
443 SkString pngFilename = GetResourcePath("randPixels.png");
444 SkAutoTDelete<SkStreamRewindable> stream(SkStream::NewFromFile(pngFilename.c _str()));
445 if (sk_exists(pngFilename.c_str())) {
446 SkBitmap bm;
447 SkAssertResult(bm.setInfo(SkImageInfo::MakeN32Premul(1, 1)));
448 REPORTER_ASSERT(reporter,
449 install_pixel_ref(&bm, stream.detach(), 1, true));
450 SkAutoLockPixels alp(bm);
451 REPORTER_ASSERT(reporter, bm.getPixels());
452 }
453 }
454
455
456 ////////////////////////////////////////////////////////////////////////////////
457
458 #if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX) 447 #if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX)
459 static inline bool check_rounding(int value, int dividend, int divisor) { 448 static inline bool check_rounding(int value, int dividend, int divisor) {
460 // returns true if the value is greater than floor(dividend/divisor) 449 // returns true if the value is greater than floor(dividend/divisor)
461 // and less than SkNextPow2(ceil(dividend - divisor)) 450 // and less than SkNextPow2(ceil(dividend - divisor))
462 return (((divisor * value) > (dividend - divisor)) 451 return (((divisor * value) > (dividend - divisor))
463 && value <= SkNextPow2(((dividend - 1) / divisor) + 1)); 452 && value <= SkNextPow2(((dividend - 1) / divisor) + 1));
464 } 453 }
465 #endif // SK_BUILD_FOR_ANDROID || SK_BUILD_FOR_UNIX 454 #endif // SK_BUILD_FOR_ANDROID || SK_BUILD_FOR_UNIX
466 455
467 456
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 * Given either a SkStream or a SkData, try to decode the encoded 495 * Given either a SkStream or a SkData, try to decode the encoded
507 * image using the specified options and report errors. 496 * image using the specified options and report errors.
508 */ 497 */
509 static void test_options(skiatest::Reporter* reporter, 498 static void test_options(skiatest::Reporter* reporter,
510 const SkDecodingImageGenerator::Options& opts, 499 const SkDecodingImageGenerator::Options& opts,
511 SkStreamRewindable* encodedStream, 500 SkStreamRewindable* encodedStream,
512 SkData* encodedData, 501 SkData* encodedData,
513 bool useData, 502 bool useData,
514 const SkString& path) { 503 const SkString& path) {
515 SkBitmap bm; 504 SkBitmap bm;
516 bool success = false; 505 SkImageGenerator* gen;
506
517 if (useData) { 507 if (useData) {
518 if (nullptr == encodedData) { 508 if (nullptr == encodedData) {
519 return; 509 return;
520 } 510 }
521 success = SkInstallDiscardablePixelRef( 511 gen = SkDecodingImageGenerator::Create(encodedData, opts);
522 SkDecodingImageGenerator::Create(encodedData, opts), &bm);
523 } else { 512 } else {
524 if (nullptr == encodedStream) { 513 if (nullptr == encodedStream) {
525 return; 514 return;
526 } 515 }
527 success = SkInstallDiscardablePixelRef( 516 gen = SkDecodingImageGenerator::Create(encodedStream->duplicate(), opts) ;
528 SkDecodingImageGenerator::Create(encodedStream->duplicate(), opts), &bm);
529 } 517 }
530 if (!success) { 518 if (!gen) {
531 if (opts.fUseRequestedColorType 519 if (opts.fUseRequestedColorType && (kARGB_4444_SkColorType == opts.fRequ estedColorType)) {
532 && (kARGB_4444_SkColorType == opts.fRequestedColorType)) {
533 return; // Ignore known conversion inabilities. 520 return; // Ignore known conversion inabilities.
534 } 521 }
535 // If we get here, it's a failure and we will need more 522 // If we get here, it's a failure and we will need more
536 // information about why it failed. 523 // information about why it failed.
537 ERRORF(reporter, "Bounds decode failed [sampleSize=%d dither=%s " 524 ERRORF(reporter, "Bounds decode failed [sampleSize=%d dither=%s "
538 "colorType=%s %s]", opts.fSampleSize, yn(opts.fDitherImage), 525 "colorType=%s %s]", opts.fSampleSize, yn(opts.fDitherImage),
539 options_colorType(opts), path.c_str()); 526 options_colorType(opts), path.c_str());
540 return; 527 return;
541 } 528 }
529 if (!gen->tryGenerateBitmap(&bm)) {
530 return;
531 }
532
542 #if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX) 533 #if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX)
543 // Android is the only system that use Skia's image decoders in 534 // Android is the only system that use Skia's image decoders in
544 // production. For now, we'll only verify that samplesize works 535 // production. For now, we'll only verify that samplesize works
545 // on systems where it already is known to work. 536 // on systems where it already is known to work.
546 REPORTER_ASSERT(reporter, check_rounding(bm.height(), kExpectedHeight, 537 REPORTER_ASSERT(reporter, check_rounding(bm.height(), kExpectedHeight, opts. fSampleSize));
547 opts.fSampleSize)); 538 REPORTER_ASSERT(reporter, check_rounding(bm.width(), kExpectedWidth, opts.fS ampleSize));
548 REPORTER_ASSERT(reporter, check_rounding(bm.width(), kExpectedWidth,
549 opts.fSampleSize));
550 // The ImageDecoder API doesn't guarantee that SampleSize does 539 // The ImageDecoder API doesn't guarantee that SampleSize does
551 // anything at all, but the decoders that this test excercises all 540 // anything at all, but the decoders that this test excercises all
552 // produce an output size in the following range: 541 // produce an output size in the following range:
553 // (((sample_size * out_size) > (in_size - sample_size)) 542 // (((sample_size * out_size) > (in_size - sample_size))
554 // && out_size <= SkNextPow2(((in_size - 1) / sample_size) + 1)); 543 // && out_size <= SkNextPow2(((in_size - 1) / sample_size) + 1));
555 #endif // SK_BUILD_FOR_ANDROID || SK_BUILD_FOR_UNIX 544 #endif // SK_BUILD_FOR_ANDROID || SK_BUILD_FOR_UNIX
556 SkAutoLockPixels alp(bm);
557 if (bm.getPixels() == nullptr) {
558 ERRORF(reporter, "Pixel decode failed [sampleSize=%d dither=%s "
559 "colorType=%s %s]", opts.fSampleSize, yn(opts.fDitherImage),
560 options_colorType(opts), path.c_str());
561 return;
562 }
563 545
564 SkColorType requestedColorType = opts.fRequestedColorType; 546 SkColorType requestedColorType = opts.fRequestedColorType;
565 REPORTER_ASSERT(reporter, 547 REPORTER_ASSERT(reporter,
566 (!opts.fUseRequestedColorType) 548 (!opts.fUseRequestedColorType)
567 || (bm.colorType() == requestedColorType)); 549 || (bm.colorType() == requestedColorType));
568 550
569 // Condition under which we should check the decoding results: 551 // Condition under which we should check the decoding results:
570 if ((kN32_SkColorType == bm.colorType()) 552 if ((kN32_SkColorType == bm.colorType())
571 && (!path.endsWith(".jpg")) // lossy 553 && (!path.endsWith(".jpg")) // lossy
572 && (opts.fSampleSize == 1)) { // scaled 554 && (opts.fSampleSize == 1)) { // scaled
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 SkDecodingImageGenerator::Options options(scaleList[i], 636 SkDecodingImageGenerator::Options options(scaleList[i],
655 ditherList[j]); 637 ditherList[j]);
656 test_options(reporter, options, encodedStream, encodedData, 638 test_options(reporter, options, encodedStream, encodedData,
657 useDataList[m], path); 639 useDataList[m], path);
658 } 640 }
659 } 641 }
660 } 642 }
661 } 643 }
662 } 644 }
663 645
664 DEF_TEST(DiscardablePixelRef_SecondLockColorTableCheck, r) { 646 DEF_TEST(DecodingImageGenerator_ColorTableCheck, r) {
665 SkString resourceDir = GetResourcePath(); 647 SkString resourceDir = GetResourcePath();
666 SkString path = SkOSPath::Join(resourceDir.c_str(), "randPixels.gif"); 648 SkString path = SkOSPath::Join(resourceDir.c_str(), "randPixels.gif");
667 if (!sk_exists(path.c_str())) { 649 if (!sk_exists(path.c_str())) {
668 return; 650 return;
669 } 651 }
670 SkAutoDataUnref encoded(SkData::NewFromFileName(path.c_str())); 652 SkAutoDataUnref encoded(SkData::NewFromFileName(path.c_str()));
671 SkBitmap bitmap; 653 SkBitmap bitmap;
672 if (!SkInstallDiscardablePixelRef( 654 SkImageGenerator* gen = SkDecodingImageGenerator::Create(encoded,
673 SkDecodingImageGenerator::Create( 655 SkDecodingImageGene rator::Options());
674 encoded, SkDecodingImageGenerator::Options()), &bitmap)) { 656 if (!gen) {
675 #ifndef SK_BUILD_FOR_WIN 657 REPORTER_ASSERT(r, false);
676 ERRORF(r, "SkInstallDiscardablePixelRef [randPixels.gif] failed."); 658 return;
677 #endif 659 }
660 if (!gen->tryGenerateBitmap(&bitmap)) {
661 REPORTER_ASSERT(r, false);
678 return; 662 return;
679 } 663 }
680 if (kIndex_8_SkColorType != bitmap.colorType()) { 664 if (kIndex_8_SkColorType != bitmap.colorType()) {
681 return; 665 return;
682 } 666 }
683 { 667 REPORTER_ASSERT(r, bitmap.getColorTable());
684 SkAutoLockPixels alp(bitmap);
685 REPORTER_ASSERT(r, bitmap.getColorTable() && "first pass");
686 }
687 {
688 SkAutoLockPixels alp(bitmap);
689 REPORTER_ASSERT(r, bitmap.getColorTable() && "second pass");
690 }
691 } 668 }
692 669
693 670
694 //////////////////////////////////////////////////////////////////////////////// 671 ////////////////////////////////////////////////////////////////////////////////
695 namespace { 672 namespace {
696 class SingleAllocator : public SkBitmap::Allocator { 673 class SingleAllocator : public SkBitmap::Allocator {
697 public: 674 public:
698 SingleAllocator(void* p, size_t s) : fPixels(p), fSize(s) { } 675 SingleAllocator(void* p, size_t s) : fPixels(p), fSize(s) { }
699 ~SingleAllocator() {} 676 ~SingleAllocator() {}
700 // If the pixels in fPixels are big enough, use them. 677 // If the pixels in fPixels are big enough, use them.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 new SingleAllocator((void*)pixels.get(), sizeof(uint16_t) * pixelCou nt)); 722 new SingleAllocator((void*)pixels.get(), sizeof(uint16_t) * pixelCou nt));
746 decoder->setAllocator(allocator); 723 decoder->setAllocator(allocator);
747 decoder->setSampleSize(2); 724 decoder->setSampleSize(2);
748 SkBitmap bitmap; 725 SkBitmap bitmap;
749 bool success = decoder->decode(stream, &bitmap, kRGB_565_SkColorType, 726 bool success = decoder->decode(stream, &bitmap, kRGB_565_SkColorType,
750 SkImageDecoder::kDecodePixels_Mode) != SkImag eDecoder::kFailure; 727 SkImageDecoder::kDecodePixels_Mode) != SkImag eDecoder::kFailure;
751 REPORTER_ASSERT(r, success); 728 REPORTER_ASSERT(r, success);
752 REPORTER_ASSERT(r, !allocator->ready()); // Decoder used correct memory 729 REPORTER_ASSERT(r, !allocator->ready()); // Decoder used correct memory
753 REPORTER_ASSERT(r, sentinal == pixels[pixelCount]); 730 REPORTER_ASSERT(r, sentinal == pixels[pixelCount]);
754 } 731 }
OLDNEW
« no previous file with comments | « tests/DrawBitmapRectTest.cpp ('k') | tests/ImageTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698