test_three_encodings(reporter, install_skDiscardablePixelRef);
}
-////////////////////////////////////////////////////////////////////////////////
-namespace {
class TestImageGenerator : public SkImageGenerator {
public:
enum TestType {
: fType(type), fReporter(reporter) {
SkASSERT((fType <= kLast_TestType) && (fType >= 0));
}
- ~TestImageGenerator() { }
- bool getInfo(SkImageInfo* info) SK_OVERRIDE {
+ virtual ~TestImageGenerator() { }
+ virtual bool getInfo(SkImageInfo* info) SK_OVERRIDE {
REPORTER_ASSERT(fReporter, NULL != info);
if ((NULL == info) || (kFailGetInfo_TestType == fType)) {
return false;
info->fAlphaType = kOpaque_SkAlphaType;
return true;
}
- bool getPixels(const SkImageInfo& info,
- void* pixels,
- size_t rowBytes) SK_OVERRIDE {
+ virtual 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());
skiatest::Reporter* const fReporter;
};
-void CheckTestImageGeneratorBitmap(skiatest::Reporter* reporter,
- const SkBitmap& bm) {
+static void check_test_image_generator_bitmap(skiatest::Reporter* reporter,
+ const SkBitmap& bm) {
REPORTER_ASSERT(reporter, TestImageGenerator::Width() == bm.width());
REPORTER_ASSERT(reporter, TestImageGenerator::Height() == bm.height());
SkAutoLockPixels autoLockPixels(bm);
kSkDiscardable_PixelRefType,
kLast_PixelRefType = kSkDiscardable_PixelRefType
};
-void CheckPixelRef(TestImageGenerator::TestType type,
- skiatest::Reporter* reporter,
- PixelRefType pixelRefType,
- SkDiscardableMemory::Factory* factory) {
+
+static void check_pixelref(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, success
== (TestImageGenerator::kFailGetInfo_TestType != type));
if (TestImageGenerator::kSucceedGetPixels_TestType == type) {
- CheckTestImageGeneratorBitmap(reporter, lazy);
+ check_test_image_generator_bitmap(reporter, lazy);
} else if (TestImageGenerator::kFailGetPixels_TestType == type) {
SkAutoLockPixels autoLockPixels(lazy);
REPORTER_ASSERT(reporter, NULL == lazy.getPixels());
}
}
-} // namespace
// new/lock/delete is an odd pattern for a pixelref, but it needs to not assert
static void test_newlockdelete(skiatest::Reporter* reporter) {
SkBitmap bm;
SkImageGenerator* ig = new TestImageGenerator(
- TestImageGenerator::kSucceedGetPixels_TestType,
- reporter);
+ TestImageGenerator::kSucceedGetPixels_TestType, reporter);
SkInstallDiscardablePixelRef(ig, &bm, NULL);
bm.pixelRef()->lockPixels();
}
DEF_TEST(DiscardableAndCachingPixelRef, reporter) {
test_newlockdelete(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);
+ check_pixelref(TestImageGenerator::kFailGetInfo_TestType,
+ reporter, kSkCaching_PixelRefType, NULL);
+ check_pixelref(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkCaching_PixelRefType, NULL);
+ check_pixelref(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);
+ check_pixelref(TestImageGenerator::kFailGetInfo_TestType,
+ reporter, kSkDiscardable_PixelRefType, NULL);
+ check_pixelref(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, NULL);
+ check_pixelref(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);
+ check_pixelref(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, pool);
REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
- CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
- reporter, kSkDiscardable_PixelRefType, pool);
+ check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, pool);
REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
SkDiscardableMemoryPool* globalPool = SkGetGlobalDiscardableMemoryPool();
// Only acts differently from NULL on a platform that has a
// default discardable memory implementation that differs from the
// global DM pool.
- CheckPixelRef(TestImageGenerator::kFailGetPixels_TestType,
- reporter, kSkDiscardable_PixelRefType, globalPool);
- CheckPixelRef(TestImageGenerator::kSucceedGetPixels_TestType,
- reporter, kSkDiscardable_PixelRefType, globalPool);
+ check_pixelref(TestImageGenerator::kFailGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, globalPool);
+ check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType,
+ reporter, kSkDiscardable_PixelRefType, globalPool);
}
-////////////////////////////////////////////////////////////////////////////////
__SK_FORCE_IMAGE_DECODER_LINKING;
-namespace {
- unsigned char gifData[] = {
- 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x03, 0x00,
- 0x03, 0x00, 0xe3, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x00,
- 0xff, 0x80, 0x80, 0x80, 0x00, 0xff, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x04,
- 0x07, 0x50, 0x1c, 0x43, 0x40, 0x41, 0x23, 0x44,
- 0x00, 0x3b};
- unsigned char gifDataNoColormap[] = {
- 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04,
- 0x01, 0x0a, 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
- 0x02, 0x4c, 0x01, 0x00, 0x3b};
- unsigned char interlacedGif[] = {
- 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x09, 0x00,
- 0x09, 0x00, 0xe3, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x00,
- 0xff, 0x80, 0x80, 0x80, 0x00, 0xff, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00,
- 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0x40, 0x04,
- 0x1b, 0x50, 0x1c, 0x23, 0xe9, 0x44, 0x23, 0x60,
- 0x9d, 0x09, 0x28, 0x1e, 0xf8, 0x6d, 0x64, 0x56,
- 0x9d, 0x53, 0xa8, 0x7e, 0xa8, 0x65, 0x94, 0x5c,
- 0xb0, 0x8a, 0x45, 0x04, 0x00, 0x3b};
-}; // namespace
+static unsigned char gGIFData[] = {
+ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x03, 0x00, 0x03, 0x00, 0xe3, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x00,
+ 0xff, 0x80, 0x80, 0x80, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x04,
+ 0x07, 0x50, 0x1c, 0x43, 0x40, 0x41, 0x23, 0x44, 0x00, 0x3b
+};
+
+static unsigned char gGIFDataNoColormap[] = {
+ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0xf9, 0x04, 0x01, 0x0a, 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x4c, 0x01, 0x00, 0x3b
+};
+
+static unsigned char gInterlacedGIF[] = {
+ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x09, 0x00, 0x09, 0x00, 0xe3, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x80,
+ 0x80, 0x80, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00,
+ 0x00, 0x09, 0x00, 0x09, 0x00, 0x40, 0x04, 0x1b, 0x50, 0x1c, 0x23, 0xe9, 0x44,
+ 0x23, 0x60, 0x9d, 0x09, 0x28, 0x1e, 0xf8, 0x6d, 0x64, 0x56, 0x9d, 0x53, 0xa8,
+ 0x7e, 0xa8, 0x65, 0x94, 0x5c, 0xb0, 0x8a, 0x45, 0x04, 0x00, 0x3b
+};
static void test_gif_data_no_colormap(skiatest::Reporter* r,
- void* data, size_t size) {
+ void* data,
+ size_t size) {
SkBitmap bm;
bool imageDecodeSuccess = SkImageDecoder::DecodeMemory(
data, size, &bm);
*/
DEF_TEST(Gif, reporter) {
// test perfectly good images.
- test_gif_data(reporter, static_cast<void *>(gifData), sizeof(gifData));
- test_interlaced_gif_data(reporter, static_cast<void *>(interlacedGif),
- sizeof(interlacedGif));
+ test_gif_data(reporter, static_cast<void *>(gGIFData), sizeof(gGIFData));
+ test_interlaced_gif_data(reporter, static_cast<void *>(gInterlacedGIF),
+ sizeof(gInterlacedGIF));
- unsigned char badData[sizeof(gifData)];
+ unsigned char badData[sizeof(gGIFData)];
/* If you set the environment variable
skia_images_gif_suppressDecoderWarnings to 'false', you will
see warnings on stderr. This is a feature. */
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[6] = 0x01; // image too wide
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [image too wide, expanding output to size]"
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[8] = 0x01; // image too tall
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [image too tall, expanding output to size]"
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[62] = 0x01; // image shifted right
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [shifting image left to fit]"
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[64] = 0x01; // image shifted down
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [shifting image up to fit]"
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[62] = 0xff; // image shifted left
badData[63] = 0xff; // 2's complement -1 short
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [shifting image left to fit]"
- memcpy(badData, gifData, sizeof(gifData));
+ memcpy(badData, gGIFData, sizeof(gGIFData));
badData[64] = 0xff; // image shifted up
badData[65] = 0xff; // 2's complement -1 short
- test_gif_data(reporter, static_cast<void *>(badData), sizeof(gifData));
+ test_gif_data(reporter, static_cast<void *>(badData), sizeof(gGIFData));
// "libgif warning [shifting image up to fit]"
- test_gif_data_no_colormap(reporter, static_cast<void *>(gifDataNoColormap),
- sizeof(gifDataNoColormap));
+ test_gif_data_no_colormap(reporter, static_cast<void *>(gGIFDataNoColormap),
+ sizeof(gGIFDataNoColormap));
// "libgif warning [missing colormap]"
// test short Gif. 80 is missing a few bytes.
- test_gif_data_short(reporter, static_cast<void *>(gifData), 80);
+ test_gif_data_short(reporter, static_cast<void *>(gGIFData), 80);
// "libgif warning [DGifGetLine]"
- test_interlaced_gif_data(reporter, static_cast<void *>(interlacedGif),
+ test_interlaced_gif_data(reporter, static_cast<void *>(gInterlacedGIF),
100); // 100 is missing a few bytes
// "libgif warning [interlace DGifGetLine]"
}