Index: update_attempter.h |
diff --git a/update_attempter.h b/update_attempter.h |
index 6fd4c1626e24869b9cd19e06da63f22423292267..19933219282184f31f15ee6710b7bfa0d8a9d20a 100644 |
--- a/update_attempter.h |
+++ b/update_attempter.h |
@@ -6,10 +6,13 @@ |
#define CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_ATTEMPTER_H__ |
#include <time.h> |
+ |
#include <tr1/memory> |
#include <string> |
#include <vector> |
+ |
#include <glib.h> |
+ |
#include "update_engine/action_processor.h" |
#include "update_engine/download_action.h" |
#include "update_engine/omaha_request_params.h" |
@@ -20,6 +23,10 @@ struct UpdateEngineService; |
namespace chromeos_update_engine { |
+namespace utils { |
+enum ProcessPriority; |
+}; |
+ |
extern const char* kUpdateCompletedMarker; |
enum UpdateStatus { |
@@ -38,20 +45,9 @@ const char* UpdateStatusToString(UpdateStatus status); |
class UpdateAttempter : public ActionProcessorDelegate, |
public DownloadActionDelegate { |
public: |
- UpdateAttempter(PrefsInterface* prefs, MetricsLibraryInterface* metrics_lib) |
- : dbus_service_(NULL), |
- prefs_(prefs), |
- metrics_lib_(metrics_lib), |
- status_(UPDATE_STATUS_IDLE), |
- download_progress_(0.0), |
- last_checked_time_(0), |
- new_version_("0.0.0.0"), |
- new_size_(0) { |
- last_notify_time_.tv_sec = 0; |
- last_notify_time_.tv_nsec = 0; |
- if (utils::FileExists(kUpdateCompletedMarker)) |
- status_ = UPDATE_STATUS_UPDATED_NEED_REBOOT; |
- } |
+ UpdateAttempter(PrefsInterface* prefs, MetricsLibraryInterface* metrics_lib); |
+ ~UpdateAttempter(); |
+ |
// Checks for update and, if a newer version is available, attempts |
// to update the system. Non-empty |in_app_version| or |
// |in_update_url| prevents automatic detection of the parameter. |
@@ -109,6 +105,26 @@ class UpdateAttempter : public ActionProcessorDelegate, |
// returns true. Returns false otherwise. |
bool ScheduleErrorEventAction(); |
+ // Sets the process priority to |priority| and updates |priority_| |
+ // if the new |priority| is different than the current |priority_|, |
+ // otherwise simply returns. |
+ void SetPriority(utils::ProcessPriority priority); |
+ |
+ // Set the process priority to low and sets up timeout events to |
+ // increase the priority gradually to high. |
+ void SetupPriorityManagement(); |
+ |
+ // Resets the process priority to normal and destroys any scheduled |
+ // timeout sources. |
+ void CleanupPriorityManagement(); |
+ |
+ // The process priority timeout source callback increases the |
+ // current priority by one step (low goes to normal, normal goes to |
+ // high). Returns true if the callback must be invoked again after a |
+ // timeout, or false if GLib can destroy this timeout source. |
+ static gboolean StaticManagePriorityCallback(gpointer data); |
+ bool ManagePriorityCallback(); |
+ |
struct timespec last_notify_time_; |
std::vector<std::tr1::shared_ptr<AbstractAction> > actions_; |
@@ -130,6 +146,12 @@ class UpdateAttempter : public ActionProcessorDelegate, |
// Pending error event, if any. |
scoped_ptr<OmahaEvent> error_event_; |
+ // Current process priority. |
+ utils::ProcessPriority priority_; |
+ |
+ // The process priority management timeout source. |
+ GSource* manage_priority_source_; |
+ |
// For status: |
UpdateStatus status_; |
double download_progress_; |