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

Unified Diff: chrome/common/metrics/metrics_log_manager.h

Issue 9232071: Upload UMA data using protocol buffers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/metrics/metrics_log_base_unittest.cc ('k') | chrome/common/metrics/metrics_log_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/metrics/metrics_log_manager.h
diff --git a/chrome/common/metrics/metrics_log_manager.h b/chrome/common/metrics/metrics_log_manager.h
index 3eb04f00d755047be6eff068b3e6685ec612866f..9ae20ad286c3b47e2643654f4df26594c7f730d2 100644
--- a/chrome/common/metrics/metrics_log_manager.h
+++ b/chrome/common/metrics/metrics_log_manager.h
@@ -22,6 +22,17 @@ class MetricsLogManager {
MetricsLogManager();
~MetricsLogManager();
+ // Stores both XML and protocol buffer serializations for a log.
+ struct SerializedLog {
+ public:
+ // Exposed to reduce code churn as we transition from the XML pipeline to
+ // the protocol buffer pipeline.
+ bool empty() const;
+
+ std::string xml;
+ std::string proto;
+ };
+
// Takes ownership of |log|, and makes it the current_log.
// This should only be called if there is not a current log.
void BeginLoggingWithLog(MetricsLogBase* log);
@@ -36,13 +47,25 @@ class MetricsLogManager {
// Note that this returns true even if compressing the log text failed.
bool has_staged_log() const;
- // The compressed text of the staged log. Empty if there is no staged log,
- // or if compression of the staged log failed.
- const std::string& staged_log_text() { return compressed_staged_log_text_; }
+ // Returns true if there is a protobuf log that needs to be uploaded.
+ // In the case that an XML upload needs to be re-issued due to a previous
+ // failure, |has_staged_log()| will return true while this returns false.
+ bool has_staged_log_proto() const;
- // Discards the staged log.
+ // The text of the staged log, in compressed XML or protobuf format. Empty if
+ // there is no staged log, or if compression of the staged log failed.
+ const SerializedLog& staged_log_text() const {
+ return staged_log_text_;
+ }
+
+ // Discards the staged log (both the XML and the protobuf data).
void DiscardStagedLog();
+ // Discards the protobuf data in the staged log.
+ // This is useful to prevent needlessly re-issuing successful protobuf uploads
+ // due to XML upload failures.
+ void DiscardStagedLogProto();
+
// Closes and discards |current_log|.
void DiscardCurrentLog();
@@ -91,13 +114,13 @@ class MetricsLogManager {
// Serializes |logs| to persistent storage, replacing any previously
// serialized logs of the same type.
- virtual void SerializeLogs(const std::vector<std::string>& logs,
+ virtual void SerializeLogs(const std::vector<SerializedLog>& logs,
LogType log_type) = 0;
// Populates |logs| with logs of type |log_type| deserialized from
// persistent storage.
virtual void DeserializeLogs(LogType log_type,
- std::vector<std::string>* logs) = 0;
+ std::vector<SerializedLog>* logs) = 0;
};
// Sets the serializer to use for persisting and loading logs; takes ownership
@@ -115,8 +138,8 @@ class MetricsLogManager {
void LoadPersistedUnsentLogs();
private:
- // Compresses staged_log_ and stores the result in
- // compressed_staged_log_text_.
+ // Compresses |staged_log_| and stores the result in
+ // |compressed_staged_xml_log_text_|.
void CompressStagedLog();
// Compresses the text in |input| using bzip2, store the result in |output|.
@@ -130,21 +153,25 @@ class MetricsLogManager {
// The log that we are currently transmiting, or about to try to transmit.
// Note that when using StageNextStoredLogForUpload, this can be NULL while
- // compressed_staged_log_text_ is non-NULL.
+ // |compressed_staged_xml_log_text_| is non-NULL.
scoped_ptr<MetricsLogBase> staged_log_;
// Helper class to handle serialization/deserialization of logs for persistent
// storage. May be NULL.
scoped_ptr<LogSerializer> log_serializer_;
- // The compressed text of the staged log, ready for upload to the server.
- std::string compressed_staged_log_text_;
+ // The text representations of the staged log, ready for upload to the server.
+ // The first item in the pair is the compressed XML representation; the second
+ // is the protobuf representation.
+ SerializedLog staged_log_text_;
// Logs from a previous session that have not yet been sent.
+ // The first item in each pair is the XML representation; the second item is
+ // the protobuf representation.
// Note that the vector has the oldest logs listed first (early in the
// vector), and we'll discard old logs if we have gathered too many logs.
- std::vector<std::string> unsent_initial_logs_;
- std::vector<std::string> unsent_ongoing_logs_;
+ std::vector<SerializedLog> unsent_initial_logs_;
+ std::vector<SerializedLog> unsent_ongoing_logs_;
size_t max_ongoing_log_store_size_;
« no previous file with comments | « chrome/common/metrics/metrics_log_base_unittest.cc ('k') | chrome/common/metrics/metrics_log_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698