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:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user