summaryrefslogtreecommitdiffstats
path: root/chromecast/base
diff options
context:
space:
mode:
authorgfhuang <gfhuang@chromium.org>2014-12-11 18:09:01 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-12 02:09:18 +0000
commit5a04a5880f32f1b6b59badb80d7e0f820eddb0b9 (patch)
tree417a1ef9ecfc4e28045e6b0c381d9cb27ddb1435 /chromecast/base
parent5f0c294795345faa7a77de46f5e6ed31a6bb2ee3 (diff)
downloadchromium_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.cc68
-rw-r--r--chromecast/base/metrics/cast_metrics_helper.h23
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,