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

Side by Side Diff: components/metrics/metrics_service.cc

Issue 2910023003: Change the logic for discarding all non-histogram logs because of actions/omnibox events to truncat… (Closed)
Patch Set: today extension Created 3 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 #include "components/metrics/stability_metrics_provider.h" 155 #include "components/metrics/stability_metrics_provider.h"
156 #include "components/metrics/url_constants.h" 156 #include "components/metrics/url_constants.h"
157 #include "components/prefs/pref_registry_simple.h" 157 #include "components/prefs/pref_registry_simple.h"
158 #include "components/prefs/pref_service.h" 158 #include "components/prefs/pref_service.h"
159 #include "components/variations/entropy_provider.h" 159 #include "components/variations/entropy_provider.h"
160 160
161 namespace metrics { 161 namespace metrics {
162 162
163 namespace { 163 namespace {
164 164
165 // This drops records if the number of events (user action and omnibox) exceeds
166 // the kEventLimit.
167 const base::Feature kUMAThrottleEvents{"UMAThrottleEvents",
168 base::FEATURE_ENABLED_BY_DEFAULT};
169
170 // The delay, in seconds, after starting recording before doing expensive 165 // The delay, in seconds, after starting recording before doing expensive
171 // initialization work. 166 // initialization work.
172 #if defined(OS_ANDROID) || defined(OS_IOS) 167 #if defined(OS_ANDROID) || defined(OS_IOS)
173 // On mobile devices, a significant portion of sessions last less than a minute. 168 // On mobile devices, a significant portion of sessions last less than a minute.
174 // Use a shorter timer on these platforms to avoid losing data. 169 // Use a shorter timer on these platforms to avoid losing data.
175 // TODO(dfalcantara): To avoid delaying startup, tighten up initialization so 170 // TODO(dfalcantara): To avoid delaying startup, tighten up initialization so
176 // that it occurs after the user gets their initial page. 171 // that it occurs after the user gets their initial page.
177 const int kInitializationDelaySeconds = 5; 172 const int kInitializationDelaySeconds = 5;
178 #else 173 #else
179 const int kInitializationDelaySeconds = 30; 174 const int kInitializationDelaySeconds = 30;
180 #endif 175 #endif
181 176
182 // The maximum number of events in a log uploaded to the UMA server.
183 const int kEventLimit = 2400;
184
185 #if defined(OS_ANDROID) || defined(OS_IOS) 177 #if defined(OS_ANDROID) || defined(OS_IOS)
186 void MarkAppCleanShutdownAndCommit(CleanExitBeacon* clean_exit_beacon, 178 void MarkAppCleanShutdownAndCommit(CleanExitBeacon* clean_exit_beacon,
187 PrefService* local_state) { 179 PrefService* local_state) {
188 clean_exit_beacon->WriteBeaconValue(true); 180 clean_exit_beacon->WriteBeaconValue(true);
189 ExecutionPhaseManager(local_state).OnAppEnterBackground(); 181 ExecutionPhaseManager(local_state).OnAppEnterBackground();
190 // Start writing right away (write happens on a different thread). 182 // Start writing right away (write happens on a different thread).
191 local_state->CommitPendingWrite(); 183 local_state->CommitPendingWrite();
192 } 184 }
193 #endif // defined(OS_ANDROID) || defined(OS_IOS) 185 #endif // defined(OS_ANDROID) || defined(OS_IOS)
194 186
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 void MetricsService::StartInitTask() { 631 void MetricsService::StartInitTask() {
640 client_->InitializeSystemProfileMetrics( 632 client_->InitializeSystemProfileMetrics(
641 base::Bind(&MetricsService::FinishedInitTask, 633 base::Bind(&MetricsService::FinishedInitTask,
642 self_ptr_factory_.GetWeakPtr())); 634 self_ptr_factory_.GetWeakPtr()));
643 } 635 }
644 636
645 void MetricsService::CloseCurrentLog() { 637 void MetricsService::CloseCurrentLog() {
646 if (!log_manager_.current_log()) 638 if (!log_manager_.current_log())
647 return; 639 return;
648 640
649 // TODO(rkaplow): Evaluate if this is needed.
650 if (log_manager_.current_log()->num_events() > kEventLimit) {
651 UMA_HISTOGRAM_COUNTS("UMA.Discarded Log Events",
652 log_manager_.current_log()->num_events());
653 if (base::FeatureList::IsEnabled(kUMAThrottleEvents)) {
654 log_manager_.DiscardCurrentLog();
655 OpenNewLog(); // Start trivial log to hold our histograms.
656 }
657 }
658
659 // If a persistent allocator is in use, update its internal histograms (such 641 // If a persistent allocator is in use, update its internal histograms (such
660 // as how much memory is being used) before reporting. 642 // as how much memory is being used) before reporting.
661 base::PersistentHistogramAllocator* allocator = 643 base::PersistentHistogramAllocator* allocator =
662 base::GlobalHistogramAllocator::Get(); 644 base::GlobalHistogramAllocator::Get();
663 if (allocator) 645 if (allocator)
664 allocator->UpdateTrackingHistograms(); 646 allocator->UpdateTrackingHistograms();
665 647
666 // Put incremental data (histogram deltas, and realtime stats deltas) at the 648 // Put incremental data (histogram deltas, and realtime stats deltas) at the
667 // end of all log transmissions (initial log handles this separately). 649 // end of all log transmissions (initial log handles this separately).
668 // RecordIncrementalStabilityElements only exists on the derived 650 // RecordIncrementalStabilityElements only exists on the derived
669 // MetricsLog class. 651 // MetricsLog class.
670 MetricsLog* current_log = log_manager_.current_log(); 652 MetricsLog* current_log = log_manager_.current_log();
671 DCHECK(current_log); 653 DCHECK(current_log);
672 RecordCurrentEnvironment(current_log); 654 RecordCurrentEnvironment(current_log);
673 base::TimeDelta incremental_uptime; 655 base::TimeDelta incremental_uptime;
674 base::TimeDelta uptime; 656 base::TimeDelta uptime;
675 GetUptimes(local_state_, &incremental_uptime, &uptime); 657 GetUptimes(local_state_, &incremental_uptime, &uptime);
676 current_log->RecordStabilityMetrics(metrics_providers_, incremental_uptime, 658 current_log->RecordStabilityMetrics(metrics_providers_, incremental_uptime,
677 uptime); 659 uptime);
678 660
679 current_log->RecordGeneralMetrics(metrics_providers_); 661 current_log->RecordGeneralMetrics(metrics_providers_);
680 RecordCurrentHistograms(); 662 RecordCurrentHistograms();
663 current_log->TruncateEvents();
681 DVLOG(1) << "Generated an ongoing log."; 664 DVLOG(1) << "Generated an ongoing log.";
682 log_manager_.FinishCurrentLog(log_store()); 665 log_manager_.FinishCurrentLog(log_store());
683 } 666 }
684 667
685 void MetricsService::PushPendingLogsToPersistentStorage() { 668 void MetricsService::PushPendingLogsToPersistentStorage() {
686 if (state_ < SENDING_LOGS) 669 if (state_ < SENDING_LOGS)
687 return; // We didn't and still don't have time to get plugin list etc. 670 return; // We didn't and still don't have time to get plugin list etc.
688 671
689 CloseCurrentLog(); 672 CloseCurrentLog();
690 log_store()->PersistUnsentLogs(); 673 log_store()->PersistUnsentLogs();
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 // Redundant setting to assure that we always reset this value at shutdown 976 // Redundant setting to assure that we always reset this value at shutdown
994 // (and that we don't use some alternate path, and not call LogCleanShutdown). 977 // (and that we don't use some alternate path, and not call LogCleanShutdown).
995 clean_shutdown_status_ = CLEANLY_SHUTDOWN; 978 clean_shutdown_status_ = CLEANLY_SHUTDOWN;
996 client_->OnLogCleanShutdown(); 979 client_->OnLogCleanShutdown();
997 clean_exit_beacon_.WriteBeaconValue(true); 980 clean_exit_beacon_.WriteBeaconValue(true);
998 SetExecutionPhase(ExecutionPhase::SHUTDOWN_COMPLETE, local_state_); 981 SetExecutionPhase(ExecutionPhase::SHUTDOWN_COMPLETE, local_state_);
999 StabilityMetricsProvider(local_state_).MarkSessionEndCompleted(end_completed); 982 StabilityMetricsProvider(local_state_).MarkSessionEndCompleted(end_completed);
1000 } 983 }
1001 984
1002 } // namespace metrics 985 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/metrics_log_unittest.cc ('k') | ios/chrome/today_extension/today_metrics_logger.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698