Two malloc+bzero -> calloc.
I was profiling DM and noticed a couple spots where we malloc then bzero.
These might as well call calloc instead:
- any time DM itself allocates bitmaps for raster drawing;
- any time Skia allocates memory for a raster SkSurface.
We could use malloc for opaque surfaces, but it seems simpler to always calloc.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1557713003
Review URL: https://codereview.chromium.org/1557713003
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 5bc5e5a..fa600ff 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -14,6 +14,7 @@
#include "SkDocument.h"
#include "SkError.h"
#include "SkImageGenerator.h"
+#include "SkMallocPixelRef.h"
#include "SkMultiPictureDraw.h"
#include "SkNullCanvas.h"
#include "SkOSFile.h"
@@ -973,8 +974,10 @@
SkAlphaType alphaType = kPremul_SkAlphaType;
(void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType);
- dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType, alphaType));
- dst->eraseColor(SK_ColorTRANSPARENT);
+ SkMallocPixelRef::ZeroedPRFactory factory;
+ dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType, alphaType),
+ &factory,
+ nullptr/*colortable*/);
SkCanvas canvas(*dst);
return src.draw(&canvas);
}
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index d5593eb..a606656 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -99,10 +99,6 @@
fBitmap.setInfo(info, info.minRowBytes());
fBitmap.setPixelRef(pr);
fWeOwnThePixels = true;
-
- if (!info.isOpaque()) {
- fBitmap.eraseColor(SK_ColorTRANSPARENT);
- }
}
SkCanvas* SkSurface_Raster::onNewCanvas() { return new SkCanvas(fBitmap, this->props()); }
@@ -185,7 +181,7 @@
return nullptr;
}
- SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewAllocate(info, 0, nullptr));
+ SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewZeroed(info, 0, nullptr));
if (nullptr == pr.get()) {
return nullptr;
}