| Index: chrome/browser/metrics/metrics_service.cc
|
| diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
|
| index 92ee6021a7e0fea7efb9b6b165200fb54f814285..2726d6c620f7a063af3e7f56ecb146e1d539911d 100644
|
| --- a/chrome/browser/metrics/metrics_service.cc
|
| +++ b/chrome/browser/metrics/metrics_service.cc
|
| @@ -89,11 +89,11 @@
|
| // initial log.
|
| //
|
| // INIT_TASK_SCHEDULED, // Waiting for deferred init tasks to complete.
|
| -// Typically about 30 seconds after startup, a task is sent to a second thread
|
| -// (the file thread) to perform deferred (lower priority and slower)
|
| -// initialization steps such as getting the list of plugins. That task will
|
| -// (when complete) make an async callback (via a Task) to indicate the
|
| -// completion.
|
| +// Typically about 30 seconds after startup, a task is posted to perform
|
| +// deferred (lower priority and slower) initialization steps such as getting the
|
| +// list of plugins and waiting for hardware statistics on Chrome OS.
|
| +// That task will (when complete) make an async callback (via a Task) to
|
| +// indicate the completion.
|
| //
|
| // INIT_TASK_DONE, // Waiting for timer to send initial log.
|
| // The callback has arrived, and it is now possible for an initial log to be
|
| @@ -150,6 +150,7 @@
|
| #include "base/md5.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/string_number_conversions.h"
|
| +#include "base/string_util.h"
|
| #include "base/threading/platform_thread.h"
|
| #include "base/threading/thread.h"
|
| #include "base/utf_string_conversions.h"
|
| @@ -756,30 +757,38 @@ void MetricsService::InitializeMetricsState() {
|
|
|
| // static
|
| void MetricsService::InitTaskGetHardwareClass(
|
| - base::WeakPtr<MetricsService> self,
|
| - base::MessageLoopProxy* target_loop) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| + base::WeakPtr<MetricsService> self) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +#if defined(OS_CHROMEOS)
|
| + chromeos::system::StatisticsProvider::GetInstance()->WhenReady(
|
| + base::Bind(&MetricsService::OnStatisticsProviderReady,
|
| + self));
|
| +#else
|
| + if (self)
|
| + self->OnInitTaskGotHardwareClass(EmptyString());
|
| +#endif // OS_CHROMEOS
|
| +}
|
|
|
| - std::string hardware_class;
|
| #if defined(OS_CHROMEOS)
|
| +void MetricsService::OnStatisticsProviderReady() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + std::string hardware_class;
|
| chromeos::system::StatisticsProvider::GetInstance()->GetMachineStatistic(
|
| "hardware_class", &hardware_class);
|
| -#endif // OS_CHROMEOS
|
| -
|
| - target_loop->PostTask(FROM_HERE,
|
| - base::Bind(&MetricsService::OnInitTaskGotHardwareClass,
|
| - self, hardware_class));
|
| + OnInitTaskGotHardwareClass(hardware_class);
|
| }
|
| +#endif
|
|
|
| void MetricsService::OnInitTaskGotHardwareClass(
|
| const std::string& hardware_class) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK_EQ(state_, INIT_TASK_SCHEDULED);
|
| hardware_class_ = hardware_class;
|
|
|
| // Start the next part of the init task: loading plugin information.
|
| PluginService::GetInstance()->GetPlugins(
|
| base::Bind(&MetricsService::OnInitTaskGotPluginInfo,
|
| - self_ptr_factory_.GetWeakPtr()));
|
| + self_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| void MetricsService::OnInitTaskGotPluginInfo(
|
| @@ -839,11 +848,10 @@ void MetricsService::StartRecording() {
|
| // for sending the initial log. This avoids blocking the main UI
|
| // thread.
|
| BrowserThread::PostDelayedTask(
|
| - BrowserThread::FILE,
|
| + BrowserThread::UI,
|
| FROM_HERE,
|
| base::Bind(&MetricsService::InitTaskGetHardwareClass,
|
| - self_ptr_factory_.GetWeakPtr(),
|
| - MessageLoop::current()->message_loop_proxy()),
|
| + self_ptr_factory_.GetWeakPtr()),
|
| base::TimeDelta::FromSeconds(kInitializationDelaySeconds));
|
| }
|
| }
|
|
|