static void TestBitmapFactory(skiatest::Reporter* reporter) { SkAutoTDelete<SkBitmap> bitmap(create_bitmap()); SkASSERT(bitmap.get() != NULL); SkAutoDataUnref encodedBitmap(create_data_from_bitmap(*bitmap.get())); bool encodeSucceeded = encodedBitmap.get() != NULL; SkASSERT(encodeSucceeded); ImageCacheHolder cacheHolder; SkAutoTUnref<SkLruImageCache> lruCache(SkNEW_ARGS(SkLruImageCache, (1024 * 1024))); cacheHolder.addImageCache(lruCache); cacheHolder.addImageCache(NULL); SkImageCache* purgeableCache = SkPurgeableImageCache::Create(); if (purgeableCache != NULL) { cacheHolder.addImageCache(purgeableCache); purgeableCache->unref(); } for (int i = 0; i < cacheHolder.count(); i++) { SkImageCache* cache = cacheHolder.getAt(i); if (cache != NULL) { test_cache(reporter, cache); } if (encodeSucceeded) { test_factory(reporter, cache, encodedBitmap, *bitmap.get()); } } }
/** This function tests three differently encoded images against the original bitmap */ static void test_three_encodings(skiatest::Reporter* reporter, InstallEncoded install) { SkBitmap original; make_test_image(&original); REPORTER_ASSERT(reporter, !original.empty()); REPORTER_ASSERT(reporter, !original.isNull()); if (original.empty() || original.isNull()) { return; } static const SkImageEncoder::Type types[] = { SkImageEncoder::kPNG_Type, SkImageEncoder::kJPEG_Type, SkImageEncoder::kWEBP_Type }; for (size_t i = 0; i < SK_ARRAY_COUNT(types); i++) { SkImageEncoder::Type type = types[i]; SkAutoDataUnref encoded(create_data_from_bitmap(original, type)); REPORTER_ASSERT(reporter, encoded.get() != NULL); if (NULL == encoded.get()) { continue; } SkBitmap lazy; bool installSuccess = install(encoded.get(), &lazy); REPORTER_ASSERT(reporter, installSuccess); if (!installSuccess) { continue; } REPORTER_ASSERT(reporter, NULL == lazy.getPixels()); { SkAutoLockPixels autoLockPixels(lazy); // now pixels are good. REPORTER_ASSERT(reporter, lazy.getPixels()); if (NULL == lazy.getPixels()) { continue; } } // pixels should be gone! REPORTER_ASSERT(reporter, NULL == lazy.getPixels()); { SkAutoLockPixels autoLockPixels(lazy); // now pixels are good. REPORTER_ASSERT(reporter, lazy.getPixels()); if (NULL == lazy.getPixels()) { continue; } } bool comparePixels = (SkImageEncoder::kPNG_Type == type); compare_bitmaps(reporter, original, lazy, comparePixels); } }