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

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

Issue 931993002: Make image_decoder a Leaky LazyInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename instance_ to image_decoder_instance_ for mac linker Created 5 years, 10 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/users/avatar/user_image_loader.cc
diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc b/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc
index 17088c37b8f696be62bb2570811cb8cbb64f1c58..474fdfbf4def6dab09fbabf421baba65ba2aa01c 100644
--- a/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc
+++ b/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc
@@ -79,25 +79,21 @@ void UserImageLoader::DecodeImage(const scoped_ptr<std::string> data,
const ImageInfo& image_info) {
DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
- scoped_refptr<ImageDecoder> image_decoder =
- new ImageDecoder(this, *data, image_codec_);
- image_info_map_.insert(std::make_pair(image_decoder.get(), image_info));
- image_decoder->Start(background_task_runner_);
+ std::vector<unsigned char> image_data(data->begin(), data->end());
+ image_info_queue_.push(image_info);
+ image_data_queue_.push(image_data);
+ ImageDecoder::GetInstance()->Start(this, *data, image_codec_,
+ background_task_runner_);
}
-void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
- const SkBitmap& decoded_image) {
+void UserImageLoader::OnImageDecoded(const SkBitmap& decoded_image) {
DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
- ImageInfoMap::iterator it = image_info_map_.find(decoder);
- if (it == image_info_map_.end()) {
- NOTREACHED();
- return;
- }
- const std::string file_path = it->second.file_path;
- const int target_size = it->second.pixels_per_side;
- const LoadedCallback loaded_cb = it->second.loaded_cb;
- image_info_map_.erase(it);
+ ImageInfo image_info = image_info_queue_.front();
dcheng 2015/02/27 16:47:17 const ImageInfo& to save a copy?
Theresa 2015/03/04 03:10:06 Done.
+ const std::string file_path = image_info.file_path;
+ const int target_size = image_info.pixels_per_side;
+ const LoadedCallback loaded_cb = image_info.loaded_cb;
+ image_info_queue_.pop();
SkBitmap final_image = decoded_image;
@@ -127,24 +123,23 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
gfx::ImageSkia::CreateFrom1xBitmap(final_image);
final_image_skia.MakeThreadSafe();
user_manager::UserImage user_image(final_image_skia,
- decoder->get_image_data());
+ image_data_queue_.front());
dcheng 2015/02/27 16:47:17 How about adding the original raw image as a membe
Theresa 2015/03/04 03:10:06 Done.
user_image.set_file_path(file_path);
if (image_codec_ == ImageDecoder::ROBUST_JPEG_CODEC)
user_image.MarkAsSafe();
foreground_task_runner_->PostTask(FROM_HERE,
base::Bind(loaded_cb, user_image));
+
+ image_data_queue_.pop();
}
-void UserImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) {
+void UserImageLoader::OnDecodeImageFailed() {
DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
- ImageInfoMap::iterator it = image_info_map_.find(decoder);
- if (it == image_info_map_.end()) {
- NOTREACHED();
- return;
- }
- const LoadedCallback loaded_cb = it->second.loaded_cb;
- image_info_map_.erase(it);
+ ImageInfo image_info = image_info_queue_.front();
+ const LoadedCallback loaded_cb = image_info.loaded_cb;
+ image_info_queue_.pop();
+ image_data_queue_.pop();
foreground_task_runner_->PostTask(
FROM_HERE, base::Bind(loaded_cb, user_manager::UserImage()));

Powered by Google App Engine
This is Rietveld 408576698