Chromium Code Reviews| 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 |