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

Side by Side Diff: src/core/SkMallocPixelRef.cpp

Issue 83663006: Modify SkLazyPixelRef to use SkImageGenerator. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: reupload Created 7 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 | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "SkMallocPixelRef.h" 8 #include "SkMallocPixelRef.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkFlattenableBuffers.h" 10 #include "SkFlattenableBuffers.h"
11 #include "SkImageGenerator.h"
11 12
12 SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, 13 SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size,
13 SkColorTable* ctable, bool ownPixels) { 14 SkColorTable* ctable, bool ownPixels) {
14 if (NULL == storage) { 15 if (NULL == storage) {
15 SkASSERT(ownPixels); 16 SkASSERT(ownPixels);
16 storage = sk_malloc_throw(size); 17 storage = sk_malloc_throw(size);
17 } 18 }
18 fStorage = storage; 19 fStorage = storage;
19 fSize = size; 20 fSize = size;
20 fCTable = ctable; 21 fCTable = ctable;
21 SkSafeRef(ctable); 22 SkSafeRef(ctable);
22 fOwnPixels = ownPixels; 23 fOwnPixels = ownPixels;
23 24
24 this->setPreLocked(fStorage, fCTable); 25 this->setPreLocked(fStorage, fCTable);
25 } 26 }
26 27
27 SkMallocPixelRef::~SkMallocPixelRef() { 28 SkMallocPixelRef::~SkMallocPixelRef() {
28 SkSafeUnref(fCTable); 29 SkSafeUnref(fCTable);
29 if (fOwnPixels) { 30 if (fOwnPixels) {
30 sk_free(fStorage); 31 sk_free(fStorage);
31 } 32 }
32 } 33 }
33 34
35 bool SkMallocPixelRef::Install(SkImageGenerator* generator,
36 SkBitmap* destination) {
37 SkASSERT(generator != NULL);
38 SkAutoTDelete<SkImageGenerator> autodel(generator);
39 // Always gets deleted by this function.
40 SkImageInfo info;
41 SkBitmap tmp;
42 if ((NULL == generator)
43 || (!generator->getInfo(&info))
44 || (!tmp.setConfig(info, 0))) {
45 return false;
46 }
47 size_t rowBytes = tmp.rowBytes();
48 size_t size = tmp.getSize();
49 void* pixels = sk_malloc_throw(size);
reed1 2013/11/25 18:06:56 Can we change this to sk_malloc_flags() so we can
50 if (!generator->getPixels(info, pixels, rowBytes)) {
51 sk_free(pixels);
52 return false;
53 }
54 SkAutoTUnref<SkMallocPixelRef> ref(SkNEW_ARGS(SkMallocPixelRef,
55 (pixels, size, NULL, true)));
56 *destination = tmp; // copy config, size, rowbytes.
57 destination->setPixelRef(ref);
58 destination->lockPixels(); // Since we're already allocated, we lock
59 // right away, just like HeapAllocator.
60 return true;
61 }
62
34 void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { 63 void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) {
35 *ct = fCTable; 64 *ct = fCTable;
36 return fStorage; 65 return fStorage;
37 } 66 }
38 67
39 void SkMallocPixelRef::onUnlockPixels() { 68 void SkMallocPixelRef::onUnlockPixels() {
40 // nothing to do 69 // nothing to do
41 } 70 }
42 71
43 void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { 72 void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const {
(...skipping 13 matching lines...) Expand all
57 buffer.readByteArray(fStorage, fSize); 86 buffer.readByteArray(fStorage, fSize);
58 if (buffer.readBool()) { 87 if (buffer.readBool()) {
59 fCTable = SkNEW_ARGS(SkColorTable, (buffer)); 88 fCTable = SkNEW_ARGS(SkColorTable, (buffer));
60 } else { 89 } else {
61 fCTable = NULL; 90 fCTable = NULL;
62 } 91 }
63 fOwnPixels = true; 92 fOwnPixels = true;
64 93
65 this->setPreLocked(fStorage, fCTable); 94 this->setPreLocked(fStorage, fCTable);
66 } 95 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698