SkDiscardablePixelRef returns correct indexed color on relock.

R=djsollen@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/428603002
This commit is contained in:
halcanary 2014-07-28 08:23:55 -07:00 committed by Commit bot
parent edb10e79f5
commit 7f8aad84de
2 changed files with 25 additions and 1 deletions

View File

@ -40,7 +40,7 @@ bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) {
if (fDiscardableMemory != NULL) {
if (fDiscardableMemory->lock()) {
rec->fPixels = fDiscardableMemory->data();
rec->fColorTable = NULL;
rec->fColorTable = fCTable.get();
rec->fRowBytes = fRowBytes;
return true;
}

View File

@ -723,3 +723,27 @@ DEF_TEST(ImageDecoderOptions, reporter) {
}
}
}
DEF_TEST(DiscardablePixelRef_SecondLockColorTableCheck, r) {
SkString resourceDir = GetResourcePath();
SkString path = SkOSPath::SkPathJoin(resourceDir.c_str(), "randPixels.gif");
if (!sk_exists(path.c_str())) {
return;
}
SkAutoDataUnref encoded(SkData::NewFromFileName(path.c_str()));
SkBitmap bitmap;
if (!SkInstallDiscardablePixelRef(
SkDecodingImageGenerator::Create(
encoded, SkDecodingImageGenerator::Options()), &bitmap)) {
ERRORF(r, "SkInstallDiscardablePixelRef [randPixels.gif] failed.");
return;
}
{
SkAutoLockPixels alp(bitmap);
REPORTER_ASSERT(r, bitmap.getColorTable() && "first pass");
}
{
SkAutoLockPixels alp(bitmap);
REPORTER_ASSERT(r, bitmap.getColorTable() && "second pass");
}
}