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

Side by Side Diff: chrome/browser/chromeos/login/update_screen.cc

Issue 10882014: Slightly modified ETA computation algorithm. Also modified UI of the (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix, synx. Created 8 years, 3 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 | 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 "chrome/browser/chromeos/login/update_screen.h" 5 #include "chrome/browser/chromeos/login/update_screen.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 // Minimum timestep between two consecutive measurements for the 44 // Minimum timestep between two consecutive measurements for the
45 // download rate. 45 // download rate.
46 const base::TimeDelta kMinTimeStep = base::TimeDelta::FromSeconds(1); 46 const base::TimeDelta kMinTimeStep = base::TimeDelta::FromSeconds(1);
47 47
48 // Minimum allowed progress between two consecutive ETAs. 48 // Minimum allowed progress between two consecutive ETAs.
49 const double kMinProgressStep = 1e-3; 49 const double kMinProgressStep = 1e-3;
50 50
51 // Smooth factor that is used for the average downloading speed 51 // Smooth factor that is used for the average downloading speed
52 // estimation. 52 // estimation.
53 const double kDownloadSpeedSmoothFactor = 0.005; 53 // avg_speed = smooth_factor * cur_speed + (1.0 - smooth_factor) * avg_speed.
54 const double kDownloadSpeedSmoothFactor = 0.1;
54 55
55 // Minumum allowed value for the average downloading speed. 56 // Minumum allowed value for the average downloading speed.
56 const double kDownloadAverageSpeedDropBound = 1e-8; 57 const double kDownloadAverageSpeedDropBound = 1e-8;
57 58
58 // An upper bound for possible downloading time left estimations. 59 // An upper bound for possible downloading time left estimations.
59 const double kMaxTimeLeft = 24 * 60 * 60; 60 const double kMaxTimeLeft = 24 * 60 * 60;
60 61
61 // Invoked from call to RequestUpdateCheck upon completion of the DBus call. 62 // Invoked from call to RequestUpdateCheck upon completion of the DBus call.
62 void StartUpdateCallback(UpdateScreen* screen, 63 void StartUpdateCallback(UpdateScreen* screen,
63 UpdateEngineClient::UpdateCheckResult result) { 64 UpdateEngineClient::UpdateCheckResult result) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 MakeSureScreenIsShown(); 133 MakeSureScreenIsShown();
133 actor_->SetProgress(kBeforeDownloadProgress); 134 actor_->SetProgress(kBeforeDownloadProgress);
134 actor_->ShowEstimatedTimeLeft(false); 135 actor_->ShowEstimatedTimeLeft(false);
135 if (!HasCriticalUpdate()) { 136 if (!HasCriticalUpdate()) {
136 LOG(INFO) << "Noncritical update available: " 137 LOG(INFO) << "Noncritical update available: "
137 << status.new_version; 138 << status.new_version;
138 ExitUpdate(REASON_UPDATE_NON_CRITICAL); 139 ExitUpdate(REASON_UPDATE_NON_CRITICAL);
139 } else { 140 } else {
140 LOG(INFO) << "Critical update available: " 141 LOG(INFO) << "Critical update available: "
141 << status.new_version; 142 << status.new_version;
142 actor_->ShowPreparingUpdatesInfo(true); 143 actor_->SetProgressMessage(
144 UpdateScreenActor::PROGRESS_MESSAGE_UPDATE_AVAILABLE);
145 actor_->ShowProgressMessage(true);
143 actor_->ShowCurtain(false); 146 actor_->ShowCurtain(false);
144 } 147 }
145 break; 148 break;
146 case UpdateEngineClient::UPDATE_STATUS_DOWNLOADING: 149 case UpdateEngineClient::UPDATE_STATUS_DOWNLOADING:
147 { 150 {
148 MakeSureScreenIsShown(); 151 MakeSureScreenIsShown();
149 if (!is_downloading_update_) { 152 if (!is_downloading_update_) {
150 // Because update engine doesn't send UPDATE_STATUS_UPDATE_AVAILABLE 153 // Because update engine doesn't send UPDATE_STATUS_UPDATE_AVAILABLE
151 // we need to is update critical on first downloading notification. 154 // we need to is update critical on first downloading notification.
152 is_downloading_update_ = true; 155 is_downloading_update_ = true;
153 download_start_time_ = download_last_time_ = base::Time::Now(); 156 download_start_time_ = download_last_time_ = base::Time::Now();
154 download_start_progress_ = status.download_progress; 157 download_start_progress_ = status.download_progress;
155 download_last_progress_ = status.download_progress; 158 download_last_progress_ = status.download_progress;
156 is_download_average_speed_computed_ = false; 159 is_download_average_speed_computed_ = false;
157 download_average_speed_ = 0.0; 160 download_average_speed_ = 0.0;
158 if (!HasCriticalUpdate()) { 161 if (!HasCriticalUpdate()) {
159 LOG(INFO) << "Non-critical update available: " 162 LOG(INFO) << "Non-critical update available: "
160 << status.new_version; 163 << status.new_version;
161 ExitUpdate(REASON_UPDATE_NON_CRITICAL); 164 ExitUpdate(REASON_UPDATE_NON_CRITICAL);
162 } else { 165 } else {
163 LOG(INFO) << "Critical update available: " 166 LOG(INFO) << "Critical update available: "
164 << status.new_version; 167 << status.new_version;
165 actor_->ShowPreparingUpdatesInfo(false); 168 actor_->SetProgressMessage(
169 UpdateScreenActor::PROGRESS_MESSAGE_INSTALLING_UPDATE);
170 actor_->ShowProgressMessage(true);
166 actor_->ShowCurtain(false); 171 actor_->ShowCurtain(false);
167 } 172 }
168 } 173 }
169 UpdateDownloadingStats(status); 174 UpdateDownloadingStats(status);
170 } 175 }
171 break; 176 break;
172 case UpdateEngineClient::UPDATE_STATUS_VERIFYING: 177 case UpdateEngineClient::UPDATE_STATUS_VERIFYING:
173 MakeSureScreenIsShown(); 178 MakeSureScreenIsShown();
174 actor_->SetProgress(kBeforeVerifyingProgress); 179 actor_->SetProgress(kBeforeVerifyingProgress);
175 actor_->ShowEstimatedTimeLeft(false); 180 actor_->SetProgressMessage(UpdateScreenActor::PROGRESS_MESSAGE_VERIFYING);
181 actor_->ShowProgressMessage(true);
176 break; 182 break;
177 case UpdateEngineClient::UPDATE_STATUS_FINALIZING: 183 case UpdateEngineClient::UPDATE_STATUS_FINALIZING:
178 MakeSureScreenIsShown(); 184 MakeSureScreenIsShown();
179 actor_->SetProgress(kBeforeFinalizingProgress); 185 actor_->SetProgress(kBeforeFinalizingProgress);
180 actor_->ShowEstimatedTimeLeft(false); 186 actor_->SetProgressMessage(
187 UpdateScreenActor::PROGRESS_MESSAGE_FINALIZING);
188 actor_->ShowProgressMessage(true);
181 break; 189 break;
182 case UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT: 190 case UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT:
183 MakeSureScreenIsShown(); 191 MakeSureScreenIsShown();
184 // Make sure that first OOBE stage won't be shown after reboot. 192 // Make sure that first OOBE stage won't be shown after reboot.
185 WizardController::MarkOobeCompleted(); 193 WizardController::MarkOobeCompleted();
186 actor_->SetProgress(kProgressComplete); 194 actor_->SetProgress(kProgressComplete);
187 actor_->ShowEstimatedTimeLeft(false); 195 actor_->ShowEstimatedTimeLeft(false);
188 if (HasCriticalUpdate()) { 196 if (HasCriticalUpdate()) {
189 actor_->ShowCurtain(false); 197 actor_->ShowCurtain(false);
190 VLOG(1) << "Initiate reboot after update"; 198 VLOG(1) << "Initiate reboot after update";
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 322
315 void UpdateScreen::SetIgnoreIdleStatus(bool ignore_idle_status) { 323 void UpdateScreen::SetIgnoreIdleStatus(bool ignore_idle_status) {
316 ignore_idle_status_ = ignore_idle_status; 324 ignore_idle_status_ = ignore_idle_status;
317 } 325 }
318 326
319 void UpdateScreen::UpdateDownloadingStats( 327 void UpdateScreen::UpdateDownloadingStats(
320 const UpdateEngineClient::Status& status) { 328 const UpdateEngineClient::Status& status) {
321 if (!actor_) 329 if (!actor_)
322 return; 330 return;
323 base::Time download_current_time = base::Time::Now(); 331 base::Time download_current_time = base::Time::Now();
324 if (download_current_time >= download_last_time_ + kMinTimeStep && 332 if (download_current_time >= download_last_time_ + kMinTimeStep) {
325 status.download_progress >=
326 download_last_progress_ + kMinProgressStep) {
327 // Estimate downloading rate. 333 // Estimate downloading rate.
328 double progress_delta = 334 double progress_delta =
329 std::max(status.download_progress - download_last_progress_, 0.0); 335 std::max(status.download_progress - download_last_progress_, 0.0);
330 double time_delta = 336 double time_delta =
331 (download_current_time - download_last_time_).InSecondsF(); 337 (download_current_time - download_last_time_).InSecondsF();
332 double download_rate = status.new_size * progress_delta / time_delta; 338 double download_rate = status.new_size * progress_delta / time_delta;
333 339
334 download_last_time_ = download_current_time; 340 download_last_time_ = download_current_time;
335 download_last_progress_ = status.download_progress; 341 download_last_progress_ = status.download_progress;
336 342
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 // if the file exists and not empty, there is critical update. 391 // if the file exists and not empty, there is critical update.
386 return true; 392 return true;
387 } 393 }
388 394
389 void UpdateScreen::OnActorDestroyed(UpdateScreenActor* actor) { 395 void UpdateScreen::OnActorDestroyed(UpdateScreenActor* actor) {
390 if (actor_ == actor) 396 if (actor_ == actor)
391 actor_ = NULL; 397 actor_ = NULL;
392 } 398 }
393 399
394 } // namespace chromeos 400 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/mock_update_screen.h ('k') | chrome/browser/chromeos/login/update_screen_actor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698