Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Unified Diff: runtime/bin/filter.cc

Issue 12812006: Avoid massive stack frames by allocating 64k buffers in the heap. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Allocate buffer as part of filter and fix code style Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/filter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/filter.cc
diff --git a/runtime/bin/filter.cc b/runtime/bin/filter.cc
index 3515052321aaa0221069f1fabaed5963c42abc1d..61a499cde491e862f3e874dda2a7ddb736390e90 100644
--- a/runtime/bin/filter.cc
+++ b/runtime/bin/filter.cc
@@ -13,8 +13,6 @@ const int kZLibFlagWindowBits = 15;
const int kZLibFlagUseGZipHeader = 16;
const int kZLibFlagAcceptAnyHeader = 32;
-const intptr_t kFilterBufferLength = 64 * KB;
-
static const int kFilterPointerNativeField = 0;
Filter* GetFilter(Dart_Handle filter_obj) {
@@ -133,8 +131,9 @@ void FUNCTION_NAME(Filter_Processed)(Dart_NativeArguments args) {
Dart_ThrowException(DartUtils::NewInternalError(
"Failed to get 'flush' parameter"));
}
- uint8_t buffer[kFilterBufferLength];
- intptr_t read = filter->Processed(buffer, kFilterBufferLength, flush);
+ intptr_t read = filter->Processed(filter->processed_buffer(),
+ filter->processed_buffer_size(),
+ flush);
if (read < 0) {
// Error, end filter.
EndFilter(filter_obj, filter);
@@ -145,7 +144,7 @@ void FUNCTION_NAME(Filter_Processed)(Dart_NativeArguments args) {
} else {
uint8_t* io_buffer;
Dart_Handle result = IOBuffer::Allocate(read, &io_buffer);
- memmove(io_buffer, buffer, read);
+ memmove(io_buffer, filter->processed_buffer(), read);
Dart_SetReturnValue(args, result);
}
Dart_ExitScope();
@@ -179,24 +178,24 @@ Dart_Handle Filter::GetFilterPointerNativeField(Dart_Handle filter,
ZLibDeflateFilter::~ZLibDeflateFilter() {
- delete[] current_buffer;
- if (initialized) deflateEnd(&stream);
+ delete[] current_buffer_;
+ if (initialized()) deflateEnd(&stream_);
}
bool ZLibDeflateFilter::Init() {
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
+ stream_.zalloc = Z_NULL;
+ stream_.zfree = Z_NULL;
+ stream_.opaque = Z_NULL;
int result = deflateInit2(
- &stream,
- level,
+ &stream_,
+ level_,
Z_DEFLATED,
- kZLibFlagWindowBits | (gZip ? kZLibFlagUseGZipHeader : 0),
+ kZLibFlagWindowBits | (gzip_ ? kZLibFlagUseGZipHeader : 0),
kZlibFlagMemUsage,
Z_DEFAULT_STRATEGY);
if (result == Z_OK) {
- initialized = true;
+ set_initialized(true);
return true;
}
return false;
@@ -204,23 +203,23 @@ bool ZLibDeflateFilter::Init() {
bool ZLibDeflateFilter::Process(uint8_t* data, intptr_t length) {
- if (current_buffer != NULL) return false;
- stream.avail_in = length;
- stream.next_in = current_buffer = data;
+ if (current_buffer_ != NULL) return false;
+ stream_.avail_in = length;
+ stream_.next_in = current_buffer_ = data;
return true;
}
intptr_t ZLibDeflateFilter::Processed(uint8_t* buffer,
intptr_t length,
bool flush) {
- stream.avail_out = length;
- stream.next_out = buffer;
- switch (deflate(&stream, flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) {
+ stream_.avail_out = length;
+ stream_.next_out = buffer;
+ switch (deflate(&stream_, flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) {
case Z_OK: {
- intptr_t processed = length - stream.avail_out;
+ intptr_t processed = length - stream_.avail_out;
if (processed == 0) {
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return 0;
} else {
// We processed data, should be called again.
@@ -231,34 +230,34 @@ intptr_t ZLibDeflateFilter::Processed(uint8_t* buffer,
case Z_STREAM_END:
case Z_BUF_ERROR:
// We processed all available input data.
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return 0;
default:
case Z_STREAM_ERROR:
// An error occoured.
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return -1;
}
}
ZLibInflateFilter::~ZLibInflateFilter() {
- delete[] current_buffer;
- if (initialized) inflateEnd(&stream);
+ delete[] current_buffer_;
+ if (initialized()) inflateEnd(&stream_);
}
bool ZLibInflateFilter::Init() {
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
- stream.opaque = Z_NULL;
- int result = inflateInit2(&stream,
+ stream_.zalloc = Z_NULL;
+ stream_.zfree = Z_NULL;
+ stream_.opaque = Z_NULL;
+ int result = inflateInit2(&stream_,
kZLibFlagWindowBits | kZLibFlagAcceptAnyHeader);
if (result == Z_OK) {
- initialized = true;
+ set_initialized(true);
return true;
}
return false;
@@ -266,9 +265,9 @@ bool ZLibInflateFilter::Init() {
bool ZLibInflateFilter::Process(uint8_t* data, intptr_t length) {
- if (current_buffer != NULL) return false;
- stream.avail_in = length;
- stream.next_in = current_buffer = data;
+ if (current_buffer_ != NULL) return false;
+ stream_.avail_in = length;
+ stream_.next_in = current_buffer_ = data;
return true;
}
@@ -276,14 +275,14 @@ bool ZLibInflateFilter::Process(uint8_t* data, intptr_t length) {
intptr_t ZLibInflateFilter::Processed(uint8_t* buffer,
intptr_t length,
bool flush) {
- stream.avail_out = length;
- stream.next_out = buffer;
- switch (inflate(&stream, flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) {
+ stream_.avail_out = length;
+ stream_.next_out = buffer;
+ switch (inflate(&stream_, flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) {
case Z_OK: {
- intptr_t processed = length - stream.avail_out;
+ intptr_t processed = length - stream_.avail_out;
if (processed == 0) {
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return 0;
} else {
// We processed data, should be called again.
@@ -294,8 +293,8 @@ intptr_t ZLibInflateFilter::Processed(uint8_t* buffer,
case Z_STREAM_END:
case Z_BUF_ERROR:
// We processed all available input data.
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return 0;
default:
@@ -304,8 +303,8 @@ intptr_t ZLibInflateFilter::Processed(uint8_t* buffer,
case Z_DATA_ERROR:
case Z_STREAM_ERROR:
// An error occoured.
- delete[] current_buffer;
- current_buffer = NULL;
+ delete[] current_buffer_;
+ current_buffer_ = NULL;
return -1;
}
}
« no previous file with comments | « runtime/bin/filter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698