150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "Test.h" 250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "SkMallocPixelRef.h" 48f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "SkPixelRef.h" 550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgclass TestListener : public SkPixelRef::GenIDChangeListener { 750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgpublic: 850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org explicit TestListener(int* ptr) : fPtr(ptr) {} 936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onChange() override { (*fPtr)++; } 1050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgprivate: 1150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org int* fPtr; 1250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org}; 1350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 1450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgDEF_TEST(PixelRef_GenIDChange, r) { 1532678d9a453e2c9fd26e92be429cdd84250b4d85commit-bot@chromium.org SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 16bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com 17bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com SkAutoTUnref<SkPixelRef> pixelRef(SkMallocPixelRef::NewAllocate(info, 0, NULL)); 1850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 1950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Register a listener. 2050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org int count = 0; 21bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count))); 2250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 2350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 2450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // No one has looked at our pixelRef's generation ID, so invalidating it doesn't make sense. 2550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // (An SkPixelRef tree falls in the forest but there's nobody around to hear it. Do we care?) 26bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->notifyPixelsChanged(); 2750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 2850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 2950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Force the generation ID to be calculated. 30bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID()); 3150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 3250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Our listener was dropped in the first call to notifyPixelsChanged(). This is a no-op. 33bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->notifyPixelsChanged(); 3450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 0 == count); 3550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 3650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Force the generation ID to be recalculated, then add a listener. 37bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID()); 38bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count))); 39bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->notifyPixelsChanged(); 4050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org REPORTER_ASSERT(r, 1 == count); 4150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org 4250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org // Quick check that NULL is safe. 43bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID()); 44bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->addGenIDChangeListener(NULL); 45bf790232f6d94b54239dbc210d8beee7411ca458reed@google.com pixelRef->notifyPixelsChanged(); 4650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org} 47