| Index: src/core/SkWriter32.cpp
|
| diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp
|
| index 1e8a10c87caceffa61045fbf1fe0524dfb92ff4e..f1fde893927ab441d9fe9a48a345691620bdd7a4 100644
|
| --- a/src/core/SkWriter32.cpp
|
| +++ b/src/core/SkWriter32.cpp
|
| @@ -67,20 +67,22 @@ size_t SkWriter32::WriteStringSize(const char* str, size_t len) {
|
| 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.setCount(size);
|
| + fInternal.setCountExact(fCapacity);
|
| + SkASSERT(fInternal.count() == (int)fCapacity);
|
| + // read back the capacity in case it was already larger than this
|
| + fCapacity = fInternal.reserved();
|
| 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);
|
| }
|
|
|