| OLD | NEW |
| 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 // | 121 // |
| 122 // | 122 // |
| 123 //------------------------------------------------------------------------------ | 123 //------------------------------------------------------------------------------ |
| 124 | 124 |
| 125 #include "components/metrics/metrics_service.h" | 125 #include "components/metrics/metrics_service.h" |
| 126 | 126 |
| 127 #include <algorithm> | 127 #include <algorithm> |
| 128 | 128 |
| 129 #include "base/bind.h" | 129 #include "base/bind.h" |
| 130 #include "base/callback.h" | 130 #include "base/callback.h" |
| 131 #include "base/location.h" |
| 131 #include "base/metrics/histogram.h" | 132 #include "base/metrics/histogram.h" |
| 132 #include "base/metrics/histogram_base.h" | 133 #include "base/metrics/histogram_base.h" |
| 133 #include "base/metrics/histogram_samples.h" | 134 #include "base/metrics/histogram_samples.h" |
| 134 #include "base/metrics/sparse_histogram.h" | 135 #include "base/metrics/sparse_histogram.h" |
| 135 #include "base/metrics/statistics_recorder.h" | 136 #include "base/metrics/statistics_recorder.h" |
| 136 #include "base/prefs/pref_registry_simple.h" | 137 #include "base/prefs/pref_registry_simple.h" |
| 137 #include "base/prefs/pref_service.h" | 138 #include "base/prefs/pref_service.h" |
| 139 #include "base/single_thread_task_runner.h" |
| 138 #include "base/strings/string_number_conversions.h" | 140 #include "base/strings/string_number_conversions.h" |
| 139 #include "base/strings/utf_string_conversions.h" | 141 #include "base/strings/utf_string_conversions.h" |
| 142 #include "base/thread_task_runner_handle.h" |
| 140 #include "base/threading/platform_thread.h" | 143 #include "base/threading/platform_thread.h" |
| 141 #include "base/threading/thread.h" | 144 #include "base/threading/thread.h" |
| 142 #include "base/threading/thread_restrictions.h" | 145 #include "base/threading/thread_restrictions.h" |
| 143 #include "base/time/time.h" | 146 #include "base/time/time.h" |
| 144 #include "base/tracked_objects.h" | 147 #include "base/tracked_objects.h" |
| 145 #include "base/values.h" | 148 #include "base/values.h" |
| 146 #include "components/metrics/metrics_log.h" | 149 #include "components/metrics/metrics_log.h" |
| 147 #include "components/metrics/metrics_log_manager.h" | 150 #include "components/metrics/metrics_log_manager.h" |
| 148 #include "components/metrics/metrics_log_uploader.h" | 151 #include "components/metrics/metrics_log_uploader.h" |
| 149 #include "components/metrics/metrics_pref_names.h" | 152 #include "components/metrics/metrics_pref_names.h" |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 for (size_t i = 0; i < metrics_providers_.size(); ++i) | 673 for (size_t i = 0; i < metrics_providers_.size(); ++i) |
| 671 metrics_providers_[i]->OnDidCreateMetricsLog(); | 674 metrics_providers_[i]->OnDidCreateMetricsLog(); |
| 672 } | 675 } |
| 673 | 676 |
| 674 //------------------------------------------------------------------------------ | 677 //------------------------------------------------------------------------------ |
| 675 // State save methods | 678 // State save methods |
| 676 | 679 |
| 677 void MetricsService::ScheduleNextStateSave() { | 680 void MetricsService::ScheduleNextStateSave() { |
| 678 state_saver_factory_.InvalidateWeakPtrs(); | 681 state_saver_factory_.InvalidateWeakPtrs(); |
| 679 | 682 |
| 680 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, | 683 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 681 base::Bind(&MetricsService::SaveLocalState, | 684 FROM_HERE, base::Bind(&MetricsService::SaveLocalState, |
| 682 state_saver_factory_.GetWeakPtr()), | 685 state_saver_factory_.GetWeakPtr()), |
| 683 base::TimeDelta::FromMinutes(kSaveStateIntervalMinutes)); | 686 base::TimeDelta::FromMinutes(kSaveStateIntervalMinutes)); |
| 684 } | 687 } |
| 685 | 688 |
| 686 void MetricsService::SaveLocalState() { | 689 void MetricsService::SaveLocalState() { |
| 687 RecordCurrentState(local_state_); | 690 RecordCurrentState(local_state_); |
| 688 | 691 |
| 689 // TODO(jar):110021 Does this run down the batteries???? | 692 // TODO(jar):110021 Does this run down the batteries???? |
| 690 ScheduleNextStateSave(); | 693 ScheduleNextStateSave(); |
| 691 } | 694 } |
| 692 | 695 |
| 693 | 696 |
| 694 //------------------------------------------------------------------------------ | 697 //------------------------------------------------------------------------------ |
| 695 // Recording control methods | 698 // Recording control methods |
| 696 | 699 |
| 697 void MetricsService::OpenNewLog() { | 700 void MetricsService::OpenNewLog() { |
| 698 DCHECK(!log_manager_.current_log()); | 701 DCHECK(!log_manager_.current_log()); |
| 699 | 702 |
| 700 log_manager_.BeginLoggingWithLog(CreateLog(MetricsLog::ONGOING_LOG)); | 703 log_manager_.BeginLoggingWithLog(CreateLog(MetricsLog::ONGOING_LOG)); |
| 701 NotifyOnDidCreateMetricsLog(); | 704 NotifyOnDidCreateMetricsLog(); |
| 702 if (state_ == INITIALIZED) { | 705 if (state_ == INITIALIZED) { |
| 703 // We only need to schedule that run once. | 706 // We only need to schedule that run once. |
| 704 state_ = INIT_TASK_SCHEDULED; | 707 state_ = INIT_TASK_SCHEDULED; |
| 705 | 708 |
| 706 base::MessageLoop::current()->PostDelayedTask( | 709 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 707 FROM_HERE, | 710 FROM_HERE, base::Bind(&MetricsService::StartGatheringMetrics, |
| 708 base::Bind(&MetricsService::StartGatheringMetrics, | 711 self_ptr_factory_.GetWeakPtr()), |
| 709 self_ptr_factory_.GetWeakPtr()), | |
| 710 base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); | 712 base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); |
| 711 } | 713 } |
| 712 } | 714 } |
| 713 | 715 |
| 714 void MetricsService::StartGatheringMetrics() { | 716 void MetricsService::StartGatheringMetrics() { |
| 715 client_->StartGatheringMetrics( | 717 client_->StartGatheringMetrics( |
| 716 base::Bind(&MetricsService::FinishedGatheringInitialMetrics, | 718 base::Bind(&MetricsService::FinishedGatheringInitialMetrics, |
| 717 self_ptr_factory_.GetWeakPtr())); | 719 self_ptr_factory_.GetWeakPtr())); |
| 718 } | 720 } |
| 719 | 721 |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 local_state_->SetBoolean(path, value); | 1123 local_state_->SetBoolean(path, value); |
| 1122 RecordCurrentState(local_state_); | 1124 RecordCurrentState(local_state_); |
| 1123 } | 1125 } |
| 1124 | 1126 |
| 1125 void MetricsService::RecordCurrentState(PrefService* pref) { | 1127 void MetricsService::RecordCurrentState(PrefService* pref) { |
| 1126 pref->SetInt64(prefs::kStabilityLastTimestampSec, | 1128 pref->SetInt64(prefs::kStabilityLastTimestampSec, |
| 1127 base::Time::Now().ToTimeT()); | 1129 base::Time::Now().ToTimeT()); |
| 1128 } | 1130 } |
| 1129 | 1131 |
| 1130 } // namespace metrics | 1132 } // namespace metrics |
| OLD | NEW |