OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/translate/core/common/translate_metrics.h" | 5 #include "components/translate/core/common/translate_metrics.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/metrics/histogram_macros.h" | 12 #include "base/metrics/histogram_macros.h" |
13 #include "base/metrics/metrics_hashes.h" | 13 #include "base/metrics/metrics_hashes.h" |
14 #include "url/url_constants.h" | 14 #include "url/url_constants.h" |
15 | 15 |
16 namespace translate { | 16 namespace translate { |
17 | 17 |
18 namespace { | 18 namespace metrics_internal { |
19 | 19 |
20 // Constant string values to indicate UMA names. All entries should have | 20 const char* kRenderer4LanguageDetection = "Renderer4.LanguageDetection"; |
droger
2017/04/19 08:26:49
const char kRenderer4LanguageDetection[]
is the re
martis
2017/04/20 02:57:29
No longer relevant.
| |
21 // a corresponding index in MetricsNameIndex and an entry in |kMetricsEntries|. | 21 const char* kTranslateContentLanguage = "Translate.ContentLanguage"; |
22 const char kRenderer4LanguageDetection[] = "Renderer4.LanguageDetection"; | 22 const char* kTranslateHtmlLang = "Translate.HtmlLang"; |
23 const char kTranslateContentLanguage[] = "Translate.ContentLanguage"; | 23 const char* kTranslateLanguageVerification = "Translate.LanguageVerification"; |
24 const char kTranslateHtmlLang[] = "Translate.HtmlLang"; | 24 const char* kTranslateTimeToBeReady = "Translate.TimeToBeReady"; |
25 const char kTranslateLanguageVerification[] = "Translate.LanguageVerification"; | 25 const char* kTranslateTimeToLoad = "Translate.TimeToLoad"; |
26 const char kTranslateTimeToBeReady[] = "Translate.TimeToBeReady"; | 26 const char* kTranslateTimeToTranslate = "Translate.TimeToTranslate"; |
27 const char kTranslateTimeToLoad[] = "Translate.TimeToLoad"; | 27 const char* kTranslateUserActionDuration = "Translate.UserActionDuration"; |
28 const char kTranslateTimeToTranslate[] = "Translate.TimeToTranslate"; | 28 const char* kTranslatePageScheme = "Translate.PageScheme"; |
29 const char kTranslateUserActionDuration[] = "Translate.UserActionDuration"; | 29 const char* kTranslateSimilarLanguageMatch = "Translate.SimilarLanguageMatch"; |
30 const char kTranslatePageScheme[] = "Translate.PageScheme"; | 30 const char* kTranslateLanguageDetectionConflict = |
31 const char kTranslateSimilarLanguageMatch[] = "Translate.SimilarLanguageMatch"; | |
32 const char kTranslateLanguageDetectionConflict[] = | |
33 "Translate.LanguageDetectionConflict"; | 31 "Translate.LanguageDetectionConflict"; |
34 | 32 |
35 struct MetricsEntry { | 33 } // namespace metrics_internal |
36 MetricsNameIndex index; | |
37 const char* const name; | |
38 }; | |
39 | 34 |
40 // This entry table should be updated when new UMA items are added. | 35 namespace { |
41 const MetricsEntry kMetricsEntries[] = { | |
42 {UMA_LANGUAGE_DETECTION, kRenderer4LanguageDetection}, | |
43 {UMA_CONTENT_LANGUAGE, kTranslateContentLanguage}, | |
44 {UMA_HTML_LANG, kTranslateHtmlLang}, | |
45 {UMA_LANGUAGE_VERIFICATION, kTranslateLanguageVerification}, | |
46 {UMA_TIME_TO_BE_READY, kTranslateTimeToBeReady}, | |
47 {UMA_TIME_TO_LOAD, kTranslateTimeToLoad}, | |
48 {UMA_TIME_TO_TRANSLATE, kTranslateTimeToTranslate}, | |
49 {UMA_USER_ACTION_DURATION, kTranslateUserActionDuration}, | |
50 {UMA_PAGE_SCHEME, kTranslatePageScheme}, | |
51 {UMA_SIMILAR_LANGUAGE_MATCH, kTranslateSimilarLanguageMatch}, | |
52 {UMA_LANGUAGE_DETECTION_CONFLICT, kTranslateLanguageDetectionConflict}, | |
53 }; | |
54 | |
55 static_assert(arraysize(kMetricsEntries) == UMA_MAX, | |
56 "kMetricsEntries should have UMA_MAX elements"); | |
57 | 36 |
58 // Page languages for which we track CLD3 language conflicts. | 37 // Page languages for which we track CLD3 language conflicts. |
59 const char* kLanguageDetectionConflictPageLangs[] = { | 38 const char* kLanguageDetectionConflictPageLangs[] = { |
60 "en", "en-US", "en-GB", "en-CA", "en-AU", "en-NZ", "en-ZA", "en-IN"}; | 39 "en", "en-US", "en-GB", "en-CA", "en-AU", "en-NZ", "en-ZA", "en-IN"}; |
61 | 40 |
62 LanguageCheckType GetLanguageCheckMetric(const std::string& provided_code, | 41 LanguageCheckType GetLanguageCheckMetric(const std::string& provided_code, |
63 const std::string& revised_code) { | 42 const std::string& revised_code) { |
64 if (provided_code.empty()) | 43 if (provided_code.empty()) |
65 return LANGUAGE_NOT_PROVIDED; | 44 return LANGUAGE_NOT_PROVIDED; |
66 else if (provided_code == revised_code) | 45 else if (provided_code == revised_code) |
67 return LANGUAGE_VALID; | 46 return LANGUAGE_VALID; |
68 return LANGUAGE_INVALID; | 47 return LANGUAGE_INVALID; |
69 } | 48 } |
70 | 49 |
71 } // namespace | 50 } // namespace |
72 | 51 |
73 void ReportContentLanguage(const std::string& provided_code, | 52 void ReportContentLanguage(const std::string& provided_code, |
74 const std::string& revised_code) { | 53 const std::string& revised_code) { |
75 UMA_HISTOGRAM_ENUMERATION(kTranslateContentLanguage, | 54 UMA_HISTOGRAM_ENUMERATION(metrics_internal::kTranslateContentLanguage, |
76 GetLanguageCheckMetric(provided_code, revised_code), | 55 GetLanguageCheckMetric(provided_code, revised_code), |
77 LANGUAGE_MAX); | 56 LANGUAGE_MAX); |
78 } | 57 } |
79 | 58 |
80 void ReportHtmlLang(const std::string& provided_code, | 59 void ReportHtmlLang(const std::string& provided_code, |
81 const std::string& revised_code) { | 60 const std::string& revised_code) { |
82 UMA_HISTOGRAM_ENUMERATION(kTranslateHtmlLang, | 61 UMA_HISTOGRAM_ENUMERATION(metrics_internal::kTranslateHtmlLang, |
83 GetLanguageCheckMetric(provided_code, revised_code), | 62 GetLanguageCheckMetric(provided_code, revised_code), |
84 LANGUAGE_MAX); | 63 LANGUAGE_MAX); |
85 } | 64 } |
86 | 65 |
87 void ReportLanguageVerification(LanguageVerificationType type) { | 66 void ReportLanguageVerification(LanguageVerificationType type) { |
88 UMA_HISTOGRAM_ENUMERATION(kTranslateLanguageVerification, type, | 67 UMA_HISTOGRAM_ENUMERATION(metrics_internal::kTranslateLanguageVerification, |
89 LANGUAGE_VERIFICATION_MAX); | 68 type, LANGUAGE_VERIFICATION_MAX); |
90 } | 69 } |
91 | 70 |
92 void ReportTimeToBeReady(double time_in_msec) { | 71 void ReportTimeToBeReady(double time_in_msec) { |
93 UMA_HISTOGRAM_MEDIUM_TIMES(kTranslateTimeToBeReady, | 72 UMA_HISTOGRAM_MEDIUM_TIMES(metrics_internal::kTranslateTimeToBeReady, |
94 base::TimeDelta::FromMicroseconds( | 73 base::TimeDelta::FromMicroseconds( |
95 static_cast<int64_t>(time_in_msec * 1000.0))); | 74 static_cast<int64_t>(time_in_msec * 1000.0))); |
96 } | 75 } |
97 | 76 |
98 void ReportTimeToLoad(double time_in_msec) { | 77 void ReportTimeToLoad(double time_in_msec) { |
99 UMA_HISTOGRAM_MEDIUM_TIMES(kTranslateTimeToLoad, | 78 UMA_HISTOGRAM_MEDIUM_TIMES(metrics_internal::kTranslateTimeToLoad, |
100 base::TimeDelta::FromMicroseconds( | 79 base::TimeDelta::FromMicroseconds( |
101 static_cast<int64_t>(time_in_msec * 1000.0))); | 80 static_cast<int64_t>(time_in_msec * 1000.0))); |
102 } | 81 } |
103 | 82 |
104 void ReportTimeToTranslate(double time_in_msec) { | 83 void ReportTimeToTranslate(double time_in_msec) { |
105 UMA_HISTOGRAM_MEDIUM_TIMES(kTranslateTimeToTranslate, | 84 UMA_HISTOGRAM_MEDIUM_TIMES(metrics_internal::kTranslateTimeToTranslate, |
106 base::TimeDelta::FromMicroseconds( | 85 base::TimeDelta::FromMicroseconds( |
107 static_cast<int64_t>(time_in_msec * 1000.0))); | 86 static_cast<int64_t>(time_in_msec * 1000.0))); |
108 } | 87 } |
109 | 88 |
110 void ReportUserActionDuration(base::TimeTicks begin, base::TimeTicks end) { | 89 void ReportUserActionDuration(base::TimeTicks begin, base::TimeTicks end) { |
111 UMA_HISTOGRAM_LONG_TIMES(kTranslateUserActionDuration, end - begin); | 90 UMA_HISTOGRAM_LONG_TIMES(metrics_internal::kTranslateUserActionDuration, |
91 end - begin); | |
112 } | 92 } |
113 | 93 |
114 void ReportPageScheme(const std::string& scheme) { | 94 void ReportPageScheme(const std::string& scheme) { |
115 SchemeType type = SCHEME_OTHERS; | 95 SchemeType type = SCHEME_OTHERS; |
116 if (scheme == url::kHttpScheme) | 96 if (scheme == url::kHttpScheme) |
117 type = SCHEME_HTTP; | 97 type = SCHEME_HTTP; |
118 else if (scheme == url::kHttpsScheme) | 98 else if (scheme == url::kHttpsScheme) |
119 type = SCHEME_HTTPS; | 99 type = SCHEME_HTTPS; |
120 UMA_HISTOGRAM_ENUMERATION(kTranslatePageScheme, type, SCHEME_MAX); | 100 UMA_HISTOGRAM_ENUMERATION(metrics_internal::kTranslatePageScheme, type, |
101 SCHEME_MAX); | |
121 } | 102 } |
122 | 103 |
123 void ReportLanguageDetectionTime(base::TimeTicks begin, base::TimeTicks end) { | 104 void ReportLanguageDetectionTime(base::TimeTicks begin, base::TimeTicks end) { |
124 UMA_HISTOGRAM_MEDIUM_TIMES(kRenderer4LanguageDetection, end - begin); | 105 UMA_HISTOGRAM_MEDIUM_TIMES(metrics_internal::kRenderer4LanguageDetection, |
106 end - begin); | |
125 } | 107 } |
126 | 108 |
127 void ReportSimilarLanguageMatch(bool match) { | 109 void ReportSimilarLanguageMatch(bool match) { |
128 UMA_HISTOGRAM_BOOLEAN(kTranslateSimilarLanguageMatch, match); | 110 UMA_HISTOGRAM_BOOLEAN(metrics_internal::kTranslateSimilarLanguageMatch, |
111 match); | |
129 } | 112 } |
130 | 113 |
131 void ReportLanguageDetectionConflict(const std::string& page_lang, | 114 void ReportLanguageDetectionConflict(const std::string& page_lang, |
132 const std::string& cld_lang) { | 115 const std::string& cld_lang) { |
133 const char* const* const it = | 116 const char* const* const it = |
134 std::find(std::begin(kLanguageDetectionConflictPageLangs), | 117 std::find(std::begin(kLanguageDetectionConflictPageLangs), |
135 std::end(kLanguageDetectionConflictPageLangs), page_lang); | 118 std::end(kLanguageDetectionConflictPageLangs), page_lang); |
136 const std::string page_lang_token = | 119 const std::string page_lang_token = |
137 it == std::end(kLanguageDetectionConflictPageLangs) ? "other" : *it; | 120 it == std::end(kLanguageDetectionConflictPageLangs) ? "other" : *it; |
138 | 121 |
139 UMA_HISTOGRAM_SPARSE_SLOWLY( | 122 UMA_HISTOGRAM_SPARSE_SLOWLY( |
140 kTranslateLanguageDetectionConflict, | 123 metrics_internal::kTranslateLanguageDetectionConflict, |
141 base::HashMetricName(page_lang_token + "," + cld_lang)); | 124 base::HashMetricName(page_lang_token + "," + cld_lang)); |
142 } | 125 } |
143 | 126 |
144 const char* GetMetricsName(MetricsNameIndex index) { | |
145 for (size_t i = 0; i < arraysize(kMetricsEntries); ++i) { | |
146 if (kMetricsEntries[i].index == index) | |
147 return kMetricsEntries[i].name; | |
148 } | |
149 NOTREACHED(); | |
150 return NULL; | |
151 } | |
152 | |
153 } // namespace translate | 127 } // namespace translate |
OLD | NEW |