| Index: tests/BitmapFactoryTest.cpp
|
| diff --git a/tests/BitmapFactoryTest.cpp b/tests/BitmapFactoryTest.cpp
|
| deleted file mode 100644
|
| index 9f1fa478fda036712d35784be0974c72cb816f5d..0000000000000000000000000000000000000000
|
| --- a/tests/BitmapFactoryTest.cpp
|
| +++ /dev/null
|
| @@ -1,197 +0,0 @@
|
| -/*
|
| - * Copyright 2012 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#ifdef SK_DEBUG
|
| -
|
| -#include "SkBitmap.h"
|
| -#include "SkBitmapFactory.h"
|
| -#include "SkCanvas.h"
|
| -#include "SkColor.h"
|
| -#include "SkData.h"
|
| -#include "SkImageDecoder.h"
|
| -#include "SkImageEncoder.h"
|
| -#include "SkLazyPixelRef.h"
|
| -#include "SkLruImageCache.h"
|
| -#include "SkPaint.h"
|
| -#include "SkPurgeableImageCache.h"
|
| -#include "SkStream.h"
|
| -#include "SkTemplates.h"
|
| -#include "Test.h"
|
| -
|
| -static SkBitmap* create_bitmap() {
|
| - SkBitmap* bm = SkNEW(SkBitmap);
|
| - // Use a large bitmap.
|
| - const int W = 1000, H = 1000;
|
| - bm->setConfig(SkBitmap::kARGB_8888_Config, W, H);
|
| - bm->allocPixels();
|
| - bm->eraseColor(SK_ColorBLACK);
|
| - SkCanvas canvas(*bm);
|
| - SkPaint paint;
|
| - paint.setColor(SK_ColorBLUE);
|
| - canvas.drawRectCoords(0, 0, SkIntToScalar(W/2), SkIntToScalar(H/2), paint);
|
| - return bm;
|
| -}
|
| -
|
| -static SkData* create_data_from_bitmap(const SkBitmap& bm) {
|
| - SkDynamicMemoryWStream stream;
|
| - if (SkImageEncoder::EncodeStream(&stream, bm, SkImageEncoder::kPNG_Type, 100)) {
|
| - return stream.copyToData();
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -static void assert_bounds_equal(skiatest::Reporter* reporter, const SkBitmap& bm1,
|
| - const SkBitmap& bm2) {
|
| - REPORTER_ASSERT(reporter, bm1.width() == bm2.width());
|
| - REPORTER_ASSERT(reporter, bm1.height() == bm2.height());
|
| -}
|
| -
|
| -static void test_cache(skiatest::Reporter* reporter, SkImageCache* cache) {
|
| - // Test the cache directly:
|
| - cache->purgeAllUnpinnedCaches();
|
| - intptr_t ID = SkImageCache::UNINITIALIZED_ID;
|
| - const size_t size = 1000;
|
| - char buffer[size];
|
| - sk_bzero((void*) buffer, size);
|
| - void* memory = cache->allocAndPinCache(size, &ID);
|
| - if (memory != NULL) {
|
| - memcpy(memory, (void*)buffer, size);
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID) == SkImageCache::kPinned_MemoryStatus);
|
| - cache->releaseCache(ID);
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID) != SkImageCache::kPinned_MemoryStatus);
|
| - SkImageCache::DataStatus dataStatus;
|
| - memory = cache->pinCache(ID, &dataStatus);
|
| - if (memory != NULL) {
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - == SkImageCache::kPinned_MemoryStatus);
|
| - if (SkImageCache::kRetained_DataStatus == dataStatus) {
|
| - REPORTER_ASSERT(reporter, !memcmp(memory, (void*) buffer, size));
|
| - }
|
| - cache->releaseCache(ID);
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - != SkImageCache::kPinned_MemoryStatus);
|
| - cache->purgeAllUnpinnedCaches();
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - != SkImageCache::kPinned_MemoryStatus);
|
| - memory = cache->pinCache(ID, &dataStatus);
|
| - if (memory != NULL) {
|
| - // The memory block may or may not have survived the purging (at the
|
| - // memory manager's whim) so we cannot check dataStatus here.
|
| - cache->releaseCache(ID);
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - != SkImageCache::kPinned_MemoryStatus);
|
| - cache->throwAwayCache(ID);
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - == SkImageCache::kFreed_MemoryStatus);
|
| - } else {
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(ID)
|
| - == SkImageCache::kFreed_MemoryStatus);
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -static void test_factory(skiatest::Reporter* reporter, SkImageCache* cache, SkData* encodedData,
|
| - const SkBitmap& origBitmap) {
|
| - SkBitmapFactory factory(&SkImageDecoder::DecodeMemoryToTarget);
|
| - factory.setImageCache(cache);
|
| - SkAutoTDelete<SkBitmap> bitmapFromFactory(SkNEW(SkBitmap));
|
| - bool success = factory.installPixelRef(encodedData, bitmapFromFactory.get());
|
| - // This assumes that if the encoder worked, the decoder should also work, so the above call
|
| - // should not fail.
|
| - REPORTER_ASSERT(reporter, success);
|
| - assert_bounds_equal(reporter, origBitmap, *bitmapFromFactory.get());
|
| -
|
| - SkPixelRef* pixelRef = bitmapFromFactory->pixelRef();
|
| - REPORTER_ASSERT(reporter, pixelRef != NULL);
|
| - if (NULL == cache) {
|
| - // This assumes that installPixelRef called lockPixels.
|
| - REPORTER_ASSERT(reporter, bitmapFromFactory->readyToDraw());
|
| - } else {
|
| - // Lazy decoding
|
| - REPORTER_ASSERT(reporter, !bitmapFromFactory->readyToDraw());
|
| - SkLazyPixelRef* lazyRef = static_cast<SkLazyPixelRef*>(pixelRef);
|
| - intptr_t cacheID = lazyRef->getCacheId();
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(cacheID)
|
| - != SkImageCache::kPinned_MemoryStatus);
|
| - {
|
| - SkAutoLockPixels alp(*bitmapFromFactory.get());
|
| - REPORTER_ASSERT(reporter, bitmapFromFactory->readyToDraw());
|
| - cacheID = lazyRef->getCacheId();
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(cacheID)
|
| - == SkImageCache::kPinned_MemoryStatus);
|
| - }
|
| - REPORTER_ASSERT(reporter, !bitmapFromFactory->readyToDraw());
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(cacheID)
|
| - != SkImageCache::kPinned_MemoryStatus);
|
| - bitmapFromFactory.free();
|
| - REPORTER_ASSERT(reporter, cache->getMemoryStatus(cacheID)
|
| - == SkImageCache::kFreed_MemoryStatus);
|
| - }
|
| -}
|
| -
|
| -class ImageCacheHolder : public SkNoncopyable {
|
| -
|
| -public:
|
| - ~ImageCacheHolder() {
|
| - fCaches.safeUnrefAll();
|
| - }
|
| -
|
| - void addImageCache(SkImageCache* cache) {
|
| - SkSafeRef(cache);
|
| - *fCaches.append() = cache;
|
| - }
|
| -
|
| - int count() const { return fCaches.count(); }
|
| -
|
| - SkImageCache* getAt(int i) {
|
| - if (i < 0 || i > fCaches.count()) {
|
| - return NULL;
|
| - }
|
| - return fCaches.getAt(i);
|
| - }
|
| -
|
| -private:
|
| - SkTDArray<SkImageCache*> fCaches;
|
| -};
|
| -
|
| -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());
|
| - }
|
| - }
|
| -}
|
| -
|
| -#include "TestClassDef.h"
|
| -DEFINE_TESTCLASS("BitmapFactory", TestBitmapFactoryClass, TestBitmapFactory)
|
| -
|
| -#endif // SK_DEBUG
|
|
|