diff options
author | gfhuang <gfhuang@chromium.org> | 2014-12-11 18:09:01 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-12 02:09:18 +0000 |
commit | 5a04a5880f32f1b6b59badb80d7e0f820eddb0b9 (patch) | |
tree | 417a1ef9ecfc4e28045e6b0c381d9cb27ddb1435 /chromecast/base | |
parent | 5f0c294795345faa7a77de46f5e6ed31a6bb2ee3 (diff) | |
download | chromium_src-5a04a5880f32f1b6b59badb80d7e0f820eddb0b9.zip chromium_src-5a04a5880f32f1b6b59badb80d7e0f820eddb0b9.tar.gz chromium_src-5a04a5880f32f1b6b59badb80d7e0f820eddb0b9.tar.bz2 |
Add UpdateCurrentAppInfo() interface to record info about current app, including
app_id, session_id and sdk_version, which are used by MediaPlay/MediaPause
events.
BUG=
Review URL: https://codereview.chromium.org/786233003
Cr-Commit-Position: refs/heads/master@{#308026}
Diffstat (limited to 'chromecast/base')
-rw-r--r-- | chromecast/base/metrics/cast_metrics_helper.cc | 68 | ||||
-rw-r--r-- | chromecast/base/metrics/cast_metrics_helper.h | 23 |
2 files changed, 89 insertions, 2 deletions
diff --git a/chromecast/base/metrics/cast_metrics_helper.cc b/chromecast/base/metrics/cast_metrics_helper.cc index dda5f51..70bef88 100644 --- a/chromecast/base/metrics/cast_metrics_helper.cc +++ b/chromecast/base/metrics/cast_metrics_helper.cc @@ -10,6 +10,8 @@ #include "base/message_loop/message_loop_proxy.h" #include "base/metrics/histogram.h" #include "base/metrics/user_metrics.h" +#include "base/strings/string_split.h" +#include "base/strings/string_util.h" #include "chromecast/base/metrics/cast_histograms.h" #include "chromecast/base/metrics/grouped_histogram.h" @@ -36,8 +38,55 @@ const int kDisplayedFramesPerSecondPeriod = 1000000; // Sample every 5 seconds, represented in microseconds. const int kNominalVideoSamplePeriod = 5000000; +const char kMetricsNameAppInfoDelimiter = '#'; + } // namespace +// static + +// NOTE(gfhuang): This is a hacky way to encode/decode app infos into a +// string. Mainly because it's hard to add another metrics serialization type +// into components/metrics/serialization/. +// static +bool CastMetricsHelper::DecodeAppInfoFromMetricsName( + const std::string& metrics_name, + std::string* action_name, + std::string* app_id, + std::string* session_id, + std::string* sdk_version) { + DCHECK(action_name); + DCHECK(app_id); + DCHECK(session_id); + DCHECK(sdk_version); + if (metrics_name.find(kMetricsNameAppInfoDelimiter) == std::string::npos) + return false; + + std::vector<std::string> tokens; + base::SplitString(metrics_name, kMetricsNameAppInfoDelimiter, &tokens); + DCHECK_EQ(tokens.size(), 4u); + // The order of tokens should match EncodeAppInfoIntoMetricsName(). + *action_name = tokens[0]; + *app_id = tokens[1]; + *session_id = tokens[2]; + *sdk_version = tokens[3]; + return true; +} + +// static +std::string CastMetricsHelper::EncodeAppInfoIntoMetricsName( + const std::string& action_name, + const std::string& app_id, + const std::string& session_id, + const std::string& sdk_version) { + std::vector<std::string> parts; + parts.push_back(action_name); + parts.push_back(app_id); + parts.push_back(session_id); + parts.push_back(sdk_version); + return JoinString(parts, kMetricsNameAppInfoDelimiter); +} + +// static CastMetricsHelper* CastMetricsHelper::GetInstance() { DCHECK(g_instance); return g_instance; @@ -71,14 +120,29 @@ void CastMetricsHelper::TagAppStart(const std::string& arg_app_name) { new_startup_time_ = true; TagAppStartForGroupedHistograms(app_name_); + // Clear app info + UpdateCurrentAppInfo("", "", ""); +} + +void CastMetricsHelper::UpdateCurrentAppInfo(const std::string& app_id, + const std::string& session_id, + const std::string& sdk_version) { + MAKE_SURE_THREAD(UpdateCurrentAppInfo, app_id, session_id, sdk_version); + app_id_ = app_id; + session_id_ = session_id; + sdk_version_ = sdk_version; } void CastMetricsHelper::LogMediaPlay() { - RecordSimpleAction(GetMetricsNameWithAppName("MediaPlay", "")); + MAKE_SURE_THREAD(LogMediaPlay); + RecordSimpleAction(EncodeAppInfoIntoMetricsName( + "MediaPlay", app_id_, session_id_, sdk_version_)); } void CastMetricsHelper::LogMediaPause() { - RecordSimpleAction(GetMetricsNameWithAppName("MediaPause", "")); + MAKE_SURE_THREAD(LogMediaPause); + RecordSimpleAction(EncodeAppInfoIntoMetricsName( + "MediaPause", app_id_, session_id_, sdk_version_)); } void CastMetricsHelper::LogTimeToDisplayVideo() { diff --git a/chromecast/base/metrics/cast_metrics_helper.h b/chromecast/base/metrics/cast_metrics_helper.h index 9bacdcb..fb22ff8 100644 --- a/chromecast/base/metrics/cast_metrics_helper.h +++ b/chromecast/base/metrics/cast_metrics_helper.h @@ -45,6 +45,16 @@ class CastMetricsHelper { int num_buckets) = 0; }; + // Decodes action_name/app_id/session_id/sdk_version from metrics name. + // Return false if the metrics name is not generated from + // EncodeAppInfoIntoMetricsName() with correct format. + static bool DecodeAppInfoFromMetricsName( + const std::string& metrics_name, + std::string* action_name, + std::string* app_id, + std::string* session_id, + std::string* sdk_version); + static CastMetricsHelper* GetInstance(); explicit CastMetricsHelper( @@ -53,6 +63,10 @@ class CastMetricsHelper { // This function stores the name and startup time of the active application. virtual void TagAppStart(const std::string& app_name); + // This function updates the info for current active application. + virtual void UpdateCurrentAppInfo(const std::string& app_id, + const std::string& session_id, + const std::string& sdk_version); // Logs UMA record for media play/pause user actions. virtual void LogMediaPlay(); @@ -101,6 +115,12 @@ class CastMetricsHelper { CastMetricsHelper(); private: + static std::string EncodeAppInfoIntoMetricsName( + const std::string& action_name, + const std::string& app_id, + const std::string& session_id, + const std::string& sdk_version); + void LogEnumerationHistogramEvent(const std::string& name, int value, int num_buckets); void LogTimeHistogramEvent(const std::string& name, @@ -118,6 +138,9 @@ class CastMetricsHelper { // Currently running app name. Used to construct histogram name. std::string app_name_; + std::string app_id_; + std::string session_id_; + std::string sdk_version_; // Whether a new app start time has been stored but not recorded. // After the startup time has been used to generate an UMA event, |