| Index: chrome/browser/image_decoder.cc
|
| diff --git a/chrome/browser/image_decoder.cc b/chrome/browser/image_decoder.cc
|
| index f8f736ae63c2983a5ff57785f8e99884ae2927ad..4498f33e1f0bfdb4f0e81302e060fd7aa7f85b7f 100644
|
| --- a/chrome/browser/image_decoder.cc
|
| +++ b/chrome/browser/image_decoder.cc
|
| @@ -28,7 +28,7 @@ const int kBatchModeTimeoutSeconds = 5;
|
| } // namespace
|
|
|
| ImageDecoder::ImageDecoder()
|
| - : image_request_id_counter_(0), last_request_(base::TimeTicks::Now()) {
|
| + : image_request_id_counter_(0) {
|
| // A single ImageDecoder instance should live for the life of the program.
|
| // Explicitly add a reference so the object isn't deleted.
|
| AddRef();
|
| @@ -123,7 +123,15 @@ void ImageDecoder::DecodeImageInSandbox(
|
| return;
|
| }
|
|
|
| - last_request_ = base::TimeTicks::Now();
|
| + if (!batch_mode_timer_) {
|
| + // Created here so it will call StopBatchMode() on the right thread.
|
| + batch_mode_timer_.reset(new base::DelayTimer<ImageDecoder>(
|
| + FROM_HERE,
|
| + base::TimeDelta::FromSeconds(kBatchModeTimeoutSeconds),
|
| + this,
|
| + &ImageDecoder::StopBatchMode));
|
| + }
|
| + batch_mode_timer_->Reset();
|
|
|
| switch (image_codec) {
|
| case ROBUST_JPEG_CODEC:
|
| @@ -160,23 +168,14 @@ void ImageDecoder::StartBatchMode() {
|
| utility_process_host_.reset();
|
| return;
|
| }
|
| - batch_mode_timer_.Start(
|
| - FROM_HERE, base::TimeDelta::FromSeconds(kBatchModeTimeoutSeconds),
|
| - this, &ImageDecoder::StopBatchMode);
|
| }
|
|
|
| void ImageDecoder::StopBatchMode() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| - if ((base::TimeTicks::Now() - last_request_)
|
| - < base::TimeDelta::FromSeconds(kBatchModeTimeoutSeconds)) {
|
| - return;
|
| - }
|
| -
|
| if (utility_process_host_) {
|
| utility_process_host_->EndBatchMode();
|
| utility_process_host_.reset();
|
| }
|
| - batch_mode_timer_.Stop();
|
| }
|
|
|
| bool ImageDecoder::OnMessageReceived(
|
|
|