blob: f3625bd64d7d42362ad9512e333b58567b8a1cd2 [file] [log] [blame]
commit-bot@chromium.org50a30432013-10-24 17:44:27 +00001#include "Test.h"
2#include "TestClassDef.h"
3
4#include "SkPixelRef.h"
5#include "SkMallocPixelRef.h"
6
7namespace {
8
9class TestListener : public SkPixelRef::GenIDChangeListener {
10public:
11 explicit TestListener(int* ptr) : fPtr(ptr) {}
12 void onChange() SK_OVERRIDE { (*fPtr)++; }
13private:
14 int* fPtr;
15};
16
17} // namespace
18
19DEF_TEST(PixelRef_GenIDChange, r) {
reed@google.com473f0aa2013-12-06 20:31:45 +000020 SkImageInfo info = { 10, 10, kPMColor_SkColorType, kPremul_SkAlphaType };
21
22 SkAutoTUnref<SkPixelRef> pixelRef(SkMallocPixelRef::NewAllocate(info, 0, NULL));
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000023
24 // Register a listener.
25 int count = 0;
reed@google.com473f0aa2013-12-06 20:31:45 +000026 pixelRef->addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count)));
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000027 REPORTER_ASSERT(r, 0 == count);
28
29 // No one has looked at our pixelRef's generation ID, so invalidating it doesn't make sense.
30 // (An SkPixelRef tree falls in the forest but there's nobody around to hear it. Do we care?)
reed@google.com473f0aa2013-12-06 20:31:45 +000031 pixelRef->notifyPixelsChanged();
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000032 REPORTER_ASSERT(r, 0 == count);
33
34 // Force the generation ID to be calculated.
reed@google.com473f0aa2013-12-06 20:31:45 +000035 REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID());
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000036
37 // Our listener was dropped in the first call to notifyPixelsChanged(). This is a no-op.
reed@google.com473f0aa2013-12-06 20:31:45 +000038 pixelRef->notifyPixelsChanged();
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000039 REPORTER_ASSERT(r, 0 == count);
40
41 // Force the generation ID to be recalculated, then add a listener.
reed@google.com473f0aa2013-12-06 20:31:45 +000042 REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID());
43 pixelRef->addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count)));
44 pixelRef->notifyPixelsChanged();
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000045 REPORTER_ASSERT(r, 1 == count);
46
47 // Quick check that NULL is safe.
reed@google.com473f0aa2013-12-06 20:31:45 +000048 REPORTER_ASSERT(r, 0 != pixelRef->getGenerationID());
49 pixelRef->addGenIDChangeListener(NULL);
50 pixelRef->notifyPixelsChanged();
commit-bot@chromium.org50a30432013-10-24 17:44:27 +000051}