Index: components/metrics/metrics_log.h |
=================================================================== |
--- components/metrics/metrics_log.h (revision 275424) |
+++ components/metrics/metrics_log.h (working copy) |
@@ -12,13 +12,15 @@ |
#include <vector> |
#include "base/basictypes.h" |
-#include "components/metrics/metrics_log_base.h" |
+#include "base/time/time.h" |
+#include "components/metrics/proto/chrome_user_metrics_extension.pb.h" |
class PrefRegistrySimple; |
class PrefService; |
namespace base { |
class DictionaryValue; |
+class HistogramSamples; |
} |
namespace content { |
@@ -38,8 +40,13 @@ |
struct ActiveGroupId; |
} |
-class MetricsLog : public metrics::MetricsLogBase { |
+class MetricsLog { |
public: |
+ enum LogType { |
+ INITIAL_STABILITY_LOG, // The initial log containing stability stats. |
+ ONGOING_LOG, // Subsequent logs in a session. |
+ }; |
+ |
// Creates a new metrics log of the specified type. |
// |client_id| is the identifier for this profile on this installation |
// |session_id| is an integer that's incremented on each application launch |
@@ -58,6 +65,28 @@ |
// Registers local state prefs used by this class. |
static void RegisterPrefs(PrefRegistrySimple* registry); |
+ // Computes the MD5 hash of the given string, and returns the first 8 bytes of |
+ // the hash. |
+ static uint64 Hash(const std::string& value); |
+ |
+ // Get the GMT buildtime for the current binary, expressed in seconds since |
+ // January 1, 1970 GMT. |
+ // The value is used to identify when a new build is run, so that previous |
+ // reliability stats, from other builds, can be abandoned. |
+ static int64 GetBuildTime(); |
+ |
+ // Convenience function to return the current time at a resolution in seconds. |
+ // This wraps base::TimeTicks, and hence provides an abstract time that is |
+ // always incrementing for use in measuring time durations. |
+ static int64 GetCurrentTime(); |
+ |
+ // Records a user-initiated action. |
+ void RecordUserAction(const std::string& key); |
+ |
+ // Record any changes in a given histogram for transmission. |
+ void RecordHistogramDelta(const std::string& histogram_name, |
+ const base::HistogramSamples& snapshot); |
+ |
// Records the current operating environment, including metrics provided by |
// the specified set of |metrics_providers|. Takes the list of installed |
// plugins, Google Update statistics, and synthetic trial IDs as parameters |
@@ -92,21 +121,39 @@ |
void RecordGeneralMetrics( |
const std::vector<metrics::MetricsProvider*>& metrics_providers); |
+ // Stop writing to this record and generate the encoded representation. |
+ // None of the Record* methods can be called after this is called. |
+ void CloseLog(); |
+ |
+ // Fills |encoded_log| with the serialized protobuf representation of the |
+ // record. Must only be called after CloseLog() has been called. |
+ void GetEncodedLog(std::string* encoded_log); |
+ |
const base::TimeTicks& creation_time() const { |
return creation_time_; |
} |
+ int num_events() const { |
+ return uma_proto_.omnibox_event_size() + |
+ uma_proto_.user_action_event_size(); |
+ } |
+ |
+ LogType log_type() const { return log_type_; } |
+ |
protected: |
- // Exposed for the sake of mocking in test code. |
+ // Exposed for the sake of mocking/accessing in test code. |
// Fills |field_trial_ids| with the list of initialized field trials name and |
// group ids. |
virtual void GetFieldTrialIds( |
std::vector<variations::ActiveGroupId>* field_trial_ids) const; |
+ metrics::ChromeUserMetricsExtension* uma_proto() { return &uma_proto_; } |
+ const metrics::ChromeUserMetricsExtension* uma_proto() const { |
+ return &uma_proto_; |
+ } |
+ |
private: |
- FRIEND_TEST_ALL_PREFIXES(MetricsLogTest, ChromeOSStabilityData); |
- |
// Returns true if the environment has already been filled in by a call to |
// RecordEnvironment() or LoadSavedEnvironmentFromPrefs(). |
bool HasEnvironment() const; |
@@ -126,6 +173,16 @@ |
base::TimeDelta incremental_uptime, |
base::TimeDelta uptime); |
+ // closed_ is true when record has been packed up for sending, and should |
+ // no longer be written to. It is only used for sanity checking. |
+ bool closed_; |
+ |
+ // The type of the log, i.e. initial or ongoing. |
+ const LogType log_type_; |
+ |
+ // Stores the protocol buffer representation for this log. |
+ metrics::ChromeUserMetricsExtension uma_proto_; |
+ |
// Used to interact with the embedder. Weak pointer; must outlive |this| |
// instance. |
metrics::MetricsServiceClient* const client_; |