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

Unified Diff: chrome/browser/chromeos/login/user_image_loader.cc

Issue 11968044: Fix login visual hitch on chromebook (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
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()) {

Powered by Google App Engine
This is Rietveld 408576698