Chromium Code Reviews| Index: ash/desktop_background/wallpaper_resizer.cc |
| diff --git a/ash/desktop_background/wallpaper_resizer.cc b/ash/desktop_background/wallpaper_resizer.cc |
| index b75e262e25f2ac8dbd1bb81a7e465a11fc21acaf..a2a57ad377dc92996fa3a0fadfb22df8709aafa7 100644 |
| --- a/ash/desktop_background/wallpaper_resizer.cc |
| +++ b/ash/desktop_background/wallpaper_resizer.cc |
| @@ -10,7 +10,9 @@ |
| #include "base/threading/sequenced_worker_pool.h" |
| #include "base/threading/worker_pool.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "third_party/skia/include/core/SkImage.h" |
| #include "ui/base/resource/resource_bundle.h" |
| +#include "ui/gfx/image/image_skia_rep.h" |
| #include "ui/gfx/skia_util.h" |
| using content::BrowserThread; |
| @@ -91,20 +93,29 @@ void Resize(SkBitmap orig_bitmap, |
| } // namespace |
| +// static |
| +uint32_t WallpaperResizer::GetImageId(const gfx::ImageSkia& image) { |
| + const gfx::ImageSkiaRep& image_rep = image.GetRepresentation(1.0f); |
|
Daniel Erat
2013/11/22 15:33:20
Oshima, can you comment on whether I'm doing the r
|
| + return image_rep.is_null() ? 0 : image_rep.sk_bitmap().getGenerationID(); |
| +} |
| + |
| WallpaperResizer::WallpaperResizer(int image_resource_id, |
| const gfx::Size& target_size, |
| WallpaperLayout layout) |
| - : wallpaper_image_(*(ui::ResourceBundle::GetSharedInstance(). |
| + : image_(*(ui::ResourceBundle::GetSharedInstance(). |
| GetImageNamed(image_resource_id).ToImageSkia())), |
| + original_image_id_(GetImageId(image_)), |
| target_size_(target_size), |
| layout_(layout), |
| weak_ptr_factory_(this) { |
| + image_.MakeThreadSafe(); |
| } |
| WallpaperResizer::WallpaperResizer(const gfx::ImageSkia& image, |
| const gfx::Size& target_size, |
| WallpaperLayout layout) |
| - : wallpaper_image_(image), |
| + : image_(image), |
| + original_image_id_(GetImageId(image_)), |
| target_size_(target_size), |
| layout_(layout), |
| weak_ptr_factory_(this) { |
| @@ -118,7 +129,7 @@ void WallpaperResizer::StartResize() { |
| SkBitmap* resized_bitmap = new SkBitmap; |
| if (!content::BrowserThread::PostBlockingPoolTaskAndReply( |
| FROM_HERE, |
| - base::Bind(&Resize, *wallpaper_image_.bitmap(), target_size_, |
| + base::Bind(&Resize, *image_.bitmap(), target_size_, |
| layout_, resized_bitmap), |
| base::Bind(&WallpaperResizer::OnResizeFinished, |
| weak_ptr_factory_.GetWeakPtr(), |
| @@ -138,7 +149,8 @@ void WallpaperResizer::RemoveObserver(WallpaperResizerObserver* observer) { |
| void WallpaperResizer::OnResizeFinished(SkBitmap* resized_bitmap) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - wallpaper_image_ = gfx::ImageSkia::CreateFrom1xBitmap(*resized_bitmap); |
| + image_ = gfx::ImageSkia::CreateFrom1xBitmap(*resized_bitmap); |
| + image_.MakeThreadSafe(); |
| FOR_EACH_OBSERVER(WallpaperResizerObserver, observers_, |
| OnWallpaperResized()); |
| } |