2 * Copyright 2013 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
9 #include "SkMallocPixelRef.h"
12 static void delete_uint8_proc(void* ptr, void*) {
13 delete[] static_cast<uint8_t*>(ptr);
16 static void set_to_one_proc(void*, void* context) {
17 *(static_cast<int*>(context)) = 1;
21 * This test contains basic sanity checks concerning SkMallocPixelRef.
23 DEF_TEST(MallocPixelRef, reporter) {
24 REPORTER_ASSERT(reporter, true);
25 SkImageInfo info = SkImageInfo::MakeN32Premul(10, 13);
27 SkAutoTUnref<SkMallocPixelRef> pr(
28 SkMallocPixelRef::NewAllocate(info, info.minRowBytes() - 1, NULL));
29 // rowbytes too small.
30 REPORTER_ASSERT(reporter, NULL == pr.get());
33 size_t rowBytes = info.minRowBytes() - 1;
34 size_t size = info.getSafeSize(rowBytes);
35 SkAutoDataUnref data(SkData::NewUninitialized(size));
36 SkAutoTUnref<SkMallocPixelRef> pr(
37 SkMallocPixelRef::NewWithData(info, rowBytes, NULL, data));
38 // rowbytes too small.
39 REPORTER_ASSERT(reporter, NULL == pr.get());
42 size_t rowBytes = info.minRowBytes() + 2;
43 size_t size = info.getSafeSize(rowBytes) - 1;
44 SkAutoDataUnref data(SkData::NewUninitialized(size));
45 SkAutoTUnref<SkMallocPixelRef> pr(
46 SkMallocPixelRef::NewWithData(info, rowBytes, NULL, data));
48 REPORTER_ASSERT(reporter, NULL == pr.get());
50 size_t rowBytes = info.minRowBytes() + 7;
51 size_t size = info.getSafeSize(rowBytes) + 9;
53 SkAutoMalloc memory(size);
54 SkAutoTUnref<SkMallocPixelRef> pr(
55 SkMallocPixelRef::NewDirect(info, memory.get(), rowBytes, NULL));
56 REPORTER_ASSERT(reporter, pr.get() != NULL);
57 REPORTER_ASSERT(reporter, memory.get() == pr->pixels());
60 SkAutoTUnref<SkMallocPixelRef> pr(
61 SkMallocPixelRef::NewAllocate(info, rowBytes, NULL));
62 REPORTER_ASSERT(reporter, pr.get() != NULL);
63 REPORTER_ASSERT(reporter, pr->pixels());
66 void* addr = static_cast<void*>(new uint8_t[size]);
67 SkAutoTUnref<SkMallocPixelRef> pr(
68 SkMallocPixelRef::NewWithProc(info, rowBytes, NULL, addr,
69 delete_uint8_proc, NULL));
70 REPORTER_ASSERT(reporter, pr.get() != NULL);
71 REPORTER_ASSERT(reporter, addr == pr->pixels());
75 SkAutoMalloc memory(size);
76 SkAutoTUnref<SkMallocPixelRef> pr(
77 SkMallocPixelRef::NewWithProc(info, rowBytes, NULL,
78 memory.get(), set_to_one_proc,
79 static_cast<void*>(&x)));
80 REPORTER_ASSERT(reporter, pr.get() != NULL);
81 REPORTER_ASSERT(reporter, memory.get() == pr->pixels());
82 REPORTER_ASSERT(reporter, 0 == x);
84 // make sure that set_to_one_proc was called.
85 REPORTER_ASSERT(reporter, 1 == x);
88 void* addr = static_cast<void*>(new uint8_t[size]);
89 REPORTER_ASSERT(reporter, addr != NULL);
90 SkAutoTUnref<SkMallocPixelRef> pr(
91 SkMallocPixelRef::NewWithProc(info, rowBytes, NULL, addr,
92 delete_uint8_proc, NULL));
93 REPORTER_ASSERT(reporter, addr == pr->pixels());
96 SkAutoDataUnref data(SkData::NewUninitialized(size));
97 SkData* dataPtr = data.get();
98 REPORTER_ASSERT(reporter, dataPtr->unique());
99 SkAutoTUnref<SkMallocPixelRef> pr(
100 SkMallocPixelRef::NewWithData(info, rowBytes, NULL, data.get()));
101 REPORTER_ASSERT(reporter, !(dataPtr->unique()));
103 REPORTER_ASSERT(reporter, dataPtr->unique());
104 REPORTER_ASSERT(reporter, dataPtr->data() == pr->pixels());