Chromium Code Reviews| Index: chrome/browser/metrics/metrics_service.h |
| diff --git a/chrome/browser/metrics/metrics_service.h b/chrome/browser/metrics/metrics_service.h |
| index 46867ed717d9706d379ae6e683a6708b5d9a16e6..4323daa3c6a20390042b99b9a33ba99b392c7677 100644 |
| --- a/chrome/browser/metrics/metrics_service.h |
| +++ b/chrome/browser/metrics/metrics_service.h |
| @@ -37,6 +37,7 @@ class TemplateURLService; |
| namespace base { |
| class DictionaryValue; |
| class ListValue; |
| +class MessageLoopProxy; |
| } |
| namespace webkit { |
| @@ -154,18 +155,36 @@ class MetricsService : public NotificationObserver, |
| SENDING_CURRENT_LOGS, // Sending standard current logs as they acrue. |
| }; |
| + // When in the INIT_TASK_SCHEDULED state, multiple tasks are performed. In the |
|
jam
2011/09/21 00:04:51
are all these changes really necessary? can't we k
Robert Sesek
2011/09/21 01:13:44
Ok. Made the init tasks serial.
|
| + // completion callback, when all init tasks are done, the service moves to |
| + // INIT_TASK_DONE. |
| + enum InitSubtaskState { |
| + INIT_SUBTASK_UNSTARTED = 0, // Init subtasks have not been started. |
| + INIT_SUBTASK_PLUGINS = 1 << 0, // Finished loading the plugin list. |
| + INIT_SUBTASK_HWCLASS = 1 << 1, // Finished loading the hardware class. |
| + INIT_SUBTASK_ALL = INIT_SUBTASK_PLUGINS | INIT_SUBTASK_HWCLASS, |
| + }; |
| + |
| enum ShutdownCleanliness { |
| CLEANLY_SHUTDOWN = 0xdeadbeef, |
| NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN |
| }; |
| - class InitTask; |
| - class InitTaskComplete; |
| + // Method that is run as a delayed task after the MetricsService is |
| + // constructed to perform initialization tasks. |
| + void RunInitTasks(); |
| + |
| + // Called on the FILE thread to load hardware class information. |
| + void InitTaskGetHardwareClass(base::MessageLoopProxy* target_loop); |
| - // Callback to let us know that the init task is done. |
| - void OnInitTaskComplete( |
| - const std::string& hardware_class, |
| - const std::vector<webkit::WebPluginInfo>& plugins); |
| + // Callbacks to let us know that the init task is done. |
| + void OnInitTaskGotHardwareClass(const std::string& hardware_class); |
| + void OnInitTaskGotPluginInfo( |
| + std::vector<webkit::WebPluginInfo> plugins); |
| + |
| + // Moves the |state_| to INIT_TASK_DONE if all the init subtasks have |
| + // completed. |
| + void OnInitTaskMaybeDone(); |
| // When we start a new version of Chromium (different from our last run), we |
| // need to discard the old crash stats so that we don't attribute crashes etc. |
| @@ -358,6 +377,9 @@ class MetricsService : public NotificationObserver, |
| // state. |
| State state_; |
| + // The state of the init subtask. |
| + uint32 init_state_; |
| + |
| // Chrome OS hardware class (e.g., hardware qualification ID). This |
| // class identifies the configured system components such as CPU, |
| // WiFi adapter, etc. For non Chrome OS hosts, this will be an |