| Index: chrome/common/metrics_helpers.h
|
| ===================================================================
|
| --- chrome/common/metrics_helpers.h (revision 0)
|
| +++ chrome/common/metrics_helpers.h (revision 0)
|
| @@ -0,0 +1,213 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// This file defines a set of user experience metrics data recorded by
|
| +// the MetricsService. This is the unit of data that is sent to the server.
|
| +
|
| +#ifndef CHROME_COMMON_METRICS_HELPERS_H_
|
| +#define CHROME_COMMON_METRICS_HELPERS_H_
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/histogram.h"
|
| +#include "base/time.h"
|
| +#include "chrome/common/page_transition_types.h"
|
| +
|
| +#include "libxml/xmlwriter.h"
|
| +
|
| +class GURL;
|
| +class MetricsLog;
|
| +
|
| +// This class provides base functionality for logging metrics data.
|
| +class MetricsLogBase {
|
| + public:
|
| + // Creates a new metrics log
|
| + // client_id is the identifier for this profile on this installation
|
| + // session_id is an integer that's incremented on each application launch
|
| + MetricsLogBase(const std::string& client_id, int session_id,
|
| + const std::string& version_string);
|
| + virtual ~MetricsLogBase();
|
| +
|
| + // Records a user-initiated action.
|
| + void RecordUserAction(const char* key);
|
| +
|
| + enum WindowEventType {
|
| + WINDOW_CREATE = 0,
|
| + WINDOW_OPEN,
|
| + WINDOW_CLOSE,
|
| + WINDOW_DESTROY
|
| + };
|
| +
|
| + void RecordWindowEvent(WindowEventType type, int window_id, int parent_id);
|
| +
|
| + // Records a page load.
|
| + // window_id - the index of the tab in which the load took place
|
| + // url - which URL was loaded
|
| + // origin - what kind of action initiated the load
|
| + // load_time - how long it took to load the page
|
| + void RecordLoadEvent(int window_id,
|
| + const GURL& url,
|
| + PageTransition::Type origin,
|
| + int session_index,
|
| + base::TimeDelta load_time);
|
| +
|
| + // Record any changes in a given histogram for transmission.
|
| + void RecordHistogramDelta(const Histogram& histogram,
|
| + const Histogram::SampleSet& snapshot);
|
| +
|
| + // Stop writing to this record and generate the encoded representation.
|
| + // None of the Record* methods can be called after this is called.
|
| + void CloseLog();
|
| +
|
| + // These methods allow retrieval of the encoded representation of the
|
| + // record. They can only be called after CloseLog() has been called.
|
| + // GetEncodedLog returns false if buffer_size is less than
|
| + // GetEncodedLogSize();
|
| + int GetEncodedLogSize();
|
| + bool GetEncodedLog(char* buffer, int buffer_size);
|
| + // Returns an empty string on failure.
|
| + std::string GetEncodedLogString();
|
| +
|
| + // Returns the amount of time in seconds that this log has been in use.
|
| + int GetElapsedSeconds();
|
| +
|
| + int num_events() { return num_events_; }
|
| +
|
| + // Creates an MD5 hash of the given value, and returns hash as a byte
|
| + // buffer encoded as a std::string.
|
| + static std::string CreateHash(const std::string& value);
|
| +
|
| + // Return a base64-encoded MD5 hash of the given string.
|
| + static std::string CreateBase64Hash(const std::string& string);
|
| +
|
| + // Get the GMT buildtime for the current binary, expressed in seconds since
|
| + // Januray 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();
|
| +
|
| + // Use |extension| in all uploaded appversions in addition to the standard
|
| + // version string.
|
| + static void set_version_extension(const std::string& extension) {
|
| + version_extension_ = extension;
|
| + }
|
| +
|
| + virtual MetricsLog* AsMetricsLog() {
|
| + return NULL;
|
| + }
|
| +
|
| + protected:
|
| + // Returns a string containing the current time.
|
| + // Virtual so that it can be overridden for testing.
|
| + virtual std::string GetCurrentTimeString();
|
| + // Helper class that invokes StartElement from constructor, and EndElement
|
| + // from destructor.
|
| + //
|
| + // Use the macro OPEN_ELEMENT_FOR_SCOPE to help avoid usage problems.
|
| + class ScopedElement {
|
| + public:
|
| + ScopedElement(MetricsLogBase* log, const std::string& name) : log_(log) {
|
| + DCHECK(log);
|
| + log->StartElement(name.c_str());
|
| + }
|
| +
|
| + ScopedElement(MetricsLogBase* log, const char* name) : log_(log) {
|
| + DCHECK(log);
|
| + log->StartElement(name);
|
| + }
|
| +
|
| + ~ScopedElement() {
|
| + log_->EndElement();
|
| + }
|
| +
|
| + private:
|
| + MetricsLogBase* log_;
|
| + };
|
| + friend class ScopedElement;
|
| +
|
| + static const char* WindowEventTypeToString(WindowEventType type);
|
| +
|
| + // Convenience versions of xmlWriter functions
|
| + void StartElement(const char* name);
|
| + void EndElement();
|
| + void WriteAttribute(const std::string& name, const std::string& value);
|
| + void WriteIntAttribute(const std::string& name, int value);
|
| + void WriteInt64Attribute(const std::string& name, int64 value);
|
| +
|
| + // Write the attributes that are common to every metrics event type.
|
| + void WriteCommonEventAttributes();
|
| +
|
| + // An extension that is appended to the appversion in each log.
|
| + static std::string version_extension_;
|
| +
|
| + base::Time start_time_;
|
| + base::Time end_time_;
|
| +
|
| + std::string client_id_;
|
| + std::string session_id_;
|
| +
|
| + // locked_ is true when record has been packed up for sending, and should
|
| + // no longer be written to. It is only used for sanity checking and is
|
| + // not a real lock.
|
| + bool locked_;
|
| +
|
| + xmlBufferPtr buffer_;
|
| + xmlTextWriterPtr writer_;
|
| + int num_events_; // the number of events recorded in this log
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MetricsLogBase);
|
| +};
|
| +
|
| +// This class provides base functionality for logging metrics data.
|
| +// TODO(ananta)
|
| +// Factor out more common code from chrome and chrome frame metrics service
|
| +// into this class.
|
| +class MetricsServiceBase {
|
| + protected:
|
| + MetricsServiceBase();
|
| + virtual ~MetricsServiceBase();
|
| +
|
| + // Check to see if there is a log that needs to be, or is being, transmitted.
|
| + bool pending_log() const {
|
| + return pending_log_ || !pending_log_text_.empty();
|
| + }
|
| +
|
| + // Compress the report log in input using bzip2, store the result in output.
|
| + bool Bzip2Compress(const std::string& input, std::string* output);
|
| +
|
| + // Discard pending_log_, and clear pending_log_text_. Called after processing
|
| + // of this log is complete.
|
| + void DiscardPendingLog();
|
| +
|
| + // Record complete list of histograms into the current log.
|
| + // Called when we close a log.
|
| + void RecordCurrentHistograms();
|
| +
|
| + // Record a specific histogram .
|
| + void RecordHistogram(const Histogram& histogram);
|
| +
|
| + // A log that we are currently transmiting, or about to try to transmit.
|
| + MetricsLogBase* pending_log_;
|
| +
|
| + // An alternate form of pending_log_. We persistently save this text version
|
| + // into prefs if we can't transmit it. As a result, sometimes all we have is
|
| + // the text version (recalled from a previous session).
|
| + std::string pending_log_text_;
|
| +
|
| + // The log that we are still appending to.
|
| + MetricsLogBase* current_log_;
|
| +
|
| + // Maintain a map of histogram names to the sample stats we've sent.
|
| + typedef std::map<std::string, Histogram::SampleSet> LoggedSampleMap;
|
| +
|
| + // For histograms, record what we've already logged (as a sample for each
|
| + // histogram) so that we can send only the delta with the next log.
|
| + LoggedSampleMap logged_samples_;
|
| +};
|
| +
|
| +#endif // CHROME_COMMON_METRICS_HELPERS_H_
|
| +
|
|
|
| Property changes on: chrome\common\metrics_helpers.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|