| 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 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 RecordCurrentHistograms(); | 766 RecordCurrentHistograms(); |
| 767 current_log->RecordGeneralMetrics(metrics_providers_.get()); | 767 current_log->RecordGeneralMetrics(metrics_providers_.get()); |
| 768 | 768 |
| 769 log_manager_.FinishCurrentLog(); | 769 log_manager_.FinishCurrentLog(); |
| 770 } | 770 } |
| 771 | 771 |
| 772 void MetricsService::PushPendingLogsToPersistentStorage() { | 772 void MetricsService::PushPendingLogsToPersistentStorage() { |
| 773 if (state_ < SENDING_INITIAL_STABILITY_LOG) | 773 if (state_ < SENDING_INITIAL_STABILITY_LOG) |
| 774 return; // We didn't and still don't have time to get plugin list etc. | 774 return; // We didn't and still don't have time to get plugin list etc. |
| 775 | 775 |
| 776 if (log_manager_.has_staged_log()) { | |
| 777 // We may race here, and send second copy of the log later. | |
| 778 metrics::PersistedLogs::StoreType store_type; | |
| 779 if (log_upload_in_progress_) | |
| 780 store_type = metrics::PersistedLogs::PROVISIONAL_STORE; | |
| 781 else | |
| 782 store_type = metrics::PersistedLogs::NORMAL_STORE; | |
| 783 log_manager_.StoreStagedLogAsUnsent(store_type); | |
| 784 } | |
| 785 DCHECK(!log_manager_.has_staged_log()); | |
| 786 CloseCurrentLog(); | 776 CloseCurrentLog(); |
| 787 log_manager_.PersistUnsentLogs(); | 777 log_manager_.PersistUnsentLogs(); |
| 788 | 778 |
| 789 // If there was a staged and/or current log, then there is now at least one | 779 // If there was a staged and/or current log, then there is now at least one |
| 790 // log waiting to be uploaded. | 780 // log waiting to be uploaded. |
| 791 if (log_manager_.has_unsent_logs()) | 781 if (log_manager_.has_unsent_logs()) |
| 792 state_ = SENDING_OLD_LOGS; | 782 state_ = SENDING_OLD_LOGS; |
| 793 } | 783 } |
| 794 | 784 |
| 795 //------------------------------------------------------------------------------ | 785 //------------------------------------------------------------------------------ |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 | 1018 |
| 1029 void MetricsService::OnLogUploadComplete(int response_code) { | 1019 void MetricsService::OnLogUploadComplete(int response_code) { |
| 1030 DCHECK(log_upload_in_progress_); | 1020 DCHECK(log_upload_in_progress_); |
| 1031 log_upload_in_progress_ = false; | 1021 log_upload_in_progress_ = false; |
| 1032 | 1022 |
| 1033 // Log a histogram to track response success vs. failure rates. | 1023 // Log a histogram to track response success vs. failure rates. |
| 1034 UMA_HISTOGRAM_ENUMERATION("UMA.UploadResponseStatus.Protobuf", | 1024 UMA_HISTOGRAM_ENUMERATION("UMA.UploadResponseStatus.Protobuf", |
| 1035 ResponseCodeToStatus(response_code), | 1025 ResponseCodeToStatus(response_code), |
| 1036 NUM_RESPONSE_STATUSES); | 1026 NUM_RESPONSE_STATUSES); |
| 1037 | 1027 |
| 1038 // If the upload was provisionally stored, drop it now that the upload is | |
| 1039 // known to have gone through. | |
| 1040 log_manager_.DiscardLastProvisionalStore(); | |
| 1041 | |
| 1042 bool upload_succeeded = response_code == 200; | 1028 bool upload_succeeded = response_code == 200; |
| 1043 | 1029 |
| 1044 // Provide boolean for error recovery (allow us to ignore response_code). | 1030 // Provide boolean for error recovery (allow us to ignore response_code). |
| 1045 bool discard_log = false; | 1031 bool discard_log = false; |
| 1046 const size_t log_size = log_manager_.staged_log().length(); | 1032 const size_t log_size = log_manager_.staged_log().length(); |
| 1047 if (!upload_succeeded && log_size > kUploadLogAvoidRetransmitSize) { | 1033 if (!upload_succeeded && log_size > kUploadLogAvoidRetransmitSize) { |
| 1048 UMA_HISTOGRAM_COUNTS("UMA.Large Rejected Log was Discarded", | 1034 UMA_HISTOGRAM_COUNTS("UMA.Large Rejected Log was Discarded", |
| 1049 static_cast<int>(log_size)); | 1035 static_cast<int>(log_size)); |
| 1050 discard_log = true; | 1036 discard_log = true; |
| 1051 } else if (response_code == 400) { | 1037 } else if (response_code == 400) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 RecordCurrentState(local_state_); | 1191 RecordCurrentState(local_state_); |
| 1206 } | 1192 } |
| 1207 | 1193 |
| 1208 void MetricsService::RecordCurrentState(PrefService* pref) { | 1194 void MetricsService::RecordCurrentState(PrefService* pref) { |
| 1209 pref->SetInt64(metrics::prefs::kStabilityLastTimestampSec, | 1195 pref->SetInt64(metrics::prefs::kStabilityLastTimestampSec, |
| 1210 Time::Now().ToTimeT()); | 1196 Time::Now().ToTimeT()); |
| 1211 | 1197 |
| 1212 for (size_t i = 0; i < metrics_providers_.size(); ++i) | 1198 for (size_t i = 0; i < metrics_providers_.size(); ++i) |
| 1213 metrics_providers_[i]->RecordCurrentState(); | 1199 metrics_providers_[i]->RecordCurrentState(); |
| 1214 } | 1200 } |
| OLD | NEW |