aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@google.com>2016-01-04 19:02:52 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-04 19:02:52 -0800
commitc4a0d73e9aebcb7d291aa3eb8d5b6926d9a0b77e (patch)
tree90f13837d51d62bc23696724a17d0009a4e24d43
parentc8be09aaf2bbfa004c574553fc9d194ac7f1ce1a (diff)
Revert of df generation: single allocation with calloc (patchset #2 id:20001 of https://codereview.chromium.org/1544983004/ )
Reason for revert: Crashing multiple bots, e.g. https://uberchromegw.corp.google.com/i/client.skia.android/builders/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release/builds/3525 Original issue's description: > df generation: single allocation with calloc > > The dfStorage DFData allocation can never fit in its stack space: 5px padding on each side always implies at least a 10x10 DFData allocation, but the stack space only fits 64 DFData. > > So we've always been spilling to the heap. > > If we're going to spill to the heap, we might as well allocate/free all our temporary memory in one block, and since we want it zeroed, might as well calloc. > > So in practice this replaces 1-2 malloc, 1-2 free, and 2 bzeros with 1 calloc and 1 free. > > > BUG=skia:4729 > GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1544983004 > > Committed: https://skia.googlesource.com/skia/+/12204d90337656542a42fa0fcccb7bec13af0cce TBR=jvanverth@google.com,mtklein@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia:4729 Review URL: https://codereview.chromium.org/1556263002
-rwxr-xr-xsrc/core/SkDistanceFieldGen.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/core/SkDistanceFieldGen.cpp b/src/core/SkDistanceFieldGen.cpp
index 4f4de56a46..30354e09f8 100755
--- a/src/core/SkDistanceFieldGen.cpp
+++ b/src/core/SkDistanceFieldGen.cpp
@@ -343,10 +343,15 @@ static bool generate_distance_field_from_image(unsigned char* distanceField,
int dataWidth = width + 2*pad;
int dataHeight = height + 2*pad;
- // create zeroed temp edge+DFData storage
- SkAutoFree storage(sk_calloc_throw(dataWidth*dataHeight*(1 + sizeof(DFData))));
- unsigned char* edgePtr = (unsigned char*)storage.get();
- DFData* dataPtr = (DFData*)(edgePtr + dataWidth*dataHeight);
+ // create temp data
+ size_t dataSize = dataWidth*dataHeight*sizeof(DFData);
+ SkAutoSMalloc<1024> dfStorage(dataSize);
+ DFData* dataPtr = (DFData*) dfStorage.get();
+ sk_bzero(dataPtr, dataSize);
+
+ SkAutoSMalloc<1024> edgeStorage(dataWidth*dataHeight*sizeof(char));
+ unsigned char* edgePtr = (unsigned char*) edgeStorage.get();
+ sk_bzero(edgePtr, dataWidth*dataHeight*sizeof(char));
// copy glyph into distance field storage
init_glyph_data(dataPtr, edgePtr, copyPtr,