Commit 3a12a0bf authored by Michael Martis's avatar Michael Martis Committed by Commit Bot

Added UMA metrics for translate source and target languages.

These will help us understand user translate behaviour and how it is affected
by various UI decisions. We don't log the cross
(source language, target language) as there are too many combinations to use as
histogram buckets.

Bug: 742684
Change-Id: Idf6a72a6418db820431e75ba1982f260d92bad21
Reviewed-on: https://chromium-review.googlesource.com/572486
Commit-Queue: Michael Martis <martis@chromium.org>
Reviewed-by: default avatarHajime Hoshi <hajimehoshi@chromium.org>
Reviewed-by: default avatarMark Pearson <mpearson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488130}
parent 34e22410
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/metrics/metrics_hashes.h"
#include "base/metrics/sparse_histogram.h" #include "base/metrics/sparse_histogram.h"
#include "components/language_usage_metrics/language_usage_metrics.h" #include "components/language_usage_metrics/language_usage_metrics.h"
...@@ -29,6 +30,10 @@ const char kTranslateUndisplayableLanguage[] = ...@@ -29,6 +30,10 @@ const char kTranslateUndisplayableLanguage[] =
"Translate.UndisplayableLanguage"; "Translate.UndisplayableLanguage";
const char kTranslateUnsupportedLanguageAtInitiation[] = const char kTranslateUnsupportedLanguageAtInitiation[] =
"Translate.UnsupportedLanguageAtInitiation"; "Translate.UnsupportedLanguageAtInitiation";
const char kTranslateSourceLanguage[] =
"Translate.SourceLanguage";
const char kTranslateTargetLanguage[] =
"Translate.TargetLanguage";
struct MetricsEntry { struct MetricsEntry {
TranslateBrowserMetrics::MetricsNameIndex index; TranslateBrowserMetrics::MetricsNameIndex index;
...@@ -47,6 +52,10 @@ const MetricsEntry kMetricsEntries[] = { ...@@ -47,6 +52,10 @@ const MetricsEntry kMetricsEntries[] = {
kTranslateUndisplayableLanguage }, kTranslateUndisplayableLanguage },
{ TranslateBrowserMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, { TranslateBrowserMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION,
kTranslateUnsupportedLanguageAtInitiation }, kTranslateUnsupportedLanguageAtInitiation },
{ TranslateBrowserMetrics::UMA_TRANSLATE_SOURCE_LANGUAGE,
kTranslateSourceLanguage },
{ TranslateBrowserMetrics::UMA_TRANSLATE_TARGET_LANGUAGE,
kTranslateTargetLanguage },
}; };
static_assert(arraysize(kMetricsEntries) == TranslateBrowserMetrics::UMA_MAX, static_assert(arraysize(kMetricsEntries) == TranslateBrowserMetrics::UMA_MAX,
...@@ -86,6 +95,16 @@ void ReportUnsupportedLanguageAtInitiation(const std::string& language) { ...@@ -86,6 +95,16 @@ void ReportUnsupportedLanguageAtInitiation(const std::string& language) {
language_code); language_code);
} }
void ReportTranslateSourceLanguage(const std::string& language) {
UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateSourceLanguage,
base::HashMetricName(language));
}
void ReportTranslateTargetLanguage(const std::string& language) {
UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateTargetLanguage,
base::HashMetricName(language));
}
const char* GetMetricsName(MetricsNameIndex index) { const char* GetMetricsName(MetricsNameIndex index) {
for (size_t i = 0; i < arraysize(kMetricsEntries); ++i) { for (size_t i = 0; i < arraysize(kMetricsEntries); ++i) {
if (kMetricsEntries[i].index == index) if (kMetricsEntries[i].index == index)
......
...@@ -19,6 +19,8 @@ enum MetricsNameIndex { ...@@ -19,6 +19,8 @@ enum MetricsNameIndex {
UMA_LOCALES_ON_DISABLED_BY_PREFS, UMA_LOCALES_ON_DISABLED_BY_PREFS,
UMA_UNDISPLAYABLE_LANGUAGE, UMA_UNDISPLAYABLE_LANGUAGE,
UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION,
UMA_TRANSLATE_SOURCE_LANGUAGE,
UMA_TRANSLATE_TARGET_LANGUAGE,
UMA_MAX, UMA_MAX,
}; };
...@@ -64,6 +66,16 @@ void ReportUndisplayableLanguage(const std::string& language); ...@@ -64,6 +66,16 @@ void ReportUndisplayableLanguage(const std::string& language);
void ReportUnsupportedLanguageAtInitiation(const std::string& language); void ReportUnsupportedLanguageAtInitiation(const std::string& language);
// Called when a request is sent to the translate server to report the source
// language of the translated page. Buckets are labelled with CLD3LanguageCode
// values.
void ReportTranslateSourceLanguage(const std::string& language);
// Called when a request is sent to the translate server to report the target
// language for the translated page. Buckets are labelled with CLD3LanguageCode
// values.
void ReportTranslateTargetLanguage(const std::string& language);
// Provides UMA entry names for unit tests. // Provides UMA entry names for unit tests.
const char* GetMetricsName(MetricsNameIndex index); const char* GetMetricsName(MetricsNameIndex index);
......
...@@ -205,7 +205,6 @@ TEST(TranslateBrowserMetricsTest, ReportLanguageDetectionError) { ...@@ -205,7 +205,6 @@ TEST(TranslateBrowserMetricsTest, ReportLanguageDetectionError) {
EXPECT_EQ(0, recorder.GetTotalCount()); EXPECT_EQ(0, recorder.GetTotalCount());
translate::TranslateBrowserMetrics::ReportLanguageDetectionError(); translate::TranslateBrowserMetrics::ReportLanguageDetectionError();
EXPECT_EQ(1, recorder.GetTotalCount()); EXPECT_EQ(1, recorder.GetTotalCount());
} }
...@@ -240,3 +239,35 @@ TEST(TranslateBrowserMetricsTest, ReportedUnsupportedLanguageAtInitiation) { ...@@ -240,3 +239,35 @@ TEST(TranslateBrowserMetricsTest, ReportedUnsupportedLanguageAtInitiation) {
"en"); "en");
EXPECT_EQ(1, recorder.GetCount(ENGLISH)); EXPECT_EQ(1, recorder.GetCount(ENGLISH));
} }
TEST(TranslateBrowserMetricsTest, ReportedTranslateSourceLanguage) {
const int ENGLISH = -74147910;
const int FRENCH = 1704315002;
MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName(
translate::TranslateBrowserMetrics::UMA_TRANSLATE_SOURCE_LANGUAGE));
EXPECT_EQ(0, recorder.GetTotalCount());
translate::TranslateBrowserMetrics::ReportTranslateSourceLanguage("en");
translate::TranslateBrowserMetrics::ReportTranslateSourceLanguage("fr");
translate::TranslateBrowserMetrics::ReportTranslateSourceLanguage("en");
EXPECT_EQ(2, recorder.GetCount(ENGLISH));
EXPECT_EQ(1, recorder.GetCount(FRENCH));
}
TEST(TranslateBrowserMetricsTest, ReportedTranslateTargetLanguage) {
const int ENGLISH = -74147910;
const int FRENCH = 1704315002;
MetricsRecorder recorder(translate::TranslateBrowserMetrics::GetMetricsName(
translate::TranslateBrowserMetrics::UMA_TRANSLATE_TARGET_LANGUAGE));
EXPECT_EQ(0, recorder.GetTotalCount());
translate::TranslateBrowserMetrics::ReportTranslateTargetLanguage("en");
translate::TranslateBrowserMetrics::ReportTranslateTargetLanguage("fr");
translate::TranslateBrowserMetrics::ReportTranslateTargetLanguage("en");
EXPECT_EQ(2, recorder.GetCount(ENGLISH));
EXPECT_EQ(1, recorder.GetCount(FRENCH));
}
...@@ -337,6 +337,10 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang, ...@@ -337,6 +337,10 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang,
return; return;
} }
// Log the source and target languages of the translate request.
TranslateBrowserMetrics::ReportTranslateSourceLanguage(original_source_lang);
TranslateBrowserMetrics::ReportTranslateTargetLanguage(target_lang);
// Translation can be kicked by context menu against unsupported languages. // Translation can be kicked by context menu against unsupported languages.
// Unsupported language strings should be replaced with // Unsupported language strings should be replaced with
// kUnknownLanguageCode in order to send a translation request with enabling // kUnknownLanguageCode in order to send a translation request with enabling
......
...@@ -81033,6 +81033,22 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -81033,6 +81033,22 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary> </summary>
</histogram> </histogram>
<histogram name="Translate.SourceLanguage" enum="CLD3LanguageCode">
<owner>yyushkina@google.com</owner>
<summary>
The number of requests sent to the Translate server, grouped by source
language.
</summary>
</histogram>
<histogram name="Translate.TargetLanguage" enum="CLD3LanguageCode">
<owner>yyushkina@google.com</owner>
<summary>
The number of requests sent to the Translate server, grouped by target
language.
</summary>
</histogram>
<histogram name="Translate.TimeToBeReady" units="ms"> <histogram name="Translate.TimeToBeReady" units="ms">
<owner>kenjibaheux@google.com</owner> <owner>kenjibaheux@google.com</owner>
<summary> <summary>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment