Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1412)

Side by Side Diff: include/core/SkMallocPixelRef.h

Issue 1430593007: For non-opaque SkBitmapDevices, replace malloc-then-zero with calloc. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/core/SkBitmapDevice.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2008 The Android Open Source Project 2 * Copyright 2008 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 #ifndef SkMallocPixelRef_DEFINED 9 #ifndef SkMallocPixelRef_DEFINED
10 #define SkMallocPixelRef_DEFINED 10 #define SkMallocPixelRef_DEFINED
(...skipping 25 matching lines...) Expand all
36 * if rowBytes is invalid for the specified info. 36 * if rowBytes is invalid for the specified info.
37 * 37 *
38 * This pixelref will ref() the specified colortable (if not NULL). 38 * This pixelref will ref() the specified colortable (if not NULL).
39 * 39 *
40 * Returns NULL on failure. 40 * Returns NULL on failure.
41 */ 41 */
42 static SkMallocPixelRef* NewAllocate(const SkImageInfo& info, 42 static SkMallocPixelRef* NewAllocate(const SkImageInfo& info,
43 size_t rowBytes, SkColorTable*); 43 size_t rowBytes, SkColorTable*);
44 44
45 /** 45 /**
46 * Identical to NewAllocate, except all pixel bytes are zeroed.
47 */
48 static SkMallocPixelRef* NewZeroed(const SkImageInfo& info,
49 size_t rowBytes, SkColorTable*);
50
51 /**
46 * Return a new SkMallocPixelRef with the provided pixel storage, 52 * Return a new SkMallocPixelRef with the provided pixel storage,
47 * rowBytes, and optional colortable. On destruction, ReleaseProc 53 * rowBytes, and optional colortable. On destruction, ReleaseProc
48 * will be called. 54 * will be called.
49 * 55 *
50 * This pixelref will ref() the specified colortable (if not NULL). 56 * This pixelref will ref() the specified colortable (if not NULL).
51 * 57 *
52 * If ReleaseProc is NULL, the pixels will never be released. This 58 * If ReleaseProc is NULL, the pixels will never be released. This
53 * can be useful if the pixels were stack allocated. However, such an 59 * can be useful if the pixels were stack allocated. However, such an
54 * SkMallocPixelRef must not live beyond its pixels (e.g. by copying 60 * SkMallocPixelRef must not live beyond its pixels (e.g. by copying
55 * an SkBitmap pointing to it, or drawing to an SkPicture). 61 * an SkBitmap pointing to it, or drawing to an SkPicture).
(...skipping 18 matching lines...) Expand all
74 */ 80 */
75 static SkMallocPixelRef* NewWithData(const SkImageInfo& info, 81 static SkMallocPixelRef* NewWithData(const SkImageInfo& info,
76 size_t rowBytes, 82 size_t rowBytes,
77 SkColorTable* ctable, 83 SkColorTable* ctable,
78 SkData* data); 84 SkData* data);
79 85
80 void* getAddr() const { return fStorage; } 86 void* getAddr() const { return fStorage; }
81 87
82 class PRFactory : public SkPixelRefFactory { 88 class PRFactory : public SkPixelRefFactory {
83 public: 89 public:
84 virtual SkPixelRef* create(const SkImageInfo&, 90 SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable*) o verride;
85 size_t rowBytes, 91 };
86 SkColorTable*) override; 92
93 class ZeroedPRFactory : public SkPixelRefFactory {
94 public:
95 SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable*) o verride;
87 }; 96 };
88 97
89 protected: 98 protected:
90 // The ownPixels version of this constructor is deprecated. 99 // The ownPixels version of this constructor is deprecated.
91 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*, 100 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
92 bool ownPixels); 101 bool ownPixels);
93 virtual ~SkMallocPixelRef(); 102 virtual ~SkMallocPixelRef();
94 103
95 bool onNewLockPixels(LockRec*) override; 104 bool onNewLockPixels(LockRec*) override;
96 void onUnlockPixels() override; 105 void onUnlockPixels() override;
97 size_t getAllocatedSizeInBytes() const override; 106 size_t getAllocatedSizeInBytes() const override;
98 107
99 private: 108 private:
109 // Uses alloc to implement NewAllocate or NewZeroed.
110 static SkMallocPixelRef* NewUsing(void*(*alloc)(size_t),
111 const SkImageInfo&,
112 size_t rowBytes,
113 SkColorTable*);
114
100 void* fStorage; 115 void* fStorage;
101 SkColorTable* fCTable; 116 SkColorTable* fCTable;
102 size_t fRB; 117 size_t fRB;
103 ReleaseProc fReleaseProc; 118 ReleaseProc fReleaseProc;
104 void* fReleaseProcContext; 119 void* fReleaseProcContext;
105 120
106 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*, 121 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
107 ReleaseProc proc, void* context); 122 ReleaseProc proc, void* context);
108 123
109 typedef SkPixelRef INHERITED; 124 typedef SkPixelRef INHERITED;
110 }; 125 };
111 126
112 127
113 #endif 128 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkBitmapDevice.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698