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

Side by Side Diff: chrome/browser/ui/views/download/download_item_view_md.cc

Issue 1538773002: Reduce CPU usage of download shelf UI. (both MD and pre-MD shelves) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: no change for indeterminate size dls Created 4 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 unified diff | Download patch
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 "chrome/browser/ui/views/download/download_item_view_md.h" 5 #include "chrome/browser/ui/views/download/download_item_view_md.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 if (sampling_event_.get()) 198 if (sampling_event_.get())
199 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kIgnore); 199 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kIgnore);
200 } 200 }
201 201
202 // Progress animation handlers. 202 // Progress animation handlers.
203 203
204 void DownloadItemViewMd::StartDownloadProgress() { 204 void DownloadItemViewMd::StartDownloadProgress() {
205 if (progress_timer_.IsRunning()) 205 if (progress_timer_.IsRunning())
206 return; 206 return;
207 progress_start_time_ = base::TimeTicks::Now(); 207 progress_start_time_ = base::TimeTicks::Now();
208 progress_timer_.Start( 208 progress_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(
209 FROM_HERE, 209 DownloadShelf::kProgressRateMs),
210 base::TimeDelta::FromMilliseconds(DownloadShelf::kProgressRateMs), 210 base::Bind(&DownloadItemViewMd::ProgressTimerFired,
211 base::Bind(&DownloadItemViewMd::SchedulePaint, base::Unretained(this))); 211 base::Unretained(this)));
212 } 212 }
213 213
214 void DownloadItemViewMd::StopDownloadProgress() { 214 void DownloadItemViewMd::StopDownloadProgress() {
215 if (!progress_timer_.IsRunning()) 215 if (!progress_timer_.IsRunning())
216 return; 216 return;
217 previous_progress_elapsed_ += base::TimeTicks::Now() - progress_start_time_; 217 previous_progress_elapsed_ += base::TimeTicks::Now() - progress_start_time_;
218 progress_start_time_ = base::TimeTicks(); 218 progress_start_time_ = base::TimeTicks();
219 progress_timer_.Stop(); 219 progress_timer_.Stop();
220 } 220 }
221 221
(...skipping 28 matching lines...) Expand all
250 ShowWarningDialog(); 250 ShowWarningDialog();
251 // Force the shelf to layout again as our size has changed. 251 // Force the shelf to layout again as our size has changed.
252 shelf_->Layout(); 252 shelf_->Layout();
253 SchedulePaint(); 253 SchedulePaint();
254 } else { 254 } else {
255 base::string16 status_text = model_.GetStatusText(); 255 base::string16 status_text = model_.GetStatusText();
256 switch (download()->GetState()) { 256 switch (download()->GetState()) {
257 case DownloadItem::IN_PROGRESS: 257 case DownloadItem::IN_PROGRESS:
258 download()->IsPaused() ? StopDownloadProgress() 258 download()->IsPaused() ? StopDownloadProgress()
259 : StartDownloadProgress(); 259 : StartDownloadProgress();
260 SchedulePaint();
260 LoadIconIfItemPathChanged(); 261 LoadIconIfItemPathChanged();
261 break; 262 break;
262 case DownloadItem::INTERRUPTED: 263 case DownloadItem::INTERRUPTED:
263 StopDownloadProgress(); 264 StopDownloadProgress();
264 complete_animation_.reset(new gfx::SlideAnimation(this)); 265 complete_animation_.reset(new gfx::SlideAnimation(this));
265 complete_animation_->SetSlideDuration(kInterruptedAnimationDurationMs); 266 complete_animation_->SetSlideDuration(kInterruptedAnimationDurationMs);
266 complete_animation_->SetTweenType(gfx::Tween::LINEAR); 267 complete_animation_->SetTweenType(gfx::Tween::LINEAR);
267 complete_animation_->Show(); 268 complete_animation_->Show();
268 SchedulePaint(); 269 SchedulePaint();
269 LoadIcon(); 270 LoadIcon();
(...skipping 23 matching lines...) Expand all
293 status_text_ = status_text; 294 status_text_ = status_text;
294 } 295 }
295 296
296 base::string16 new_tip = model_.GetTooltipText(font_list_, kTooltipMaxWidth); 297 base::string16 new_tip = model_.GetTooltipText(font_list_, kTooltipMaxWidth);
297 if (new_tip != tooltip_text_) { 298 if (new_tip != tooltip_text_) {
298 tooltip_text_ = new_tip; 299 tooltip_text_ = new_tip;
299 TooltipTextChanged(); 300 TooltipTextChanged();
300 } 301 }
301 302
302 UpdateAccessibleName(); 303 UpdateAccessibleName();
303
304 // We use the parent's (DownloadShelfView's) SchedulePaint, since there
305 // are spaces between each DownloadItemViewMd that the parent is responsible
306 // for painting.
307 shelf_->SchedulePaint();
308 } 304 }
309 305
310 void DownloadItemViewMd::OnDownloadDestroyed(DownloadItem* download) { 306 void DownloadItemViewMd::OnDownloadDestroyed(DownloadItem* download) {
311 shelf_->RemoveDownloadView(this); // This will delete us! 307 shelf_->RemoveDownloadView(this); // This will delete us!
312 } 308 }
313 309
314 void DownloadItemViewMd::OnDownloadOpened(DownloadItem* download) { 310 void DownloadItemViewMd::OnDownloadOpened(DownloadItem* download) {
315 disabled_while_opening_ = true; 311 disabled_while_opening_ = true;
316 SetEnabled(false); 312 SetEnabled(false);
317 base::MessageLoop::current()->task_runner()->PostDelayedTask( 313 base::MessageLoop::current()->task_runner()->PostDelayedTask(
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 gfx::SlideAnimation* animation) { 1064 gfx::SlideAnimation* animation) {
1069 if (from == NORMAL && to == HOT) { 1065 if (from == NORMAL && to == HOT) {
1070 animation->Show(); 1066 animation->Show();
1071 } else if (from == HOT && to == NORMAL) { 1067 } else if (from == HOT && to == NORMAL) {
1072 animation->Hide(); 1068 animation->Hide();
1073 } else if (from != to) { 1069 } else if (from != to) {
1074 animation->Reset((to == HOT) ? 1.0 : 0.0); 1070 animation->Reset((to == HOT) ? 1.0 : 0.0);
1075 } 1071 }
1076 } 1072 }
1077 1073
1074 void DownloadItemViewMd::ProgressTimerFired() {
1075 // Only repaint for the indeterminate size case. Otherwise, we'll repaint only
1076 // when there's an update notified via OnDownloadUpdated().
1077 if (model_.PercentComplete() < 0)
1078 SchedulePaint();
1079 }
1080
1078 SkColor DownloadItemViewMd::GetTextColor() { 1081 SkColor DownloadItemViewMd::GetTextColor() {
1079 return GetTextColorForThemeProvider(GetThemeProvider()); 1082 return GetTextColorForThemeProvider(GetThemeProvider());
1080 } 1083 }
1081 1084
1082 SkColor DownloadItemViewMd::GetDimmedTextColor() { 1085 SkColor DownloadItemViewMd::GetDimmedTextColor() {
1083 return SkColorSetA(GetTextColor(), 0xC7); 1086 return SkColorSetA(GetTextColor(), 0xC7);
1084 } 1087 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698