| Index: chrome/browser/renderer_host/async_resource_handler.cc
|
| diff --git a/chrome/browser/renderer_host/async_resource_handler.cc b/chrome/browser/renderer_host/async_resource_handler.cc
|
| index da188b6b6cfb096554ad16300153e0d8ad07fbe9..7e83320114a64335faab7821e25bab16f72cec40 100644
|
| --- a/chrome/browser/renderer_host/async_resource_handler.cc
|
| +++ b/chrome/browser/renderer_host/async_resource_handler.cc
|
| @@ -18,10 +18,10 @@ namespace {
|
| SharedIOBuffer* g_spare_read_buffer = NULL;
|
|
|
| // The initial size of the shared memory buffer. (32 kilobytes).
|
| -const int kReadBufSize = 32768;
|
| +const int kInitialReadBufSize = 32768;
|
|
|
| // The maximum size of the shared memory buffer. (512 kilobytes).
|
| -const int kMaxBufSize = 524288;
|
| +const int kMaxReadBufSize = 524288;
|
|
|
| } // namespace
|
|
|
| @@ -66,7 +66,7 @@ AsyncResourceHandler::AsyncResourceHandler(
|
| routing_id_(routing_id),
|
| process_handle_(process_handle),
|
| rdh_(resource_dispatcher_host),
|
| - next_buffer_size_(kReadBufSize) {
|
| + next_buffer_size_(kInitialReadBufSize) {
|
| }
|
|
|
| bool AsyncResourceHandler::OnUploadProgress(int request_id,
|
| @@ -104,7 +104,7 @@ bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
|
| CHECK(read_buffer_->data());
|
|
|
| *buf = read_buffer_.get();
|
| - *buf_size = read_buffer_.get()->buffer_size();
|
| + *buf_size = read_buffer_->buffer_size();
|
| } else {
|
| read_buffer_ = new SharedIOBuffer(next_buffer_size_);
|
| if (!read_buffer_->ok()) {
|
| @@ -117,8 +117,6 @@ bool AsyncResourceHandler::OnWillRead(int request_id, net::IOBuffer** buf,
|
| *buf_size = next_buffer_size_;
|
| }
|
|
|
| - next_buffer_size_ = std::min(next_buffer_size_ * 2, kMaxBufSize);
|
| -
|
| return true;
|
| }
|
|
|
| @@ -127,6 +125,13 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int* bytes_read) {
|
| return true;
|
| DCHECK(read_buffer_.get());
|
|
|
| + if (read_buffer_->buffer_size() == *bytes_read) {
|
| + // The network layer has saturated our buffer. Next time, we should give it
|
| + // a bigger buffer for it to fill, to minimize the number of round trips we
|
| + // do with the renderer process.
|
| + next_buffer_size_ = std::min(next_buffer_size_ * 2, kMaxReadBufSize);
|
| + }
|
| +
|
| if (!rdh_->WillSendData(process_id_, request_id)) {
|
| // We should not send this data now, we have too many pending requests.
|
| return true;
|
|
|