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

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

Issue 318203004: Make MetricsService save compressed logs to local state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 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 | Annotate | Revision Log
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 #include "components/metrics/metrics_log_manager.h" 5 #include "components/metrics/metrics_log_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 25 matching lines...) Expand all
36 // is a long series of very small logs. 36 // is a long series of very small logs.
37 const size_t kStorageByteLimitPerLogType = 300000; 37 const size_t kStorageByteLimitPerLogType = 300000;
38 38
39 } // namespace 39 } // namespace
40 40
41 MetricsLogManager::MetricsLogManager(PrefService* local_state, 41 MetricsLogManager::MetricsLogManager(PrefService* local_state,
42 size_t max_ongoing_log_size) 42 size_t max_ongoing_log_size)
43 : unsent_logs_loaded_(false), 43 : unsent_logs_loaded_(false),
44 initial_log_queue_(local_state, 44 initial_log_queue_(local_state,
45 prefs::kMetricsInitialLogs, 45 prefs::kMetricsInitialLogs,
46 prefs::kMetricsInitialLogsOld,
46 kInitialLogsPersistLimit, 47 kInitialLogsPersistLimit,
47 kStorageByteLimitPerLogType, 48 kStorageByteLimitPerLogType,
48 0), 49 0),
49 ongoing_log_queue_(local_state, 50 ongoing_log_queue_(local_state,
50 prefs::kMetricsOngoingLogs, 51 prefs::kMetricsOngoingLogs,
52 prefs::kMetricsOngoingLogsOld,
51 kOngoingLogsPersistLimit, 53 kOngoingLogsPersistLimit,
52 kStorageByteLimitPerLogType, 54 kStorageByteLimitPerLogType,
53 max_ongoing_log_size) {} 55 max_ongoing_log_size) {}
54 56
55 MetricsLogManager::~MetricsLogManager() {} 57 MetricsLogManager::~MetricsLogManager() {}
56 58
57 void MetricsLogManager::BeginLoggingWithLog(scoped_ptr<MetricsLog> log) { 59 void MetricsLogManager::BeginLoggingWithLog(scoped_ptr<MetricsLog> log) {
58 DCHECK(!current_log_); 60 DCHECK(!current_log_);
59 current_log_ = log.Pass(); 61 current_log_ = log.Pass();
60 } 62 }
61 63
62 void MetricsLogManager::FinishCurrentLog() { 64 void MetricsLogManager::FinishCurrentLog() {
63 DCHECK(current_log_.get()); 65 DCHECK(current_log_.get());
64 current_log_->CloseLog(); 66 current_log_->CloseLog();
65 std::string log_text; 67 std::string log_data;
66 current_log_->GetEncodedLog(&log_text); 68 current_log_->GetEncodedLog(&log_data);
67 if (!log_text.empty()) 69 if (!log_data.empty())
68 StoreLog(&log_text, current_log_->log_type()); 70 StoreLog(log_data, current_log_->log_type());
69 current_log_.reset(); 71 current_log_.reset();
70 } 72 }
71 73
72 void MetricsLogManager::StageNextLogForUpload() { 74 void MetricsLogManager::StageNextLogForUpload() {
73 DCHECK(!has_staged_log()); 75 DCHECK(!has_staged_log());
74 if (!initial_log_queue_.empty()) 76 if (!initial_log_queue_.empty())
75 initial_log_queue_.StageLog(); 77 initial_log_queue_.StageLog();
76 else 78 else
77 ongoing_log_queue_.StageLog(); 79 ongoing_log_queue_.StageLog();
78 } 80 }
(...skipping 15 matching lines...) Expand all
94 void MetricsLogManager::PauseCurrentLog() { 96 void MetricsLogManager::PauseCurrentLog() {
95 DCHECK(!paused_log_.get()); 97 DCHECK(!paused_log_.get());
96 paused_log_.reset(current_log_.release()); 98 paused_log_.reset(current_log_.release());
97 } 99 }
98 100
99 void MetricsLogManager::ResumePausedLog() { 101 void MetricsLogManager::ResumePausedLog() {
100 DCHECK(!current_log_.get()); 102 DCHECK(!current_log_.get());
101 current_log_.reset(paused_log_.release()); 103 current_log_.reset(paused_log_.release());
102 } 104 }
103 105
104 void MetricsLogManager::StoreLog(std::string* log, 106 void MetricsLogManager::StoreLog(const std::string& log_data,
105 MetricsLog::LogType log_type) { 107 MetricsLog::LogType log_type) {
106 switch (log_type) { 108 switch (log_type) {
107 case MetricsLog::INITIAL_STABILITY_LOG: 109 case MetricsLog::INITIAL_STABILITY_LOG:
108 initial_log_queue_.StoreLog(log); 110 initial_log_queue_.StoreLog(log_data);
109 break; 111 break;
110 case MetricsLog::ONGOING_LOG: 112 case MetricsLog::ONGOING_LOG:
111 ongoing_log_queue_.StoreLog(log); 113 ongoing_log_queue_.StoreLog(log_data);
112 break; 114 break;
113 } 115 }
114 } 116 }
115 117
116 void MetricsLogManager::StoreStagedLogAsUnsent( 118 void MetricsLogManager::StoreStagedLogAsUnsent(
117 metrics::PersistedLogs::StoreType store_type) { 119 PersistedLogs::StoreType store_type) {
118 DCHECK(has_staged_log()); 120 DCHECK(has_staged_log());
119 if (initial_log_queue_.has_staged_log()) 121 if (initial_log_queue_.has_staged_log())
120 initial_log_queue_.StoreStagedLogAsUnsent(store_type); 122 initial_log_queue_.StoreStagedLogAsUnsent(store_type);
121 else 123 else
122 ongoing_log_queue_.StoreStagedLogAsUnsent(store_type); 124 ongoing_log_queue_.StoreStagedLogAsUnsent(store_type);
123 } 125 }
124 126
125 void MetricsLogManager::DiscardLastProvisionalStore() { 127 void MetricsLogManager::DiscardLastProvisionalStore() {
126 // We have at most one provisional store, (since at most one log is being 128 // We have at most one provisional store, (since at most one log is being
127 // uploaded at a time), so at least one of these will be a no-op. 129 // uploaded at a time), so at least one of these will be a no-op.
(...skipping 15 matching lines...) Expand all
143 void MetricsLogManager::LoadPersistedUnsentLogs() { 145 void MetricsLogManager::LoadPersistedUnsentLogs() {
144 base::ElapsedTimer timer; 146 base::ElapsedTimer timer;
145 initial_log_queue_.DeserializeLogs(); 147 initial_log_queue_.DeserializeLogs();
146 ongoing_log_queue_.DeserializeLogs(); 148 ongoing_log_queue_.DeserializeLogs();
147 UMA_HISTOGRAM_TIMES("UMA.LoadLogsTime", timer.Elapsed()); 149 UMA_HISTOGRAM_TIMES("UMA.LoadLogsTime", timer.Elapsed());
148 150
149 unsent_logs_loaded_ = true; 151 unsent_logs_loaded_ = true;
150 } 152 }
151 153
152 } // namespace metrics 154 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/metrics_log_manager.h ('k') | components/metrics/metrics_log_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698