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

Side by Side Diff: update_attempter.h

Issue 3053049: Nice automatic updates up to a point, then renice if necessary. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: better documentation Created 10 years, 4 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
« no previous file with comments | « no previous file | update_attempter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS 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 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__ 5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__
6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__ 6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__
7 7
8 #include <time.h> 8 #include <time.h>
9
9 #include <tr1/memory> 10 #include <tr1/memory>
10 #include <string> 11 #include <string>
11 #include <vector> 12 #include <vector>
13
12 #include <glib.h> 14 #include <glib.h>
15
13 #include "update_engine/action_processor.h" 16 #include "update_engine/action_processor.h"
14 #include "update_engine/download_action.h" 17 #include "update_engine/download_action.h"
15 #include "update_engine/omaha_request_params.h" 18 #include "update_engine/omaha_request_params.h"
16 #include "update_engine/omaha_response_handler_action.h" 19 #include "update_engine/omaha_response_handler_action.h"
17 20
18 class MetricsLibraryInterface; 21 class MetricsLibraryInterface;
19 struct UpdateEngineService; 22 struct UpdateEngineService;
20 23
21 namespace chromeos_update_engine { 24 namespace chromeos_update_engine {
22 25
26 namespace utils {
27 enum ProcessPriority;
28 };
29
23 extern const char* kUpdateCompletedMarker; 30 extern const char* kUpdateCompletedMarker;
24 31
25 enum UpdateStatus { 32 enum UpdateStatus {
26 UPDATE_STATUS_IDLE = 0, 33 UPDATE_STATUS_IDLE = 0,
27 UPDATE_STATUS_CHECKING_FOR_UPDATE, 34 UPDATE_STATUS_CHECKING_FOR_UPDATE,
28 UPDATE_STATUS_UPDATE_AVAILABLE, 35 UPDATE_STATUS_UPDATE_AVAILABLE,
29 UPDATE_STATUS_DOWNLOADING, 36 UPDATE_STATUS_DOWNLOADING,
30 UPDATE_STATUS_VERIFYING, 37 UPDATE_STATUS_VERIFYING,
31 UPDATE_STATUS_FINALIZING, 38 UPDATE_STATUS_FINALIZING,
32 UPDATE_STATUS_UPDATED_NEED_REBOOT, 39 UPDATE_STATUS_UPDATED_NEED_REBOOT,
33 UPDATE_STATUS_REPORTING_ERROR_EVENT, 40 UPDATE_STATUS_REPORTING_ERROR_EVENT,
34 }; 41 };
35 42
36 const char* UpdateStatusToString(UpdateStatus status); 43 const char* UpdateStatusToString(UpdateStatus status);
37 44
38 class UpdateAttempter : public ActionProcessorDelegate, 45 class UpdateAttempter : public ActionProcessorDelegate,
39 public DownloadActionDelegate { 46 public DownloadActionDelegate {
40 public: 47 public:
41 UpdateAttempter(PrefsInterface* prefs, MetricsLibraryInterface* metrics_lib) 48 UpdateAttempter(PrefsInterface* prefs, MetricsLibraryInterface* metrics_lib);
42 : dbus_service_(NULL), 49 ~UpdateAttempter();
43 prefs_(prefs), 50
44 metrics_lib_(metrics_lib),
45 status_(UPDATE_STATUS_IDLE),
46 download_progress_(0.0),
47 last_checked_time_(0),
48 new_version_("0.0.0.0"),
49 new_size_(0) {
50 last_notify_time_.tv_sec = 0;
51 last_notify_time_.tv_nsec = 0;
52 if (utils::FileExists(kUpdateCompletedMarker))
53 status_ = UPDATE_STATUS_UPDATED_NEED_REBOOT;
54 }
55 // Checks for update and, if a newer version is available, attempts 51 // Checks for update and, if a newer version is available, attempts
56 // to update the system. Non-empty |in_app_version| or 52 // to update the system. Non-empty |in_app_version| or
57 // |in_update_url| prevents automatic detection of the parameter. 53 // |in_update_url| prevents automatic detection of the parameter.
58 void Update(const std::string& app_version, const std::string& omaha_url); 54 void Update(const std::string& app_version, const std::string& omaha_url);
59 55
60 // ActionProcessorDelegate methods: 56 // ActionProcessorDelegate methods:
61 void ProcessingDone(const ActionProcessor* processor, ActionExitCode code); 57 void ProcessingDone(const ActionProcessor* processor, ActionExitCode code);
62 void ProcessingStopped(const ActionProcessor* processor); 58 void ProcessingStopped(const ActionProcessor* processor);
63 void ActionCompleted(ActionProcessor* processor, 59 void ActionCompleted(ActionProcessor* processor,
64 AbstractAction* action, 60 AbstractAction* action,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 // Creates an error event object in |error_event_| to be included in 98 // Creates an error event object in |error_event_| to be included in
103 // an OmahaRequestAction once the current action processor is done. 99 // an OmahaRequestAction once the current action processor is done.
104 void CreatePendingErrorEvent(AbstractAction* action, ActionExitCode code); 100 void CreatePendingErrorEvent(AbstractAction* action, ActionExitCode code);
105 101
106 // If there's a pending error event allocated in |error_event_|, 102 // If there's a pending error event allocated in |error_event_|,
107 // schedules an OmahaRequestAction with that event in the current 103 // schedules an OmahaRequestAction with that event in the current
108 // processor, clears the pending event, updates the status and 104 // processor, clears the pending event, updates the status and
109 // returns true. Returns false otherwise. 105 // returns true. Returns false otherwise.
110 bool ScheduleErrorEventAction(); 106 bool ScheduleErrorEventAction();
111 107
108 // Sets the process priority to |priority| and updates |priority_|
109 // if the new |priority| is different than the current |priority_|,
110 // otherwise simply returns.
111 void SetPriority(utils::ProcessPriority priority);
112
113 // Set the process priority to low and sets up timeout events to
114 // increase the priority gradually to high.
115 void SetupPriorityManagement();
116
117 // Resets the process priority to normal and destroys any scheduled
118 // timeout sources.
119 void CleanupPriorityManagement();
120
121 // The process priority timeout source callback increases the
122 // current priority by one step (low goes to normal, normal goes to
123 // high). Returns true if the callback must be invoked again after a
124 // timeout, or false if GLib can destroy this timeout source.
125 static gboolean StaticManagePriorityCallback(gpointer data);
126 bool ManagePriorityCallback();
127
112 struct timespec last_notify_time_; 128 struct timespec last_notify_time_;
113 129
114 std::vector<std::tr1::shared_ptr<AbstractAction> > actions_; 130 std::vector<std::tr1::shared_ptr<AbstractAction> > actions_;
115 ActionProcessor processor_; 131 ActionProcessor processor_;
116 132
117 // If non-null, this UpdateAttempter will send status updates over this 133 // If non-null, this UpdateAttempter will send status updates over this
118 // dbus service. 134 // dbus service.
119 UpdateEngineService* dbus_service_; 135 UpdateEngineService* dbus_service_;
120 136
121 // pointer to the OmahaResponseHandlerAction in the actions_ vector; 137 // pointer to the OmahaResponseHandlerAction in the actions_ vector;
122 std::tr1::shared_ptr<OmahaResponseHandlerAction> response_handler_action_; 138 std::tr1::shared_ptr<OmahaResponseHandlerAction> response_handler_action_;
123 139
124 // Pointer to the preferences store interface. 140 // Pointer to the preferences store interface.
125 PrefsInterface* prefs_; 141 PrefsInterface* prefs_;
126 142
127 // Pointer to the UMA metrics collection library. 143 // Pointer to the UMA metrics collection library.
128 MetricsLibraryInterface* metrics_lib_; 144 MetricsLibraryInterface* metrics_lib_;
129 145
130 // Pending error event, if any. 146 // Pending error event, if any.
131 scoped_ptr<OmahaEvent> error_event_; 147 scoped_ptr<OmahaEvent> error_event_;
132 148
149 // Current process priority.
150 utils::ProcessPriority priority_;
151
152 // The process priority management timeout source.
153 GSource* manage_priority_source_;
154
133 // For status: 155 // For status:
134 UpdateStatus status_; 156 UpdateStatus status_;
135 double download_progress_; 157 double download_progress_;
136 int64_t last_checked_time_; 158 int64_t last_checked_time_;
137 std::string new_version_; 159 std::string new_version_;
138 int64_t new_size_; 160 int64_t new_size_;
139 161
140 // Device paramaters common to all Omaha requests. 162 // Device paramaters common to all Omaha requests.
141 OmahaRequestDeviceParams omaha_request_params_; 163 OmahaRequestDeviceParams omaha_request_params_;
142 164
143 DISALLOW_COPY_AND_ASSIGN(UpdateAttempter); 165 DISALLOW_COPY_AND_ASSIGN(UpdateAttempter);
144 }; 166 };
145 167
146 } // namespace chromeos_update_engine 168 } // namespace chromeos_update_engine
147 169
148 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__ 170 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__
OLDNEW
« no previous file with comments | « no previous file | update_attempter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698