OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2013 Google Inc. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 | |
8 #include "SkDiscardablePixelRef.h" | |
9 #include "SkDiscardableMemory.h" | |
10 | |
11 SkDiscardablePixelRef::SkDiscardablePixelRef(SkImageGenerator* generator, | |
12 const SkImageInfo& info, | |
13 size_t size, | |
14 size_t rowBytes) | |
15 : fGenerator(generator) | |
16 , fDiscardableMemory(NULL) | |
17 , fInfo(info) | |
18 , fSize(size) | |
19 , fRowBytes(rowBytes) { | |
20 SkASSERT(fGenerator != NULL); | |
21 SkASSERT(fSize > 0); | |
22 SkASSERT(fRowBytes > 0); | |
23 } | |
24 | |
25 SkDiscardablePixelRef::~SkDiscardablePixelRef() { | |
26 SkDELETE(fGenerator); | |
27 } | |
28 | |
29 void* SkDiscardablePixelRef::onLockPixels(SkColorTable**) { | |
30 if (fDiscardableMemory != NULL) { | |
31 if (fDiscardableMemory->lock()) { | |
32 return fDiscardableMemory->data(); | |
33 } | |
34 fDiscardableMemory = NULL; | |
35 } | |
36 fDiscardableMemory = SkDiscardableMemory::Create(fSize); | |
37 if (NULL == fDiscardableMemory) { | |
38 return NULL; // Memory allocation failed. | |
39 } | |
40 void* pixels = fDiscardableMemory->data(); | |
41 if (!fGenerator->getPixels(fInfo, pixels, fRowBytes)) { | |
42 return NULL; // TODO(halcanary) Find out correct thing to do. | |
43 } | |
44 return pixels; | |
45 } | |
46 void SkDiscardablePixelRef::onUnlockPixels() { | |
47 if (fDiscardableMemory != NULL) { | |
48 fDiscardableMemory->unlock(); | |
49 } | |
50 } | |
51 | |
52 bool SkDiscardablePixelRef::Install(SkImageGenerator* generator, SkBitmap* dst) { | |
53 SkImageInfo info; | |
54 if (!generator->getInfo(&info)) { | |
55 return false; | |
56 } | |
57 if (!dst->setConfig(info, 0)) { | |
58 return false; | |
scroggo
2013/11/19 22:19:27
Who should be responsible for deleting generator i
hal.canary
2013/11/20 00:07:10
changed, and commented
| |
59 } | |
60 SkAutoTUnref<SkDiscardablePixelRef> ref(SkNEW_ARGS(SkDiscardablePixelRef, | |
61 (generator, info, | |
62 dst->getSize(), | |
63 dst->rowBytes()))); | |
64 dst->setPixelRef(ref); | |
65 return true; | |
66 } | |
OLD | NEW |