| 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 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 5 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| 6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <memory> |
| 10 #include <string> | 11 #include <string> |
| 11 #include <vector> | 12 #include <vector> |
| 12 | 13 |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/macros.h" | 15 #include "base/macros.h" |
| 15 #include "base/values.h" | 16 #include "base/values.h" |
| 16 | 17 |
| 17 class PrefService; | 18 class PrefService; |
| 18 | 19 |
| 19 namespace metrics { | 20 namespace metrics { |
| 20 | 21 |
| 22 class PersistedLogsMetrics; |
| 23 |
| 21 // Maintains a list of unsent logs that are written and restored from disk. | 24 // Maintains a list of unsent logs that are written and restored from disk. |
| 22 class PersistedLogs { | 25 class PersistedLogs { |
| 23 public: | 26 public: |
| 24 // Used to produce a histogram that keeps track of the status of recalling | 27 // Used to produce a histogram that keeps track of the status of recalling |
| 25 // persisted per logs. | 28 // persisted per logs. |
| 26 enum LogReadStatus { | 29 enum LogReadStatus { |
| 27 RECALL_SUCCESS, // We were able to correctly recall a persisted log. | 30 RECALL_SUCCESS, // We were able to correctly recall a persisted log. |
| 28 LIST_EMPTY, // Attempting to recall from an empty list. | 31 LIST_EMPTY, // Attempting to recall from an empty list. |
| 29 LIST_SIZE_MISSING, // Failed to recover list size using GetAsInteger(). | 32 LIST_SIZE_MISSING, // Failed to recover list size using GetAsInteger(). |
| 30 LIST_SIZE_TOO_SMALL, // Too few elements in the list (less than 3). | 33 LIST_SIZE_TOO_SMALL, // Too few elements in the list (less than 3). |
| (...skipping 11 matching lines...) Expand all Loading... |
| 42 // Constructs a PersistedLogs that stores data in |local_state| under the | 45 // Constructs a PersistedLogs that stores data in |local_state| under the |
| 43 // preference |pref_name|. | 46 // preference |pref_name|. |
| 44 // Calling code is responsible for ensuring that the lifetime of |local_state| | 47 // Calling code is responsible for ensuring that the lifetime of |local_state| |
| 45 // is longer than the lifetime of PersistedLogs. | 48 // is longer than the lifetime of PersistedLogs. |
| 46 // | 49 // |
| 47 // When saving logs to disk, stores either the first |min_log_count| logs, or | 50 // When saving logs to disk, stores either the first |min_log_count| logs, or |
| 48 // at least |min_log_bytes| bytes of logs, whichever is greater. | 51 // at least |min_log_bytes| bytes of logs, whichever is greater. |
| 49 // | 52 // |
| 50 // If the optional |max_log_size| parameter is non-zero, all logs larger than | 53 // If the optional |max_log_size| parameter is non-zero, all logs larger than |
| 51 // that limit will be skipped when writing to disk. | 54 // that limit will be skipped when writing to disk. |
| 52 PersistedLogs(PrefService* local_state, | 55 PersistedLogs(std::unique_ptr<PersistedLogsMetrics> metrics, |
| 56 PrefService* local_state, |
| 53 const char* pref_name, | 57 const char* pref_name, |
| 54 const char* outdated_pref_name, | 58 const char* outdated_pref_name, |
| 55 size_t min_log_count, | 59 size_t min_log_count, |
| 56 size_t min_log_bytes, | 60 size_t min_log_bytes, |
| 57 size_t max_log_size); | 61 size_t max_log_size); |
| 58 ~PersistedLogs(); | 62 ~PersistedLogs(); |
| 59 | 63 |
| 60 // Write list to storage. | 64 // Write list to storage. |
| 61 void SerializeLogs() const; | 65 void SerializeLogs() const; |
| 62 | 66 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 private: | 107 private: |
| 104 // Writes the list to the ListValue. | 108 // Writes the list to the ListValue. |
| 105 void WriteLogsToPrefList(base::ListValue* list) const; | 109 void WriteLogsToPrefList(base::ListValue* list) const; |
| 106 | 110 |
| 107 // Reads the list from the ListValue. | 111 // Reads the list from the ListValue. |
| 108 LogReadStatus ReadLogsFromPrefList(const base::ListValue& list); | 112 LogReadStatus ReadLogsFromPrefList(const base::ListValue& list); |
| 109 | 113 |
| 110 // Reads the list from the ListValue in the old Log-hash pair format. | 114 // Reads the list from the ListValue in the old Log-hash pair format. |
| 111 LogReadStatus ReadLogsFromOldFormatPrefList(const base::ListValue& list); | 115 LogReadStatus ReadLogsFromOldFormatPrefList(const base::ListValue& list); |
| 112 | 116 |
| 117 // An object for recording UMA metrics. |
| 118 std::unique_ptr<PersistedLogsMetrics> metrics_; |
| 119 |
| 113 // A weak pointer to the PrefService object to read and write the preference | 120 // A weak pointer to the PrefService object to read and write the preference |
| 114 // from. Calling code should ensure this object continues to exist for the | 121 // from. Calling code should ensure this object continues to exist for the |
| 115 // lifetime of the PersistedLogs object. | 122 // lifetime of the PersistedLogs object. |
| 116 PrefService* local_state_; | 123 PrefService* local_state_; |
| 117 | 124 |
| 118 // The name of the preference to serialize logs to/from. | 125 // The name of the preference to serialize logs to/from. |
| 119 const char* pref_name_; | 126 const char* pref_name_; |
| 120 | 127 |
| 121 // The name of the preference to serialize logs to/from which may contain log | 128 // The name of the preference to serialize logs to/from which may contain log |
| 122 // in the old formatting. | 129 // in the old formatting. |
| 123 const char* outdated_pref_name_; | 130 const char* outdated_pref_name_; |
| 124 | 131 |
| 125 // We will keep at least this |min_log_count_| logs or |min_log_bytes_| bytes | 132 // We will keep at least this |min_log_count_| logs or |min_log_bytes_| bytes |
| 126 // of logs, whichever is greater, when writing to disk. These apply after | 133 // of logs, whichever is greater, when writing to disk. These apply after |
| 127 // skipping logs greater than |max_log_size_|. | 134 // skipping logs greater than |max_log_size_|. |
| 128 const size_t min_log_count_; | 135 const size_t min_log_count_; |
| 129 const size_t min_log_bytes_; | 136 const size_t min_log_bytes_; |
| 130 | 137 |
| 131 // Logs greater than this size will not be written to disk. | 138 // Logs greater than this size will not be written to disk. |
| 132 const size_t max_log_size_; | 139 const size_t max_log_size_; |
| 133 | 140 |
| 134 struct LogInfo { | 141 struct LogInfo { |
| 135 // Initializes the members based on uncompressed |log_data| and | 142 // Initializes the members based on uncompressed |log_data| and |
| 136 // |log_timestamp|. | 143 // |log_timestamp|. |
| 137 void Init(const std::string& log_data, const std::string& log_timestamp); | 144 // |metrics| is the parent's metrics_ object, and should not be held. |
| 145 void Init(PersistedLogsMetrics* metrics, |
| 146 const std::string& log_data, |
| 147 const std::string& log_timestamp); |
| 138 | 148 |
| 139 // Compressed log data - a serialized protobuf that's been gzipped. | 149 // Compressed log data - a serialized protobuf that's been gzipped. |
| 140 std::string compressed_log_data; | 150 std::string compressed_log_data; |
| 141 | 151 |
| 142 // The SHA1 hash of log, stored to catch errors from memory corruption. | 152 // The SHA1 hash of log, stored to catch errors from memory corruption. |
| 143 std::string hash; | 153 std::string hash; |
| 144 | 154 |
| 145 // The timestamp of when the log was created as a time_t value. | 155 // The timestamp of when the log was created as a time_t value. |
| 146 std::string timestamp; | 156 std::string timestamp; |
| 147 }; | 157 }; |
| 148 // A list of all of the stored logs, stored with SHA1 hashes to check for | 158 // A list of all of the stored logs, stored with SHA1 hashes to check for |
| 149 // corruption while they are stored in memory. | 159 // corruption while they are stored in memory. |
| 150 std::vector<LogInfo> list_; | 160 std::vector<LogInfo> list_; |
| 151 | 161 |
| 152 // The index and type of the log staged for upload. If nothing has been | 162 // The index and type of the log staged for upload. If nothing has been |
| 153 // staged, the index will be -1. | 163 // staged, the index will be -1. |
| 154 int staged_log_index_; | 164 int staged_log_index_; |
| 155 | 165 |
| 156 DISALLOW_COPY_AND_ASSIGN(PersistedLogs); | 166 DISALLOW_COPY_AND_ASSIGN(PersistedLogs); |
| 157 }; | 167 }; |
| 158 | 168 |
| 159 } // namespace metrics | 169 } // namespace metrics |
| 160 | 170 |
| 161 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_ | 171 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_ |
| OLD | NEW |