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

Side by Side Diff: chrome/browser/metrics/metrics_service.cc

Issue 253203002: Log operator code histogram on new metric log (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@api_move
Patch Set: . Created 6 years, 7 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
OLDNEW
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 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 void MetricsService::ReceivedProfilerData( 1113 void MetricsService::ReceivedProfilerData(
1114 const tracked_objects::ProcessDataSnapshot& process_data, 1114 const tracked_objects::ProcessDataSnapshot& process_data,
1115 int process_type) { 1115 int process_type) {
1116 DCHECK_EQ(INIT_TASK_SCHEDULED, state_); 1116 DCHECK_EQ(INIT_TASK_SCHEDULED, state_);
1117 1117
1118 // Upon the first callback, create the initial log so that we can immediately 1118 // Upon the first callback, create the initial log so that we can immediately
1119 // save the profiler data. 1119 // save the profiler data.
1120 if (!initial_metrics_log_.get()) { 1120 if (!initial_metrics_log_.get()) {
1121 initial_metrics_log_.reset( 1121 initial_metrics_log_.reset(
1122 new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG)); 1122 new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG));
1123 NotifyOnNewMetricsLog();
1123 } 1124 }
1124 1125
1125 initial_metrics_log_->RecordProfilerData(process_data, process_type); 1126 initial_metrics_log_->RecordProfilerData(process_data, process_type);
1126 } 1127 }
1127 1128
1128 void MetricsService::FinishedReceivingProfilerData() { 1129 void MetricsService::FinishedReceivingProfilerData() {
1129 DCHECK_EQ(INIT_TASK_SCHEDULED, state_); 1130 DCHECK_EQ(INIT_TASK_SCHEDULED, state_);
1130 state_ = INIT_TASK_DONE; 1131 state_ = INIT_TASK_DONE;
1131 scheduler_->InitTaskComplete(); 1132 scheduler_->InitTaskComplete();
1132 } 1133 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 1200
1200 UMA_HISTOGRAM_BOOLEAN("UMA.GeneratedLowEntropySource", true); 1201 UMA_HISTOGRAM_BOOLEAN("UMA.GeneratedLowEntropySource", true);
1201 low_entropy_source_ = GenerateLowEntropySource(); 1202 low_entropy_source_ = GenerateLowEntropySource();
1202 local_state->SetInteger(prefs::kMetricsLowEntropySource, low_entropy_source_); 1203 local_state->SetInteger(prefs::kMetricsLowEntropySource, low_entropy_source_);
1203 local_state->ClearPref(prefs::kMetricsOldLowEntropySource); 1204 local_state->ClearPref(prefs::kMetricsOldLowEntropySource);
1204 metrics::CachingPermutedEntropyProvider::ClearCache(local_state); 1205 metrics::CachingPermutedEntropyProvider::ClearCache(local_state);
1205 1206
1206 return low_entropy_source_; 1207 return low_entropy_source_;
1207 } 1208 }
1208 1209
1210 void MetricsService::AddMetricsLogObserver(MetricsLogObserver* observer) {
1211 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1212 metrics_log_observers_.AddObserver(observer);
1213 }
1214
1215 void MetricsService::RemoveMetricsLogObserver(MetricsLogObserver* observer) {
1216 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1217 metrics_log_observers_.RemoveObserver(observer);
bengr 2014/05/06 17:14:39 Are the observers guaranteed to outlive the Metric
bolian 2014/05/06 18:00:08 For the current usage, Yes. If not in the future,
1218 }
1219
1220 void MetricsService::NotifyOnNewMetricsLog() {
1221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1222 FOR_EACH_OBSERVER(
1223 MetricsLogObserver, metrics_log_observers_, OnNewMetricsLog());
1224 }
1225
1209 // static 1226 // static
1210 std::string MetricsService::GenerateClientID() { 1227 std::string MetricsService::GenerateClientID() {
1211 return base::GenerateGUID(); 1228 return base::GenerateGUID();
1212 } 1229 }
1213 1230
1214 //------------------------------------------------------------------------------ 1231 //------------------------------------------------------------------------------
1215 // State save methods 1232 // State save methods
1216 1233
1217 void MetricsService::ScheduleNextStateSave() { 1234 void MetricsService::ScheduleNextStateSave() {
1218 state_saver_factory_.InvalidateWeakPtrs(); 1235 state_saver_factory_.InvalidateWeakPtrs();
(...skipping 19 matching lines...) Expand all
1238 1255
1239 1256
1240 //------------------------------------------------------------------------------ 1257 //------------------------------------------------------------------------------
1241 // Recording control methods 1258 // Recording control methods
1242 1259
1243 void MetricsService::OpenNewLog() { 1260 void MetricsService::OpenNewLog() {
1244 DCHECK(!log_manager_.current_log()); 1261 DCHECK(!log_manager_.current_log());
1245 1262
1246 log_manager_.BeginLoggingWithLog( 1263 log_manager_.BeginLoggingWithLog(
1247 new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG)); 1264 new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG));
1265 NotifyOnNewMetricsLog();
1248 if (state_ == INITIALIZED) { 1266 if (state_ == INITIALIZED) {
1249 // We only need to schedule that run once. 1267 // We only need to schedule that run once.
1250 state_ = INIT_TASK_SCHEDULED; 1268 state_ = INIT_TASK_SCHEDULED;
1251 1269
1252 // Schedules a task on the file thread for execution of slower 1270 // Schedules a task on the file thread for execution of slower
1253 // initialization steps (such as plugin list generation) necessary 1271 // initialization steps (such as plugin list generation) necessary
1254 // for sending the initial log. This avoids blocking the main UI 1272 // for sending the initial log. This avoids blocking the main UI
1255 // thread. 1273 // thread.
1256 BrowserThread::PostDelayedTask( 1274 BrowserThread::PostDelayedTask(
1257 BrowserThread::FILE, 1275 BrowserThread::FILE,
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 } 1553 }
1536 1554
1537 void MetricsService::PrepareInitialStabilityLog() { 1555 void MetricsService::PrepareInitialStabilityLog() {
1538 DCHECK_EQ(INITIALIZED, state_); 1556 DCHECK_EQ(INITIALIZED, state_);
1539 PrefService* pref = g_browser_process->local_state(); 1557 PrefService* pref = g_browser_process->local_state();
1540 DCHECK_NE(0, pref->GetInteger(prefs::kStabilityCrashCount)); 1558 DCHECK_NE(0, pref->GetInteger(prefs::kStabilityCrashCount));
1541 1559
1542 scoped_ptr<MetricsLog> initial_stability_log( 1560 scoped_ptr<MetricsLog> initial_stability_log(
1543 new MetricsLog(client_id_, session_id_, 1561 new MetricsLog(client_id_, session_id_,
1544 MetricsLog::INITIAL_STABILITY_LOG)); 1562 MetricsLog::INITIAL_STABILITY_LOG));
1563 NotifyOnNewMetricsLog();
1545 if (!initial_stability_log->LoadSavedEnvironmentFromPrefs()) 1564 if (!initial_stability_log->LoadSavedEnvironmentFromPrefs())
1546 return; 1565 return;
1547 initial_stability_log->RecordStabilityMetrics(base::TimeDelta(), 1566 initial_stability_log->RecordStabilityMetrics(base::TimeDelta(),
1548 base::TimeDelta()); 1567 base::TimeDelta());
1549 log_manager_.LoadPersistedUnsentLogs(); 1568 log_manager_.LoadPersistedUnsentLogs();
1550 1569
1551 log_manager_.PauseCurrentLog(); 1570 log_manager_.PauseCurrentLog();
1552 log_manager_.BeginLoggingWithLog(initial_stability_log.release()); 1571 log_manager_.BeginLoggingWithLog(initial_stability_log.release());
1553 #if defined(OS_ANDROID) 1572 #if defined(OS_ANDROID)
1554 ConvertAndroidStabilityPrefsToHistograms(pref); 1573 ConvertAndroidStabilityPrefsToHistograms(pref);
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 // Android has its own settings for metrics / crash uploading. 2094 // Android has its own settings for metrics / crash uploading.
2076 const PrefService* prefs = g_browser_process->local_state(); 2095 const PrefService* prefs = g_browser_process->local_state();
2077 return prefs->GetBoolean(prefs::kCrashReportingEnabled); 2096 return prefs->GetBoolean(prefs::kCrashReportingEnabled);
2078 #else 2097 #else
2079 return MetricsServiceHelper::IsMetricsReportingEnabled(); 2098 return MetricsServiceHelper::IsMetricsReportingEnabled();
2080 #endif 2099 #endif
2081 #else 2100 #else
2082 return false; 2101 return false;
2083 #endif 2102 #endif
2084 } 2103 }
2104
2105 void MetricsServiceHelper::AddMetricsLogObserver(
2106 MetricsLogObserver* observer) {
2107 MetricsService* metrics_service = g_browser_process->metrics_service();
2108 if (metrics_service != NULL) {
bengr 2014/05/06 17:14:39 When would this be null?
bolian 2014/05/06 18:00:08 Just as a safety check before dereferring it. In t
2109 metrics_service->AddMetricsLogObserver(observer);
2110 }
2111 }
2112
2113 void MetricsServiceHelper::RemoveMetricsLogObserver(
2114 MetricsLogObserver* observer) {
2115 MetricsService* metrics_service = g_browser_process->metrics_service();
2116 if (metrics_service != NULL) {
2117 metrics_service->RemoveMetricsLogObserver(observer);
2118 }
2119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698