Add SkAutoPixmapStorage::detachPixelsAsData()

Allows passing pixels ownership to clients.

BUG=skia:4896
R=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1662353002

Review URL: https://codereview.chromium.org/1662353002
This commit is contained in:
fmalita 2016-02-04 13:09:59 -08:00 committed by Commit bot
parent 92098e691f
commit 3a94c6c62c
2 changed files with 21 additions and 1 deletions

View File

@ -13,6 +13,7 @@
#include "SkImageInfo.h"
class SkColorTable;
class SkData;
struct SkMask;
/**
@ -184,6 +185,12 @@ public:
*/
void alloc(const SkImageInfo&);
/**
* Returns an SkData object wrapping the allocated pixels memory, and resets the pixmap.
* If the storage hasn't been allocated, the result is NULL.
*/
const SkData* SK_WARN_UNUSED_RESULT detachPixelsAsData();
// We wrap these so we can clear our internal storage
void reset() {
@ -208,7 +215,7 @@ private:
void freeStorage() {
sk_free(fStorage);
fStorage = NULL;
fStorage = nullptr;
}
typedef SkPixmap INHERITED;

View File

@ -7,6 +7,7 @@
#include "SkColorPriv.h"
#include "SkConfig8888.h"
#include "SkData.h"
#include "SkMask.h"
#include "SkPixmap.h"
#include "SkUtils.h"
@ -272,3 +273,15 @@ void SkAutoPixmapStorage::alloc(const SkImageInfo& info) {
sk_throw();
}
}
const SkData* SkAutoPixmapStorage::detachPixelsAsData() {
if (!fStorage) {
return nullptr;
}
const SkData* data = SkData::NewFromMalloc(fStorage, this->getSafeSize());
fStorage = nullptr;
this->INHERITED::reset();
return data;
}