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