PixelRefTest.cpp revision 50a3043194cf278a74ff51c33c6cdb52cbe1f8f9
150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "Test.h" 250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "TestClassDef.h" 350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "SkPixelRef.h" 550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "SkMallocPixelRef.h" 650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgnamespace { 850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgclass TestListener : public SkPixelRef::GenIDChangeListener { 1050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgpublic: 1150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org explicit TestListener(int* ptr) : fPtr(ptr) {} 1250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org void onChange() SK_OVERRIDE { (*fPtr)++; } 1350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgprivate: 1450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org int* fPtr; 1550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org}; 1650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 1750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org} // namespace 1850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 1950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgDEF_TEST(PixelRef_GenIDChange, r) { 2050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org SkMallocPixelRef pixelRef(NULL, 0, NULL); // We don't really care about the pixels here. 2150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 2250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Register a listener. 2350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org int count = 0; 2450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count))); 2550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 2650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 2750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // No one has looked at our pixelRef's generation ID, so invalidating it doesn't make sense. 2850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // (An SkPixelRef tree falls in the forest but there's nobody around to hear it. Do we care?) 2950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.notifyPixelsChanged(); 3050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 3150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 3250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Force the generation ID to be calculated. 3350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); 3450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 3550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Our listener was dropped in the first call to notifyPixelsChanged(). This is a no-op. 3650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.notifyPixelsChanged(); 3750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 3850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 3950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Force the generation ID to be recalculated, then add a listener. 4050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); 4150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count))); 4250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.notifyPixelsChanged(); 4350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 1 == count); 4450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 4550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Quick check that NULL is safe. 4650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); 4750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.addGenIDChangeListener(NULL); 4850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org pixelRef.notifyPixelsChanged(); 4950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org} 50