Revert of df generation: single allocation with calloc (patchset #2 id:20001 of https...
authormtklein <mtklein@google.com>
Tue, 5 Jan 2016 03:02:52 +0000 (19:02 -0800)
committerCommit bot <commit-bot@chromium.org>
Tue, 5 Jan 2016 03:02:52 +0000 (19:02 -0800)
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

src/core/SkDistanceFieldGen.cpp

index 4f4de56..30354e0 100755 (executable)
@@ -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,