Chromium Code Reviews| Index: chrome/browser/chromeos/login/user_image_loader.cc |
| diff --git a/chrome/browser/chromeos/login/user_image_loader.cc b/chrome/browser/chromeos/login/user_image_loader.cc |
| index 89fae745c7470cdf743eb2dede89d70dd382861f..ea599a59ae3aab1b72f86a2139010d54c5db5c33 100644 |
| --- a/chrome/browser/chromeos/login/user_image_loader.cc |
| +++ b/chrome/browser/chromeos/login/user_image_loader.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/file_util.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop.h" |
| +#include "base/threading/worker_pool.h" |
| #include "chrome/browser/chromeos/login/helper.h" |
| #include "chrome/browser/chromeos/login/user_image.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -21,6 +22,9 @@ using content::BrowserThread; |
| namespace chromeos { |
| +// static |
| +const char* UserImageLoader::kUserImageLoaderTokenName = "user-image-loader"; |
| + |
| UserImageLoader::ImageInfo::ImageInfo(int size, |
| const LoadedCallback& loaded_cb) |
| : size(size), |
| @@ -33,6 +37,9 @@ UserImageLoader::ImageInfo::~ImageInfo() { |
| UserImageLoader::UserImageLoader(ImageDecoder::ImageCodec image_codec) |
| : target_message_loop_(NULL), |
| image_codec_(image_codec) { |
| + sequence_token_ = |
| + BrowserThread::GetBlockingPool()-> |
| + GetNamedSequenceToken(kUserImageLoaderTokenName); |
|
Nikita (slow)
2013/01/18 16:40:13
This does mean that there would no 2 image loading
Joao da Silva
2013/01/18 17:24:58
AFAICT the ImageDecoder spawns a utility process t
Nikita (slow)
2013/01/18 17:41:45
My point was that first it will load image using t
|
| } |
| UserImageLoader::~UserImageLoader() { |
| @@ -44,14 +51,19 @@ void UserImageLoader::Start(const std::string& filepath, |
| target_message_loop_ = MessageLoop::current(); |
| ImageInfo image_info(size, loaded_cb); |
| - BrowserThread::PostTask( |
| - BrowserThread::FILE, FROM_HERE, |
| + scoped_refptr<base::SequencedTaskRunner> task_runner = |
| + BrowserThread::GetBlockingPool()-> |
| + GetSequencedTaskRunnerWithShutdownBehavior( |
| + sequence_token_, base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
| + task_runner->PostTask( |
| + FROM_HERE, |
| base::Bind(&UserImageLoader::LoadImage, this, filepath, image_info)); |
| } |
| void UserImageLoader::LoadImage(const std::string& filepath, |
| const ImageInfo& image_info) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + DCHECK(BrowserThread::GetBlockingPool()-> |
| + IsRunningSequenceOnCurrentThread(sequence_token_)); |
| std::string image_data; |
| file_util::ReadFileToString(FilePath(filepath), &image_data); |
| @@ -59,12 +71,13 @@ void UserImageLoader::LoadImage(const std::string& filepath, |
| scoped_refptr<ImageDecoder> image_decoder = |
| new ImageDecoder(this, image_data, image_codec_); |
| image_info_map_.insert(std::make_pair(image_decoder.get(), image_info)); |
| - image_decoder->Start(); |
| + image_decoder->Start(kUserImageLoaderTokenName); |
|
Joao da Silva
2013/01/18 17:24:58
The current task_runner could be passed instead of
|
| } |
| void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder, |
| const SkBitmap& decoded_image) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + DCHECK(BrowserThread::GetBlockingPool()-> |
| + IsRunningSequenceOnCurrentThread(sequence_token_)); |
| ImageInfoMap::iterator info_it = image_info_map_.find(decoder); |
| if (info_it == image_info_map_.end()) { |
| @@ -106,7 +119,8 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder, |
| } |
| void UserImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + DCHECK(BrowserThread::GetBlockingPool()-> |
| + IsRunningSequenceOnCurrentThread(sequence_token_)); |
| ImageInfoMap::iterator info_it = image_info_map_.find(decoder); |
| if (info_it == image_info_map_.end()) { |