Chromium Code Reviews| Index: components/metrics/persisted_logs.cc |
| diff --git a/components/metrics/persisted_logs.cc b/components/metrics/persisted_logs.cc |
| index 17d6aa7dfd53754b9895f216bda9a5e7ad335fbf..825764ca28ef1b4687712f44366a59e9bb91ec1c 100644 |
| --- a/components/metrics/persisted_logs.cc |
| +++ b/components/metrics/persisted_logs.cc |
| @@ -86,7 +86,7 @@ PersistedLogs::PersistedLogs(PrefService* local_state, |
| old_pref_name_(old_pref_name), |
| min_log_count_(min_log_count), |
| min_log_bytes_(min_log_bytes), |
| - max_log_size_(max_log_size), |
| + max_log_size_(max_log_size ? max_log_size : static_cast<size_t>(-1)), |
|
Alexei Svitkine (slow)
2014/07/15 18:52:59
Can you use SIZE_MAX instead of casting -1 to a si
Steven Holte
2014/07/15 20:23:03
Done.
|
| last_provisional_store_index_(-1) { |
| DCHECK(local_state_); |
| // One of the limit arguments must be non-zero. |
| @@ -95,22 +95,7 @@ PersistedLogs::PersistedLogs(PrefService* local_state, |
| PersistedLogs::~PersistedLogs() {} |
| -void PersistedLogs::SerializeLogs() { |
| - // Remove any logs that are over the serialization size limit. |
| - if (max_log_size_) { |
| - for (std::vector<LogHashPair>::iterator it = list_.begin(); |
| - it != list_.end();) { |
| - size_t log_size = it->compressed_log_data.length(); |
| - if (log_size > max_log_size_) { |
| - UMA_HISTOGRAM_COUNTS("UMA.Large Accumulated Log Not Persisted", |
| - static_cast<int>(log_size)); |
| - it = list_.erase(it); |
| - } else { |
| - ++it; |
| - } |
| - } |
| - } |
| - |
| +void PersistedLogs::SerializeLogs() const { |
| ListPrefUpdate update(local_state_, pref_name_); |
| WriteLogsToPrefList(update.Get()); |
| @@ -169,33 +154,39 @@ void PersistedLogs::DiscardLastProvisionalStore() { |
| last_provisional_store_index_ = -1; |
| } |
| -void PersistedLogs::WriteLogsToPrefList(base::ListValue* list_value) { |
| +void PersistedLogs::WriteLogsToPrefList(base::ListValue* list_value) const { |
| list_value->Clear(); |
| - // Leave the list completely empty if there are no storable values. |
| - if (list_.empty()) |
| - return; |
| - size_t start = 0; |
| - // If there are too many logs, keep the most recent logs up to the length |
| - // limit, and at least to the minimum number of bytes. |
| - if (list_.size() > min_log_count_) { |
| - start = list_.size(); |
| - size_t bytes_used = 0; |
| - std::vector<LogHashPair>::const_reverse_iterator end = list_.rend(); |
| - for (std::vector<LogHashPair>::const_reverse_iterator it = list_.rbegin(); |
| - it != end; ++it) { |
| - const size_t log_size = it->compressed_log_data.length(); |
| - if (bytes_used >= min_log_bytes_ && |
| - (list_.size() - start) >= min_log_count_) { |
| - break; |
| - } |
| + // Keep the most recent logs which are smaller than max_log_size_. |
|
Alexei Svitkine (slow)
2014/07/15 18:52:59
Nit: Surround variable names in |'s.
Steven Holte
2014/07/15 20:23:03
Done.
|
| + // We keep at least min_log_bytes_ and min_log_count_ of logs before |
| + // discarding older logs. |
| + size_t start = list_.size(); |
| + size_t saved_log_count = 0; |
| + size_t bytes_used = 0; |
| + for (; start > 0; --start) { |
| + size_t log_size = list_[start-1].compressed_log_data.length(); |
|
Alexei Svitkine (slow)
2014/07/15 18:52:59
Nit: spaces around the minus.
Steven Holte
2014/07/15 20:23:03
Done.
|
| + if (bytes_used >= min_log_bytes_ && |
| + saved_log_count >= min_log_count_) { |
| + break; |
| + } |
| + // Oversized logs won't be persisted, so don't count them. |
|
Alexei Svitkine (slow)
2014/07/15 18:52:59
I don't think the piece of code is needed, since t
Steven Holte
2014/07/15 20:23:03
The second loop iterates in the reverse direction
Steven Holte
2014/07/15 20:25:47
Also, I've now removed the early return below, sin
|
| + if (log_size <= max_log_size_) { |
| bytes_used += log_size; |
| - --start; |
| + ++saved_log_count; |
| } |
| } |
| - DCHECK_LT(start, list_.size()); |
| + |
| + // Leave the list completely empty if there are no storable values. |
| + if (saved_log_count == 0) |
| + return; |
| for (size_t i = start; i < list_.size(); ++i) { |
| + size_t log_size = list_[i].compressed_log_data.length(); |
| + if (log_size > max_log_size_) { |
| + UMA_HISTOGRAM_COUNTS("UMA.Large Accumulated Log Not Persisted", |
| + static_cast<int>(log_size)); |
| + continue; |
| + } |
| AppendBase64String(list_[i].compressed_log_data, list_value); |
| AppendBase64String(list_[i].hash, list_value); |
| } |