Index: src/core/SkWriter32.cpp |
diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp |
index 76664e72b385f8f35d26f8570187476f99f53552..1e8a10c87caceffa61045fbf1fe0524dfb92ff4e 100644 |
--- a/src/core/SkWriter32.cpp |
+++ b/src/core/SkWriter32.cpp |
@@ -67,20 +67,20 @@ |
return SkAlign4(lenBytes + len + 1); |
} |
-const size_t kMinBufferBytes=4096; |
- |
void SkWriter32::growToAtLeast(size_t size) { |
bool wasExternal = (fExternal != NULL) && (fData == fExternal); |
- fCapacity = kMinBufferBytes + |
- SkTMax(size, fCapacity + (fCapacity >> 1)); |
- |
// cause the buffer to grow |
- fInternal.setCountExact(fCapacity); |
+ fInternal.setCount(size); |
fData = fInternal.begin(); |
if (wasExternal) { |
// we were external, so copy in the data |
memcpy(fData, fExternal, fUsed); |
} |
+ // Find out the size the buffer grew to, it may be more than we asked for. |
+ fCapacity = fInternal.reserved(); |
+ // Expand the array so all reserved space is "used", we maintain the |
+ // amount we have written manually outside the array |
+ fInternal.setCount(fCapacity); |
SkASSERT(fInternal.count() == (int)fCapacity); |
SkASSERT(fInternal.reserved() == (int)fCapacity); |
} |