OLD | NEW |
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 //------------------------------------------------------------------------------ | 5 //------------------------------------------------------------------------------ |
6 // Description of the life cycle of a instance of MetricsService. | 6 // Description of the life cycle of a instance of MetricsService. |
7 // | 7 // |
8 // OVERVIEW | 8 // OVERVIEW |
9 // | 9 // |
10 // A MetricsService instance is typically created at application startup. It is | 10 // A MetricsService instance is typically created at application startup. It is |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 }; | 372 }; |
373 | 373 |
374 // Handles asynchronous fetching of memory details. | 374 // Handles asynchronous fetching of memory details. |
375 // Will run the provided task after finished. | 375 // Will run the provided task after finished. |
376 class MetricsMemoryDetails : public MemoryDetails { | 376 class MetricsMemoryDetails : public MemoryDetails { |
377 public: | 377 public: |
378 explicit MetricsMemoryDetails(const base::Closure& callback) | 378 explicit MetricsMemoryDetails(const base::Closure& callback) |
379 : callback_(callback) {} | 379 : callback_(callback) {} |
380 | 380 |
381 virtual void OnDetailsAvailable() OVERRIDE { | 381 virtual void OnDetailsAvailable() OVERRIDE { |
382 MessageLoop::current()->PostTask(FROM_HERE, callback_); | 382 base::MessageLoop::current()->PostTask(FROM_HERE, callback_); |
383 } | 383 } |
384 | 384 |
385 private: | 385 private: |
386 virtual ~MetricsMemoryDetails() {} | 386 virtual ~MetricsMemoryDetails() {} |
387 | 387 |
388 base::Closure callback_; | 388 base::Closure callback_; |
389 DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); | 389 DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); |
390 }; | 390 }; |
391 | 391 |
392 // static | 392 // static |
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 const std::vector<webkit::WebPluginInfo>& plugins) { | 947 const std::vector<webkit::WebPluginInfo>& plugins) { |
948 DCHECK_EQ(INIT_TASK_SCHEDULED, state_); | 948 DCHECK_EQ(INIT_TASK_SCHEDULED, state_); |
949 plugins_ = plugins; | 949 plugins_ = plugins; |
950 | 950 |
951 // Schedules a task on a blocking pool thread to gather Google Update | 951 // Schedules a task on a blocking pool thread to gather Google Update |
952 // statistics (requires Registry reads). | 952 // statistics (requires Registry reads). |
953 BrowserThread::PostBlockingPoolTask( | 953 BrowserThread::PostBlockingPoolTask( |
954 FROM_HERE, | 954 FROM_HERE, |
955 base::Bind(&MetricsService::InitTaskGetGoogleUpdateData, | 955 base::Bind(&MetricsService::InitTaskGetGoogleUpdateData, |
956 self_ptr_factory_.GetWeakPtr(), | 956 self_ptr_factory_.GetWeakPtr(), |
957 MessageLoop::current()->message_loop_proxy())); | 957 base::MessageLoop::current()->message_loop_proxy())); |
958 } | 958 } |
959 | 959 |
960 // static | 960 // static |
961 void MetricsService::InitTaskGetGoogleUpdateData( | 961 void MetricsService::InitTaskGetGoogleUpdateData( |
962 base::WeakPtr<MetricsService> self, | 962 base::WeakPtr<MetricsService> self, |
963 base::MessageLoopProxy* target_loop) { | 963 base::MessageLoopProxy* target_loop) { |
964 GoogleUpdateMetrics google_update_metrics; | 964 GoogleUpdateMetrics google_update_metrics; |
965 | 965 |
966 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) | 966 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) |
967 const bool system_install = GoogleUpdateSettings::IsSystemInstall(); | 967 const bool system_install = GoogleUpdateSettings::IsSystemInstall(); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1057 std::string MetricsService::GenerateClientID() { | 1057 std::string MetricsService::GenerateClientID() { |
1058 return base::GenerateGUID(); | 1058 return base::GenerateGUID(); |
1059 } | 1059 } |
1060 | 1060 |
1061 //------------------------------------------------------------------------------ | 1061 //------------------------------------------------------------------------------ |
1062 // State save methods | 1062 // State save methods |
1063 | 1063 |
1064 void MetricsService::ScheduleNextStateSave() { | 1064 void MetricsService::ScheduleNextStateSave() { |
1065 state_saver_factory_.InvalidateWeakPtrs(); | 1065 state_saver_factory_.InvalidateWeakPtrs(); |
1066 | 1066 |
1067 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 1067 base::MessageLoop::current()->PostDelayedTask( |
| 1068 FROM_HERE, |
1068 base::Bind(&MetricsService::SaveLocalState, | 1069 base::Bind(&MetricsService::SaveLocalState, |
1069 state_saver_factory_.GetWeakPtr()), | 1070 state_saver_factory_.GetWeakPtr()), |
1070 base::TimeDelta::FromMinutes(kSaveStateIntervalMinutes)); | 1071 base::TimeDelta::FromMinutes(kSaveStateIntervalMinutes)); |
1071 } | 1072 } |
1072 | 1073 |
1073 void MetricsService::SaveLocalState() { | 1074 void MetricsService::SaveLocalState() { |
1074 PrefService* pref = g_browser_process->local_state(); | 1075 PrefService* pref = g_browser_process->local_state(); |
1075 if (!pref) { | 1076 if (!pref) { |
1076 NOTREACHED(); | 1077 NOTREACHED(); |
1077 return; | 1078 return; |
(...skipping 19 matching lines...) Expand all Loading... |
1097 state_ = INIT_TASK_SCHEDULED; | 1098 state_ = INIT_TASK_SCHEDULED; |
1098 | 1099 |
1099 // Schedules a task on the file thread for execution of slower | 1100 // Schedules a task on the file thread for execution of slower |
1100 // initialization steps (such as plugin list generation) necessary | 1101 // initialization steps (such as plugin list generation) necessary |
1101 // for sending the initial log. This avoids blocking the main UI | 1102 // for sending the initial log. This avoids blocking the main UI |
1102 // thread. | 1103 // thread. |
1103 BrowserThread::PostDelayedTask( | 1104 BrowserThread::PostDelayedTask( |
1104 BrowserThread::FILE, | 1105 BrowserThread::FILE, |
1105 FROM_HERE, | 1106 FROM_HERE, |
1106 base::Bind(&MetricsService::InitTaskGetHardwareClass, | 1107 base::Bind(&MetricsService::InitTaskGetHardwareClass, |
1107 self_ptr_factory_.GetWeakPtr(), | 1108 self_ptr_factory_.GetWeakPtr(), |
1108 MessageLoop::current()->message_loop_proxy()), | 1109 base::MessageLoop::current()->message_loop_proxy()), |
1109 base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); | 1110 base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); |
1110 } | 1111 } |
1111 } | 1112 } |
1112 | 1113 |
1113 void MetricsService::CloseCurrentLog() { | 1114 void MetricsService::CloseCurrentLog() { |
1114 if (!log_manager_.current_log()) | 1115 if (!log_manager_.current_log()) |
1115 return; | 1116 return; |
1116 | 1117 |
1117 // TODO(jar): Integrate bounds on log recording more consistently, so that we | 1118 // TODO(jar): Integrate bounds on log recording more consistently, so that we |
1118 // can stop recording logs that are too big much sooner. | 1119 // can stop recording logs that are too big much sooner. |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1251 base::Closure callback = base::Bind( | 1252 base::Closure callback = base::Bind( |
1252 &MetricsService::OnHistogramSynchronizationDone, | 1253 &MetricsService::OnHistogramSynchronizationDone, |
1253 self_ptr_factory_.GetWeakPtr()); | 1254 self_ptr_factory_.GetWeakPtr()); |
1254 | 1255 |
1255 base::StatisticsRecorder::CollectHistogramStats("Browser"); | 1256 base::StatisticsRecorder::CollectHistogramStats("Browser"); |
1256 | 1257 |
1257 // Set up the callback to task to call after we receive histograms from all | 1258 // Set up the callback to task to call after we receive histograms from all |
1258 // child processes. Wait time specifies how long to wait before absolutely | 1259 // child processes. Wait time specifies how long to wait before absolutely |
1259 // calling us back on the task. | 1260 // calling us back on the task. |
1260 content::FetchHistogramsAsynchronously( | 1261 content::FetchHistogramsAsynchronously( |
1261 MessageLoop::current(), callback, | 1262 base::MessageLoop::current(), |
| 1263 callback, |
1262 base::TimeDelta::FromMilliseconds(kMaxHistogramGatheringWaitDuration)); | 1264 base::TimeDelta::FromMilliseconds(kMaxHistogramGatheringWaitDuration)); |
1263 } | 1265 } |
1264 | 1266 |
1265 void MetricsService::OnHistogramSynchronizationDone() { | 1267 void MetricsService::OnHistogramSynchronizationDone() { |
1266 DCHECK(IsSingleThreaded()); | 1268 DCHECK(IsSingleThreaded()); |
1267 // This function should only be called as the callback from an ansynchronous | 1269 // This function should only be called as the callback from an ansynchronous |
1268 // step. | 1270 // step. |
1269 DCHECK(waiting_for_asynchronous_reporting_step_); | 1271 DCHECK(waiting_for_asynchronous_reporting_step_); |
1270 | 1272 |
1271 waiting_for_asynchronous_reporting_step_ = false; | 1273 waiting_for_asynchronous_reporting_step_ = false; |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1804 if (local_state) { | 1806 if (local_state) { |
1805 const PrefService::Preference* uma_pref = | 1807 const PrefService::Preference* uma_pref = |
1806 local_state->FindPreference(prefs::kMetricsReportingEnabled); | 1808 local_state->FindPreference(prefs::kMetricsReportingEnabled); |
1807 if (uma_pref) { | 1809 if (uma_pref) { |
1808 bool success = uma_pref->GetValue()->GetAsBoolean(&result); | 1810 bool success = uma_pref->GetValue()->GetAsBoolean(&result); |
1809 DCHECK(success); | 1811 DCHECK(success); |
1810 } | 1812 } |
1811 } | 1813 } |
1812 return result; | 1814 return result; |
1813 } | 1815 } |
OLD | NEW |