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

Side by Side Diff: ash/desktop_background/desktop_background_controller.cc

Issue 81393004: ash: Avoid reloading already-resized custom wallpaper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add another MakeThreadSafe() call to WallpaperResizer Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/desktop_background/desktop_background_controller.h" 5 #include "ash/desktop_background/desktop_background_controller.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/desktop_background/desktop_background_controller_observer.h" 8 #include "ash/desktop_background/desktop_background_controller_observer.h"
9 #include "ash/desktop_background/desktop_background_view.h" 9 #include "ash/desktop_background/desktop_background_view.h"
10 #include "ash/desktop_background/desktop_background_widget_controller.h" 10 #include "ash/desktop_background/desktop_background_widget_controller.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 return; 113 return;
114 114
115 if (!file_path_.empty()) 115 if (!file_path_.empty())
116 file_bitmap_ = LoadSkBitmapFromJPEGFile(file_path_); 116 file_bitmap_ = LoadSkBitmapFromJPEGFile(file_path_);
117 117
118 if (cancel_flag_.IsSet()) 118 if (cancel_flag_.IsSet())
119 return; 119 return;
120 120
121 if (file_bitmap_) { 121 if (file_bitmap_) {
122 gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(*file_bitmap_); 122 gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(*file_bitmap_);
123 image.MakeThreadSafe();
123 wallpaper_resizer_.reset(new WallpaperResizer( 124 wallpaper_resizer_.reset(new WallpaperResizer(
124 image, GetMaxDisplaySizeInNative(), file_layout_)); 125 image, GetMaxDisplaySizeInNative(), file_layout_));
125 } else { 126 } else {
126 wallpaper_resizer_.reset(new WallpaperResizer( 127 wallpaper_resizer_.reset(new WallpaperResizer(
127 resource_id_, GetMaxDisplaySizeInNative(), resource_layout_)); 128 resource_id_, GetMaxDisplaySizeInNative(), resource_layout_));
128 } 129 }
129 } 130 }
130 131
131 ~WallpaperLoader() {} 132 ~WallpaperLoader() {}
132 133
(...skipping 29 matching lines...) Expand all
162 Shell::GetInstance()->display_controller()->AddObserver(this); 163 Shell::GetInstance()->display_controller()->AddObserver(this);
163 } 164 }
164 165
165 DesktopBackgroundController::~DesktopBackgroundController() { 166 DesktopBackgroundController::~DesktopBackgroundController() {
166 CancelPendingWallpaperOperation(); 167 CancelPendingWallpaperOperation();
167 Shell::GetInstance()->display_controller()->RemoveObserver(this); 168 Shell::GetInstance()->display_controller()->RemoveObserver(this);
168 } 169 }
169 170
170 gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const { 171 gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const {
171 if (current_wallpaper_) 172 if (current_wallpaper_)
172 return current_wallpaper_->wallpaper_image(); 173 return current_wallpaper_->image();
173 return gfx::ImageSkia(); 174 return gfx::ImageSkia();
174 } 175 }
175 176
176 void DesktopBackgroundController::AddObserver( 177 void DesktopBackgroundController::AddObserver(
177 DesktopBackgroundControllerObserver* observer) { 178 DesktopBackgroundControllerObserver* observer) {
178 observers_.AddObserver(observer); 179 observers_.AddObserver(observer);
179 } 180 }
180 181
181 void DesktopBackgroundController::RemoveObserver( 182 void DesktopBackgroundController::RemoveObserver(
182 DesktopBackgroundControllerObserver* observer) { 183 DesktopBackgroundControllerObserver* observer) {
183 observers_.RemoveObserver(observer); 184 observers_.RemoveObserver(observer);
184 } 185 }
185 186
186 WallpaperLayout DesktopBackgroundController::GetWallpaperLayout() const { 187 WallpaperLayout DesktopBackgroundController::GetWallpaperLayout() const {
187 if (current_wallpaper_) 188 if (current_wallpaper_)
188 return current_wallpaper_->layout(); 189 return current_wallpaper_->layout();
189 return WALLPAPER_LAYOUT_CENTER_CROPPED; 190 return WALLPAPER_LAYOUT_CENTER_CROPPED;
190 } 191 }
191 192
192 void DesktopBackgroundController::OnRootWindowAdded( 193 void DesktopBackgroundController::OnRootWindowAdded(
193 aura::Window* root_window) { 194 aura::Window* root_window) {
194 // The background hasn't been set yet. 195 // The background hasn't been set yet.
195 if (desktop_background_mode_ == BACKGROUND_NONE) 196 if (desktop_background_mode_ == BACKGROUND_NONE)
196 return; 197 return;
197 gfx::Size max_display_size = GetMaxDisplaySizeInNative(); 198 gfx::Size max_display_size = GetMaxDisplaySizeInNative();
198 // Handle resolution change for "built-in" images. 199 // Handle resolution change for "built-in" images.
199 if (BACKGROUND_IMAGE == desktop_background_mode_ && 200 if (desktop_background_mode_ == BACKGROUND_IMAGE &&
200 current_wallpaper_.get() && 201 current_wallpaper_.get() &&
201 current_max_display_size_ != max_display_size) { 202 current_max_display_size_ != max_display_size) {
202 current_max_display_size_ = max_display_size; 203 current_max_display_size_ = max_display_size;
203 UpdateWallpaper(); 204 UpdateWallpaper();
204 } 205 }
205 206
206 InstallDesktopController(root_window); 207 InstallDesktopController(root_window);
207 } 208 }
208 209
209 bool DesktopBackgroundController::SetDefaultWallpaper(bool is_guest) { 210 bool DesktopBackgroundController::SetDefaultWallpaper(bool is_guest) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 bool DesktopBackgroundController::MoveDesktopToUnlockedContainer() { 298 bool DesktopBackgroundController::MoveDesktopToUnlockedContainer() {
298 if (!locked_) 299 if (!locked_)
299 return false; 300 return false;
300 locked_ = false; 301 locked_ = false;
301 return ReparentBackgroundWidgets(GetBackgroundContainerId(true), 302 return ReparentBackgroundWidgets(GetBackgroundContainerId(true),
302 GetBackgroundContainerId(false)); 303 GetBackgroundContainerId(false));
303 } 304 }
304 305
305 void DesktopBackgroundController::OnDisplayConfigurationChanged() { 306 void DesktopBackgroundController::OnDisplayConfigurationChanged() {
306 gfx::Size max_display_size = GetMaxDisplaySizeInNative(); 307 gfx::Size max_display_size = GetMaxDisplaySizeInNative();
307 if (current_max_display_size_ != max_display_size) { 308 if (desktop_background_mode_ == BACKGROUND_IMAGE &&
309 current_wallpaper_.get() &&
310 current_max_display_size_ != max_display_size) {
308 current_max_display_size_ = max_display_size; 311 current_max_display_size_ = max_display_size;
309 timer_.Stop(); 312 timer_.Stop();
310 timer_.Start(FROM_HERE, 313 timer_.Start(FROM_HERE,
311 base::TimeDelta::FromMilliseconds(wallpaper_reload_delay_), 314 base::TimeDelta::FromMilliseconds(wallpaper_reload_delay_),
312 this, 315 this,
313 &DesktopBackgroundController::UpdateWallpaper); 316 &DesktopBackgroundController::UpdateWallpaper);
314 } 317 }
315 } 318 }
316 319
317 bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded( 320 bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded(
318 const base::FilePath& image_file, int image_resource_id) const { 321 const base::FilePath& image_file, int image_resource_id) const {
319 return (wallpaper_loader_.get() && 322 return (wallpaper_loader_.get() &&
320 wallpaper_loader_->file_path() == image_file && 323 wallpaper_loader_->file_path() == image_file &&
321 wallpaper_loader_->resource_id() == image_resource_id) || 324 wallpaper_loader_->resource_id() == image_resource_id) ||
322 (current_wallpaper_.get() && 325 (current_wallpaper_.get() &&
323 current_default_wallpaper_path_ == image_file && 326 current_default_wallpaper_path_ == image_file &&
324 current_default_wallpaper_resource_id_ == image_resource_id); 327 current_default_wallpaper_resource_id_ == image_resource_id);
325 } 328 }
326 329
327 bool DesktopBackgroundController::CustomWallpaperIsAlreadyLoaded( 330 bool DesktopBackgroundController::CustomWallpaperIsAlreadyLoaded(
328 const gfx::ImageSkia& image) const { 331 const gfx::ImageSkia& image) const {
329 return current_wallpaper_.get() && 332 return current_wallpaper_.get() &&
330 current_wallpaper_->wallpaper_image().BackedBySameObjectAs(image); 333 (WallpaperResizer::GetImageId(image) ==
334 current_wallpaper_->original_image_id());
331 } 335 }
332 336
333 void DesktopBackgroundController::SetDesktopBackgroundImageMode() { 337 void DesktopBackgroundController::SetDesktopBackgroundImageMode() {
334 desktop_background_mode_ = BACKGROUND_IMAGE; 338 desktop_background_mode_ = BACKGROUND_IMAGE;
335 InstallDesktopControllerForAllWindows(); 339 InstallDesktopControllerForAllWindows();
336 } 340 }
337 341
338 void DesktopBackgroundController::OnDefaultWallpaperLoadCompleted( 342 void DesktopBackgroundController::OnDefaultWallpaperLoadCompleted(
339 scoped_refptr<WallpaperLoader> loader) { 343 scoped_refptr<WallpaperLoader> loader) {
340 current_wallpaper_.reset(loader->ReleaseWallpaperResizer()); 344 current_wallpaper_.reset(loader->ReleaseWallpaperResizer());
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 iter->rotation() == gfx::Display::ROTATE_270) { 454 iter->rotation() == gfx::Display::ROTATE_270) {
451 size_in_pixel = gfx::Size(size_in_pixel.height(), size_in_pixel.width()); 455 size_in_pixel = gfx::Size(size_in_pixel.height(), size_in_pixel.width());
452 } 456 }
453 width = std::max(size_in_pixel.width(), width); 457 width = std::max(size_in_pixel.width(), width);
454 height = std::max(size_in_pixel.height(), height); 458 height = std::max(size_in_pixel.height(), height);
455 } 459 }
456 return gfx::Size(width, height); 460 return gfx::Size(width, height);
457 } 461 }
458 462
459 } // namespace ash 463 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698