static void test_ptrs(skiatest::Reporter* reporter) { SkRefCnt ref; REPORTER_ASSERT(reporter, ref.unique()); { SkMetaData md0, md1; const char name[] = "refcnt"; md0.setRefCnt(name, &ref); REPORTER_ASSERT(reporter, md0.findRefCnt(name)); REPORTER_ASSERT(reporter, md0.hasRefCnt(name, &ref)); REPORTER_ASSERT(reporter, !ref.unique()); md1 = md0; REPORTER_ASSERT(reporter, md1.findRefCnt(name)); REPORTER_ASSERT(reporter, md1.hasRefCnt(name, &ref)); REPORTER_ASSERT(reporter, !ref.unique()); REPORTER_ASSERT(reporter, md0.removeRefCnt(name)); REPORTER_ASSERT(reporter, !md0.findRefCnt(name)); REPORTER_ASSERT(reporter, !md0.hasRefCnt(name, &ref)); REPORTER_ASSERT(reporter, !ref.unique()); } REPORTER_ASSERT(reporter, ref.unique()); }
DEF_TEST(sk_sp_ref, r) { SkRefCnt* rc = new SkRefCnt; REPORTER_ASSERT(r, rc->unique()); { sk_sp<SkRefCnt> sp = sk_ref_sp(rc); REPORTER_ASSERT(r, !rc->unique()); } REPORTER_ASSERT(r, rc->unique()); rc->unref(); }
// Test that reset() "adopts" ownership from the caller, even if we are given the same ptr twice // DEF_TEST(sk_sp_reset, r) { SkRefCnt* rc = new SkRefCnt; REPORTER_ASSERT(r, rc->unique()); sk_sp<SkRefCnt> sp; sp.reset(rc); // We have transfered our ownership over to sp REPORTER_ASSERT(r, rc->unique()); rc->ref(); // now "rc" is also an owner REPORTER_ASSERT(r, !rc->unique()); sp.reset(rc); // this should transfer our ownership over to sp REPORTER_ASSERT(r, rc->unique()); }
static void test_refCnt(skiatest::Reporter* reporter) { SkRefCnt* ref = new SkRefCnt(); std::thread thing1(bounce_ref, ref); std::thread thing2(bounce_ref, ref); thing1.join(); thing2.join(); REPORTER_ASSERT(reporter, ref->unique()); ref->unref(); }