am b693ef60: Merge "Do not allocate so much memory on the stack." into klp-dev

* commit 'b693ef60ef27538402d941702ab652a57f585158':
  Do not allocate so much memory on the stack.
This commit is contained in:
Leon Scroggins III
2013-09-16 10:41:40 -07:00
committed by Android Git Automerger

View File

@@ -159,17 +159,26 @@ SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream,
} }
static SkMemoryStream* adaptor_to_mem_stream(SkStream* adaptor) { static SkMemoryStream* adaptor_to_mem_stream(SkStream* stream) {
SkASSERT(adaptor != NULL); SkASSERT(stream != NULL);
SkDynamicMemoryWStream wStream; size_t bufferSize = 4096;
const int bufferSize = 256 * 1024; // 256 KB, same as ViewStateSerializer. size_t streamLen = 0;
uint8_t buffer[bufferSize]; size_t len;
do { char* data = (char*)sk_malloc_throw(bufferSize);
size_t bytesRead = adaptor->read(buffer, bufferSize);
wStream.write(buffer, bytesRead); while ((len = stream->read(data + streamLen,
} while (!adaptor->isAtEnd()); bufferSize - streamLen)) != 0) {
SkAutoTUnref<SkData> data(wStream.copyToData()); streamLen += len;
return new SkMemoryStream(data.get()); if (streamLen == bufferSize) {
bufferSize *= 2;
data = (char*)sk_realloc_throw(data, bufferSize);
}
}
data = (char*)sk_realloc_throw(data, streamLen);
SkMemoryStream* streamMem = new SkMemoryStream();
streamMem->setMemoryOwned(data, streamLen);
return streamMem;
} }
SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream,