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

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

Issue 294033007: [Metrics] Merge MetricsService and MetricsServiceBase classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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 | Annotate | Revision Log
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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 //------------------------------------------------------------------------------ 162 //------------------------------------------------------------------------------
163 163
164 #include "chrome/browser/metrics/metrics_service.h" 164 #include "chrome/browser/metrics/metrics_service.h"
165 165
166 #include <algorithm> 166 #include <algorithm>
167 167
168 #include "base/bind.h" 168 #include "base/bind.h"
169 #include "base/callback.h" 169 #include "base/callback.h"
170 #include "base/command_line.h" 170 #include "base/command_line.h"
171 #include "base/metrics/histogram.h" 171 #include "base/metrics/histogram.h"
172 #include "base/metrics/histogram_base.h"
173 #include "base/metrics/histogram_samples.h"
172 #include "base/metrics/sparse_histogram.h" 174 #include "base/metrics/sparse_histogram.h"
173 #include "base/metrics/statistics_recorder.h" 175 #include "base/metrics/statistics_recorder.h"
174 #include "base/prefs/pref_registry_simple.h" 176 #include "base/prefs/pref_registry_simple.h"
175 #include "base/prefs/pref_service.h" 177 #include "base/prefs/pref_service.h"
176 #include "base/prefs/scoped_user_pref_update.h" 178 #include "base/prefs/scoped_user_pref_update.h"
177 #include "base/strings/string_number_conversions.h" 179 #include "base/strings/string_number_conversions.h"
178 #include "base/strings/utf_string_conversions.h" 180 #include "base/strings/utf_string_conversions.h"
179 #include "base/threading/platform_thread.h" 181 #include "base/threading/platform_thread.h"
180 #include "base/threading/thread.h" 182 #include "base/threading/thread.h"
181 #include "base/threading/thread_restrictions.h" 183 #include "base/threading/thread_restrictions.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 276
275 // If an upload fails, and the transmission was over this byte count, then we 277 // If an upload fails, and the transmission was over this byte count, then we
276 // will discard the log, and not try to retransmit it. We also don't persist 278 // will discard the log, and not try to retransmit it. We also don't persist
277 // the log to the prefs for transmission during the next chrome session if this 279 // the log to the prefs for transmission during the next chrome session if this
278 // limit is exceeded. 280 // limit is exceeded.
279 const size_t kUploadLogAvoidRetransmitSize = 50000; 281 const size_t kUploadLogAvoidRetransmitSize = 50000;
280 282
281 // Interval, in minutes, between state saves. 283 // Interval, in minutes, between state saves.
282 const int kSaveStateIntervalMinutes = 5; 284 const int kSaveStateIntervalMinutes = 5;
283 285
286 // The metrics server's URL.
287 const char kServerUrl[] = "https://clients4.google.com/uma/v2";
288
289 // The MIME type for the uploaded metrics data.
290 const char kMimeType[] = "application/vnd.chrome.uma";
291
284 enum ResponseStatus { 292 enum ResponseStatus {
285 UNKNOWN_FAILURE, 293 UNKNOWN_FAILURE,
286 SUCCESS, 294 SUCCESS,
287 BAD_REQUEST, // Invalid syntax or log too large. 295 BAD_REQUEST, // Invalid syntax or log too large.
288 NO_RESPONSE, 296 NO_RESPONSE,
289 NUM_RESPONSE_STATUSES 297 NUM_RESPONSE_STATUSES
290 }; 298 };
291 299
292 ResponseStatus ResponseCodeToStatus(int response_code) { 300 ResponseStatus ResponseCodeToStatus(int response_code) {
293 switch (response_code) { 301 switch (response_code) {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0); 459 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0);
452 460
453 #if defined(OS_ANDROID) 461 #if defined(OS_ANDROID)
454 // TODO(asvitkine): Move this out of here. 462 // TODO(asvitkine): Move this out of here.
455 AndroidMetricsProvider::RegisterPrefs(registry); 463 AndroidMetricsProvider::RegisterPrefs(registry);
456 #endif // defined(OS_ANDROID) 464 #endif // defined(OS_ANDROID)
457 } 465 }
458 466
459 MetricsService::MetricsService(metrics::MetricsStateManager* state_manager, 467 MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
460 metrics::MetricsServiceClient* client) 468 metrics::MetricsServiceClient* client)
461 : MetricsServiceBase(g_browser_process->local_state(), 469 : log_manager_(g_browser_process->local_state(),
462 kUploadLogAvoidRetransmitSize), 470 kUploadLogAvoidRetransmitSize),
471 histogram_snapshot_manager_(this),
463 state_manager_(state_manager), 472 state_manager_(state_manager),
464 client_(client), 473 client_(client),
465 recording_active_(false), 474 recording_active_(false),
466 reporting_active_(false), 475 reporting_active_(false),
467 test_mode_active_(false), 476 test_mode_active_(false),
468 state_(INITIALIZED), 477 state_(INITIALIZED),
469 has_initial_stability_log_(false), 478 has_initial_stability_log_(false),
470 idle_since_last_transmission_(false), 479 idle_since_last_transmission_(false),
471 session_id_(-1), 480 session_id_(-1),
472 next_window_id_(0), 481 next_window_id_(0),
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 content::NotificationRegistrar* registrar, 621 content::NotificationRegistrar* registrar,
613 content::NotificationObserver* observer) { 622 content::NotificationObserver* observer) {
614 registrar->Add(observer, content::NOTIFICATION_LOAD_START, 623 registrar->Add(observer, content::NOTIFICATION_LOAD_START,
615 content::NotificationService::AllSources()); 624 content::NotificationService::AllSources());
616 registrar->Add(observer, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 625 registrar->Add(observer, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
617 content::NotificationService::AllSources()); 626 content::NotificationService::AllSources());
618 registrar->Add(observer, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, 627 registrar->Add(observer, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG,
619 content::NotificationService::AllSources()); 628 content::NotificationService::AllSources());
620 } 629 }
621 630
631 void MetricsService::RecordDelta(const base::HistogramBase& histogram,
632 const base::HistogramSamples& snapshot) {
633 log_manager_.current_log()->RecordHistogramDelta(histogram.histogram_name(),
634 snapshot);
635 }
636
637 void MetricsService::InconsistencyDetected(
638 base::HistogramBase::Inconsistency problem) {
639 UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowser",
640 problem, base::HistogramBase::NEVER_EXCEEDED_VALUE);
641 }
642
643 void MetricsService::UniqueInconsistencyDetected(
644 base::HistogramBase::Inconsistency problem) {
645 UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowserUnique",
646 problem, base::HistogramBase::NEVER_EXCEEDED_VALUE);
647 }
648
649 void MetricsService::InconsistencyDetectedInLoggedCount(int amount) {
650 UMA_HISTOGRAM_COUNTS("Histogram.InconsistentSnapshotBrowser",
651 std::abs(amount));
652 }
653
622 void MetricsService::BrowserChildProcessHostConnected( 654 void MetricsService::BrowserChildProcessHostConnected(
623 const content::ChildProcessData& data) { 655 const content::ChildProcessData& data) {
624 GetChildProcessStats(data).process_launches++; 656 GetChildProcessStats(data).process_launches++;
625 } 657 }
626 658
627 void MetricsService::BrowserChildProcessCrashed( 659 void MetricsService::BrowserChildProcessCrashed(
628 const content::ChildProcessData& data) { 660 const content::ChildProcessData& data) {
629 GetChildProcessStats(data).process_crashes++; 661 GetChildProcessStats(data).process_crashes++;
630 // Exclude plugin crashes from the count below because we report them via 662 // Exclude plugin crashes from the count below because we report them via
631 // a separate UMA metric. 663 // a separate UMA metric.
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 if (synthetic_trial_groups_[i].start_time <= current_log->creation_time()) 1715 if (synthetic_trial_groups_[i].start_time <= current_log->creation_time())
1684 synthetic_trials->push_back(synthetic_trial_groups_[i].id); 1716 synthetic_trials->push_back(synthetic_trial_groups_[i].id);
1685 } 1717 }
1686 } 1718 }
1687 1719
1688 scoped_ptr<MetricsLog> MetricsService::CreateLog(MetricsLog::LogType log_type) { 1720 scoped_ptr<MetricsLog> MetricsService::CreateLog(MetricsLog::LogType log_type) {
1689 return make_scoped_ptr(new MetricsLog( 1721 return make_scoped_ptr(new MetricsLog(
1690 state_manager_->client_id(), session_id_, log_type, client_)); 1722 state_manager_->client_id(), session_id_, log_type, client_));
1691 } 1723 }
1692 1724
1725 void MetricsService::RecordCurrentHistograms() {
1726 DCHECK(log_manager_.current_log());
1727 histogram_snapshot_manager_.PrepareDeltas(
1728 base::Histogram::kNoFlags, base::Histogram::kUmaTargetedHistogramFlag);
1729 }
1730
1731 void MetricsService::RecordCurrentStabilityHistograms() {
1732 DCHECK(log_manager_.current_log());
1733 histogram_snapshot_manager_.PrepareDeltas(
1734 base::Histogram::kNoFlags, base::Histogram::kUmaStabilityHistogramFlag);
1735 }
1736
1693 void MetricsService::LogCleanShutdown() { 1737 void MetricsService::LogCleanShutdown() {
1694 // Redundant hack to write pref ASAP. 1738 // Redundant hack to write pref ASAP.
1695 MarkAppCleanShutdownAndCommit(); 1739 MarkAppCleanShutdownAndCommit();
1696 1740
1697 // Redundant setting to assure that we always reset this value at shutdown 1741 // Redundant setting to assure that we always reset this value at shutdown
1698 // (and that we don't use some alternate path, and not call LogCleanShutdown). 1742 // (and that we don't use some alternate path, and not call LogCleanShutdown).
1699 clean_shutdown_status_ = CLEANLY_SHUTDOWN; 1743 clean_shutdown_status_ = CLEANLY_SHUTDOWN;
1700 1744
1701 RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true); 1745 RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true);
1702 PrefService* pref = g_browser_process->local_state(); 1746 PrefService* pref = g_browser_process->local_state();
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 if (metrics_service) 1951 if (metrics_service)
1908 metrics_service->AddObserver(observer); 1952 metrics_service->AddObserver(observer);
1909 } 1953 }
1910 1954
1911 void MetricsServiceHelper::RemoveMetricsServiceObserver( 1955 void MetricsServiceHelper::RemoveMetricsServiceObserver(
1912 MetricsServiceObserver* observer) { 1956 MetricsServiceObserver* observer) {
1913 MetricsService* metrics_service = g_browser_process->metrics_service(); 1957 MetricsService* metrics_service = g_browser_process->metrics_service();
1914 if (metrics_service) 1958 if (metrics_service)
1915 metrics_service->RemoveObserver(observer); 1959 metrics_service->RemoveObserver(observer);
1916 } 1960 }
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | chrome/browser/metrics/metrics_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698