leave pixel memory uninitialized for opaque alpha type in SkSurface::MakeRaster

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2412633002

Review-Url: https://codereview.chromium.org/2412633002
This commit is contained in:
lsalzman 2016-10-12 16:50:16 -07:00 committed by Commit bot
parent 88fa7476ab
commit c64ef3563d
2 changed files with 13 additions and 5 deletions

View File

@ -51,10 +51,14 @@ public:
void* context, const SkSurfaceProps* = nullptr);
/**
* Return a new surface, with the memory for the pixels automatically allocated and
* zero-initialized, but respecting the specified rowBytes. If rowBytes==0, then a default
* value will be chosen. If a non-zero rowBytes is specified, then any images snapped off of
* this surface (via makeImageSnapshot()) are guaranteed to have the same rowBytes.
* Return a new surface, with the memory for the pixels automatically allocated but respecting
* the specified rowBytes. If rowBytes==0, then a default value will be chosen. If a non-zero
* rowBytes is specified, then any images snapped off of this surface (via makeImageSnapshot())
* are guaranteed to have the same rowBytes.
*
* If the requested alpha type is not opaque, then the surface's pixel memory will be
* zero-initialized. If it is opaque, then it will be left uninitialized, and the caller is
* responsible for initially clearing the surface.
*
* If the requested surface cannot be created, or the request is not a
* supported configuration, NULL will be returned.

View File

@ -208,7 +208,11 @@ sk_sp<SkSurface> SkSurface::MakeRaster(const SkImageInfo& info, size_t rowBytes,
return nullptr;
}
SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewZeroed(info, rowBytes, nullptr));
// If the requested alpha type is opaque, then leave the pixels uninitialized.
// Alpha formats can be safely initialiezd to zero.
SkAutoTUnref<SkPixelRef> pr(info.isOpaque()
? SkMallocPixelRef::NewAllocate(info, rowBytes, nullptr)
: SkMallocPixelRef::NewZeroed(info, rowBytes, nullptr));
if (nullptr == pr.get()) {
return nullptr;
}