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

Unified Diff: tests/CachedDecodingPixelRefTest.cpp

Issue 103033002: Big Cleanup: SkBitmapFactory, SkLazyPixelRef, SkImageCache (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rebase one last time Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/BitmapFactoryTest.cpp ('k') | tests/DiscardableMemoryPool.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/CachedDecodingPixelRefTest.cpp
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index 0706ab1d85b227de379d0a6ed779a3f1b8b00657..f92b1de1bf4a7b2b0868d9fd3e07905054f5f1e5 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -9,12 +9,13 @@
#include "SkCanvas.h"
#include "SkData.h"
#include "SkDecodingImageGenerator.h"
+#include "SkDiscardablePixelRef.h"
+#include "SkDiscardableMemoryPool.h"
#include "SkImageDecoder.h"
-#include "SkImagePriv.h"
-#include "SkLazyPixelRef.h"
#include "SkCachingPixelRef.h"
#include "SkScaledImageCache.h"
#include "SkStream.h"
+#include "SkUtils.h"
#include "Test.h"
#include "TestClassDef.h"
@@ -50,23 +51,7 @@ static SkData* create_data_from_bitmap(const SkBitmap& bm,
return NULL;
}
-/**
- * A simplified version of SkBitmapFactory
- */
-static bool simple_bitmap_factory(SkBitmapFactory::DecodeProc proc,
- SkData* data,
- SkBitmap* dst) {
- SkImageInfo info;
- if (!proc(data->data(), data->size(), &info, NULL)) {
- return false;
- }
- dst->setConfig(SkImageInfoToBitmapConfig(info), info.fWidth,
- info.fHeight, 0, info.fAlphaType);
- SkAutoTUnref<SkLazyPixelRef> ref(SkNEW_ARGS(SkLazyPixelRef,
- (data, proc, NULL)));
- dst->setPixelRef(ref);
- return true;
-}
+////////////////////////////////////////////////////////////////////////////////
static void compare_bitmaps(skiatest::Reporter* reporter,
const SkBitmap& b1, const SkBitmap& b2,
@@ -105,7 +90,6 @@ static void compare_bitmaps(skiatest::Reporter* reporter,
REPORTER_ASSERT(reporter, 0 == pixelErrors);
}
-
typedef bool (*InstallEncoded)(SkData* encoded, SkBitmap* dst);
/**
@@ -160,36 +144,169 @@ static void test_three_encodings(skiatest::Reporter* reporter,
}
}
-
////////////////////////////////////////////////////////////////////////////////
-/**
- * This checks to see that a SkLazyPixelRef works as advertised.
- */
-static bool install_skLazyPixelRef(SkData* encoded, SkBitmap* dst) {
- static const SkBitmapFactory::DecodeProc decoder =
- &(SkImageDecoder::DecodeMemoryToTarget);
- return simple_bitmap_factory(decoder, encoded, dst);
+static bool install_skCachingPixelRef(SkData* encoded, SkBitmap* dst) {
+ return SkCachingPixelRef::Install(
+ SkNEW_ARGS(SkDecodingImageGenerator, (encoded)), dst);
}
-DEF_TEST(LazyPixelRef, reporter) {
- test_three_encodings(reporter, install_skLazyPixelRef);
+static bool install_skDiscardablePixelRef(SkData* encoded, SkBitmap* dst) {
+ // Use system-default discardable memory.
+ return SkDecodingImageGenerator::Install(encoded, dst, NULL);
}
////////////////////////////////////////////////////////////////////////////////
/**
- * This checks to see that a SkCachingPixelRef works as advertised.
+ * This checks to see that a SkCachingPixelRef and a
+ * SkDiscardablePixelRef works as advertised with a
+ * SkDecodingImageGenerator.
*/
-static bool install_skCachingPixelRef(SkData* encoded, SkBitmap* dst) {
- return SkCachingPixelRef::Install(
- SkNEW_ARGS(SkDecodingImageGenerator, (encoded)), dst);
-}
-DEF_TEST(CachingPixelRef, reporter) {
+DEF_TEST(DecodingImageGenerator, reporter) {
test_three_encodings(reporter, install_skCachingPixelRef);
+ test_three_encodings(reporter, install_skDiscardablePixelRef);
}
////////////////////////////////////////////////////////////////////////////////
+namespace {
+class TestImageGenerator : public SkImageGenerator {
+public:
+ enum TestType {
+ kFailGetInfo_TestType,
+ kFailGetPixels_TestType,
+ kSucceedGetPixels_TestType,
+ kLast_TestType = kSucceedGetPixels_TestType
+ };
+ static int Width() { return 10; }
+ static int Height() { return 10; }
+ static SkColor Color() { return SK_ColorCYAN; }
+ TestImageGenerator(TestType type, skiatest::Reporter* reporter)
+ : fType(type), fReporter(reporter) {
+ SkASSERT((fType <= kLast_TestType) && (fType >= 0));
+ }
+ ~TestImageGenerator() { }
+ bool getInfo(SkImageInfo* info) SK_OVERRIDE {
+ REPORTER_ASSERT(fReporter, NULL != info);
+ if ((NULL == info) || (kFailGetInfo_TestType == fType)) {
+ return false;
+ }
+ info->fWidth = TestImageGenerator::Width();
+ info->fHeight = TestImageGenerator::Height();
+ info->fColorType = kPMColor_SkColorType;
+ info->fAlphaType = kOpaque_SkAlphaType;
+ return true;
+ }
+ bool getPixels(const SkImageInfo& info,
+ void* pixels,
+ size_t rowBytes) SK_OVERRIDE {
+ REPORTER_ASSERT(fReporter, pixels != NULL);
+ size_t minRowBytes
+ = static_cast<size_t>(info.fWidth * info.bytesPerPixel());
+ REPORTER_ASSERT(fReporter, rowBytes >= minRowBytes);
+ if ((NULL == pixels)
+ || (fType != kSucceedGetPixels_TestType)
+ || (info.fColorType != kPMColor_SkColorType)) {
+ return false;
+ }
+ char* bytePtr = static_cast<char*>(pixels);
+ for (int y = 0; y < info.fHeight; ++y) {
+ sk_memset32(reinterpret_cast<SkColor*>(bytePtr),
+ TestImageGenerator::Color(), info.fWidth);
+ bytePtr += rowBytes;
+ }
+ return true;
+ }
+private:
+ const TestType fType;
+ skiatest::Reporter* const fReporter;
+};
+void CheckTestImageGeneratorBitmap(skiatest::Reporter* reporter,
+ const SkBitmap& bm) {
+ REPORTER_ASSERT(reporter, TestImageGenerator::Width() == bm.width());
+ REPORTER_ASSERT(reporter, TestImageGenerator::Height() == bm.height());
+ SkAutoLockPixels autoLockPixels(bm);
+ REPORTER_ASSERT(reporter, NULL != bm.getPixels());
+ if (NULL == bm.getPixels()) {
+ return;
+ }
+ int errors = 0;
+ for (int y = 0; y < bm.height(); ++y) {
+ for (int x = 0; x < bm.width(); ++x) {
+ if (TestImageGenerator::Color() != *bm.getAddr32(x, y)) {
+ ++errors;
+ }
+ }
+ }
+ REPORTER_ASSERT(reporter, 0 == errors);
+}
+
+enum PixelRefType {
+ kSkCaching_PixelRefType,
+ kSkDiscardable_PixelRefType,
+ kLast_PixelRefType = kSkDiscardable_PixelRefType
+};
+void CheckPixelRef(TestImageGenerator::TestType type,
+ skiatest::Reporter* reporter,
+ PixelRefType pixelRefType,
+ SkDiscardableMemory::Factory* factory) {
+ SkASSERT((pixelRefType >= 0) && (pixelRefType <= kLast_PixelRefType));
+ SkAutoTDelete<SkImageGenerator> gen(SkNEW_ARGS(TestImageGenerator,
+ (type, reporter)));
+ REPORTER_ASSERT(reporter, gen.get() != NULL);
+ SkBitmap lazy;
+ bool success;
+ if (kSkCaching_PixelRefType == pixelRefType) {
+ // Ignore factory; use global SkScaledImageCache.
+ success = SkCachingPixelRef::Install(gen.detach(), &lazy);
+ } else {
+ success = SkDiscardablePixelRef::Install(gen.detach(), &lazy, factory);
+ }
+ REPORTER_ASSERT(reporter, success
+ == (TestImageGenerator::kFailGetInfo_TestType != type));
+ if (TestImageGenerator::kSucceedGetPixels_TestType == type) {
+ CheckTestImageGeneratorBitmap(reporter, lazy);
+ } else if (TestImageGenerator::kFailGetPixels_TestType == type) {
+ SkAutoLockPixels autoLockPixels(lazy);
+ REPORTER_ASSERT(reporter, NULL == lazy.getPixels());
+ }
+}
+} // namespace
/**
- * This checks to see that a SkDecodingImageGenerator works as advertised.
+ * This tests the basic functionality of SkDiscardablePixelRef with a
+ * basic SkImageGenerator implementation and several
+ * SkDiscardableMemory::Factory choices.
*/
-DEF_TEST(DecodingImageGenerator, reporter) {
- test_three_encodings(reporter, SkDecodingImageGenerator::Install);
+DEF_TEST(DiscardableAndCachingPixelRef, reporter) {
+ CheckPixelRef(TestImageGenerator::kFailGetInfo_TestType,
+ reporter, kSkCaching_PixelRefType, NULL);
+ CheckPixelRef(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkCaching_PixelRefType, NULL);
+ CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkCaching_PixelRefType, NULL);
+
+ CheckPixelRef(TestImageGenerator::kFailGetInfo_TestType,
+ reporter, kSkDiscardable_PixelRefType, NULL);
+ CheckPixelRef(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, NULL);
+ CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, NULL);
+
+ SkAutoTUnref<SkDiscardableMemoryPool> pool(
+ SkNEW_ARGS(SkDiscardableMemoryPool, (1, NULL)));
+ REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
+ CheckPixelRef(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, pool);
+ REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
+ CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, pool);
+ REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
+
+ SkDiscardableMemoryPool* globalPool = SkGetGlobalDiscardableMemoryPool();
+ CheckPixelRef(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, globalPool);
+ CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, globalPool);
+
+ // TODO(halcanary): When ashmem-backed SkDiscardableMemory lands,
+ // test that here (on platforms where it is availible).
}
+////////////////////////////////////////////////////////////////////////////////
+
« no previous file with comments | « tests/BitmapFactoryTest.cpp ('k') | tests/DiscardableMemoryPool.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698