OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/renderer/translate/translate_helper_metrics.h" | |
6 | |
7 #include "base/basictypes.h" | |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "base/metrics/histogram.h" | |
10 #include "base/metrics/histogram_samples.h" | |
11 #include "base/metrics/statistics_recorder.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 #include "testing/platform_test.h" | |
14 | |
15 using base::HistogramBase; | |
16 using base::HistogramSamples; | |
17 using base::SampleCountIterator; | |
18 using base::StatisticsRecorder; | |
19 using base::TimeTicks; | |
20 | |
21 namespace { | |
22 | |
23 const int kTrue = 1; | |
24 const int kFalse = 0; | |
25 | |
26 class MetricsRecorder { | |
27 public: | |
28 explicit MetricsRecorder(const char* key) : key_(key) { | |
29 StatisticsRecorder::Initialize(); | |
30 | |
31 HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_); | |
32 if (histogram) | |
33 base_samples_ = histogram->SnapshotSamples(); | |
34 } | |
35 | |
36 void CheckLanguage(TranslateHelperMetrics::MetricsNameIndex index, | |
37 int expected_not_provided, | |
38 int expected_valid, | |
39 int expected_invalid) { | |
40 ASSERT_EQ(TranslateHelperMetrics::GetMetricsName(index), key_); | |
41 | |
42 Snapshot(); | |
43 | |
44 EXPECT_EQ(expected_not_provided, | |
45 GetCountWithoutSnapshot( | |
46 TranslateHelperMetrics::LANGUAGE_NOT_PROVIDED)); | |
47 EXPECT_EQ(expected_valid, | |
48 GetCountWithoutSnapshot( | |
49 TranslateHelperMetrics::LANGUAGE_VALID)); | |
50 EXPECT_EQ(expected_invalid, | |
51 GetCountWithoutSnapshot( | |
52 TranslateHelperMetrics::LANGUAGE_INVALID)); | |
53 } | |
54 | |
55 void CheckLanguageVerification(int expected_cld_disabled, | |
56 int expected_cld_only, | |
57 int expected_unknown, | |
58 int expected_cld_agree, | |
59 int expected_cld_disagree, | |
60 int expected_trust_cld, | |
61 int expected_cld_complement_sub_code) { | |
62 ASSERT_EQ(TranslateHelperMetrics::GetMetricsName( | |
63 TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION), key_); | |
64 | |
65 Snapshot(); | |
66 | |
67 EXPECT_EQ( | |
68 expected_cld_disabled, | |
69 GetCountWithoutSnapshot( | |
70 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED)); | |
71 EXPECT_EQ( | |
72 expected_cld_only, | |
73 GetCountWithoutSnapshot( | |
74 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_ONLY)); | |
75 EXPECT_EQ( | |
76 expected_unknown, | |
77 GetCountWithoutSnapshot( | |
78 TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN)); | |
79 EXPECT_EQ( | |
80 expected_cld_agree, | |
81 GetCountWithoutSnapshot( | |
82 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE)); | |
83 EXPECT_EQ( | |
84 expected_cld_disagree, | |
85 GetCountWithoutSnapshot( | |
86 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE)); | |
87 EXPECT_EQ( | |
88 expected_trust_cld, | |
89 GetCountWithoutSnapshot( | |
90 TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD)); | |
91 EXPECT_EQ( | |
92 expected_cld_complement_sub_code, | |
93 GetCountWithoutSnapshot( | |
94 TranslateHelperMetrics:: | |
95 LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE)); | |
96 } | |
97 | |
98 void CheckScheme(int expected_http, int expected_https, int expected_others) { | |
99 ASSERT_EQ(TranslateHelperMetrics::GetMetricsName( | |
100 TranslateHelperMetrics::UMA_PAGE_SCHEME), key_); | |
101 | |
102 Snapshot(); | |
103 | |
104 EXPECT_EQ(expected_http, | |
105 GetCountWithoutSnapshot(TranslateHelperMetrics::SCHEME_HTTP)); | |
106 EXPECT_EQ(expected_https, | |
107 GetCountWithoutSnapshot(TranslateHelperMetrics::SCHEME_HTTPS)); | |
108 EXPECT_EQ(expected_others, | |
109 GetCountWithoutSnapshot(TranslateHelperMetrics::SCHEME_OTHERS)); | |
110 } | |
111 | |
112 void CheckTotalCount(int count) { | |
113 Snapshot(); | |
114 EXPECT_EQ(count, GetTotalCount()); | |
115 } | |
116 | |
117 void CheckValueInLogs(double value) { | |
118 Snapshot(); | |
119 ASSERT_TRUE(samples_.get()); | |
120 for (scoped_ptr<SampleCountIterator> i = samples_->Iterator(); | |
121 !i->Done(); | |
122 i->Next()) { | |
123 HistogramBase::Sample min; | |
124 HistogramBase::Sample max; | |
125 HistogramBase::Count count; | |
126 i->Get(&min, &max, &count); | |
127 if (min <= value && value <= max && count >= 1) | |
128 return; | |
129 } | |
130 EXPECT_FALSE(true); | |
131 } | |
132 | |
133 HistogramBase::Count GetCount(HistogramBase::Sample value) { | |
134 Snapshot(); | |
135 return GetCountWithoutSnapshot(value); | |
136 } | |
137 | |
138 private: | |
139 void Snapshot() { | |
140 HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_); | |
141 if (!histogram) | |
142 return; | |
143 samples_ = histogram->SnapshotSamples(); | |
144 } | |
145 | |
146 HistogramBase::Count GetCountWithoutSnapshot(HistogramBase::Sample value) { | |
147 if (!samples_.get()) | |
148 return 0; | |
149 HistogramBase::Count count = samples_->GetCount(value); | |
150 if (!base_samples_.get()) | |
151 return count; | |
152 return count - base_samples_->GetCount(value); | |
153 } | |
154 | |
155 HistogramBase::Count GetTotalCount() { | |
156 if (!samples_.get()) | |
157 return 0; | |
158 HistogramBase::Count count = samples_->TotalCount(); | |
159 if (!base_samples_.get()) | |
160 return count; | |
161 return count - base_samples_->TotalCount(); | |
162 } | |
163 | |
164 std::string key_; | |
165 scoped_ptr<HistogramSamples> base_samples_; | |
166 scoped_ptr<HistogramSamples> samples_; | |
167 | |
168 DISALLOW_COPY_AND_ASSIGN(MetricsRecorder); | |
169 }; | |
170 | |
171 } // namespace | |
172 | |
173 TEST(TranslateHelperMetricsTest, ReportContentLanguage) { | |
174 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
175 TranslateHelperMetrics::UMA_CONTENT_LANGUAGE)); | |
176 | |
177 recorder.CheckLanguage(TranslateHelperMetrics::UMA_CONTENT_LANGUAGE, 0, 0, 0); | |
178 TranslateHelperMetrics::ReportContentLanguage(std::string(), std::string()); | |
179 recorder.CheckLanguage(TranslateHelperMetrics::UMA_CONTENT_LANGUAGE, 1, 0, 0); | |
180 TranslateHelperMetrics::ReportContentLanguage("ja_JP", "ja-JP"); | |
181 recorder.CheckLanguage(TranslateHelperMetrics::UMA_CONTENT_LANGUAGE, 1, 0, 1); | |
182 TranslateHelperMetrics::ReportContentLanguage("en", "en"); | |
183 recorder.CheckLanguage(TranslateHelperMetrics::UMA_CONTENT_LANGUAGE, 1, 1, 1); | |
184 } | |
185 | |
186 TEST(TranslateHelperMetricsTest, ReportHtmlLang) { | |
187 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
188 TranslateHelperMetrics::UMA_HTML_LANG)); | |
189 | |
190 recorder.CheckLanguage(TranslateHelperMetrics::UMA_HTML_LANG, 0, 0, 0); | |
191 TranslateHelperMetrics::ReportHtmlLang(std::string(), std::string()); | |
192 recorder.CheckLanguage(TranslateHelperMetrics::UMA_HTML_LANG, 1, 0, 0); | |
193 TranslateHelperMetrics::ReportHtmlLang("ja_JP", "ja-JP"); | |
194 recorder.CheckLanguage(TranslateHelperMetrics::UMA_HTML_LANG, 1, 0, 1); | |
195 TranslateHelperMetrics::ReportHtmlLang("en", "en"); | |
196 recorder.CheckLanguage(TranslateHelperMetrics::UMA_HTML_LANG, 1, 1, 1); | |
197 } | |
198 | |
199 TEST(TranslateHelperMetricsTest, ReportLanguageVerification) { | |
200 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
201 TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION)); | |
202 | |
203 recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0); | |
204 TranslateHelperMetrics::ReportLanguageVerification( | |
205 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED); | |
206 recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0); | |
207 TranslateHelperMetrics::ReportLanguageVerification( | |
208 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_ONLY); | |
209 recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0); | |
210 TranslateHelperMetrics::ReportLanguageVerification( | |
211 TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN); | |
212 recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0); | |
213 TranslateHelperMetrics::ReportLanguageVerification( | |
214 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE); | |
215 recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0); | |
216 TranslateHelperMetrics::ReportLanguageVerification( | |
217 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE); | |
218 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0); | |
219 TranslateHelperMetrics::ReportLanguageVerification( | |
220 TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD); | |
221 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0); | |
222 TranslateHelperMetrics::ReportLanguageVerification( | |
223 TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE); | |
224 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1); | |
225 } | |
226 | |
227 TEST(TranslateHelperMetricsTest, ReportTimeToBeReady) { | |
228 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
229 TranslateHelperMetrics::UMA_TIME_TO_BE_READY)); | |
230 recorder.CheckTotalCount(0); | |
231 TranslateHelperMetrics::ReportTimeToBeReady(3.14); | |
232 recorder.CheckValueInLogs(3.14); | |
233 recorder.CheckTotalCount(1); | |
234 } | |
235 | |
236 TEST(TranslateHelperMetricsTest, ReportTimeToLoad) { | |
237 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
238 TranslateHelperMetrics::UMA_TIME_TO_LOAD)); | |
239 recorder.CheckTotalCount(0); | |
240 TranslateHelperMetrics::ReportTimeToLoad(573.0); | |
241 recorder.CheckValueInLogs(573.0); | |
242 recorder.CheckTotalCount(1); | |
243 } | |
244 | |
245 TEST(TranslateHelperMetricsTest, ReportTimeToTranslate) { | |
246 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
247 TranslateHelperMetrics::UMA_TIME_TO_TRANSLATE)); | |
248 recorder.CheckTotalCount(0); | |
249 TranslateHelperMetrics::ReportTimeToTranslate(4649.0); | |
250 recorder.CheckValueInLogs(4649.0); | |
251 recorder.CheckTotalCount(1); | |
252 } | |
253 | |
254 TEST(TranslateHelperMetricsTest, ReportUserActionDuration) { | |
255 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
256 TranslateHelperMetrics::UMA_USER_ACTION_DURATION)); | |
257 recorder.CheckTotalCount(0); | |
258 TimeTicks begin = TimeTicks::Now(); | |
259 TimeTicks end = begin + base::TimeDelta::FromSeconds(3776); | |
260 TranslateHelperMetrics::ReportUserActionDuration(begin, end); | |
261 recorder.CheckValueInLogs(3776000.0); | |
262 recorder.CheckTotalCount(1); | |
263 } | |
264 | |
265 TEST(TranslateHelperMetricsTest, ReportPageScheme) { | |
266 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
267 TranslateHelperMetrics::UMA_PAGE_SCHEME)); | |
268 recorder.CheckScheme(0, 0, 0); | |
269 TranslateHelperMetrics::ReportPageScheme("http"); | |
270 recorder.CheckScheme(1, 0, 0); | |
271 TranslateHelperMetrics::ReportPageScheme("https"); | |
272 recorder.CheckScheme(1, 1, 0); | |
273 TranslateHelperMetrics::ReportPageScheme("ftp"); | |
274 recorder.CheckScheme(1, 1, 1); | |
275 } | |
276 | |
277 TEST(TranslateHelperMetricsTest, ReportSimilarLanguageMatch) { | |
278 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
279 TranslateHelperMetrics::UMA_SIMILAR_LANGUAGE_MATCH)); | |
280 recorder.CheckTotalCount(0); | |
281 EXPECT_EQ(0, recorder.GetCount(kTrue)); | |
282 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
283 TranslateHelperMetrics::ReportSimilarLanguageMatch(true); | |
284 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
285 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
286 TranslateHelperMetrics::ReportSimilarLanguageMatch(false); | |
287 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
288 EXPECT_EQ(1, recorder.GetCount(kFalse)); | |
289 } | |
290 | |
291 #if defined(ENABLE_LANGUAGE_DETECTION) | |
292 | |
293 TEST(TranslateHelperMetricsTest, ReportLanguageDetectionTime) { | |
294 MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName( | |
295 TranslateHelperMetrics::UMA_LANGUAGE_DETECTION)); | |
296 recorder.CheckTotalCount(0); | |
297 TimeTicks begin = TimeTicks::Now(); | |
298 TimeTicks end = begin + base::TimeDelta::FromMicroseconds(9009); | |
299 TranslateHelperMetrics::ReportLanguageDetectionTime(begin, end); | |
300 recorder.CheckValueInLogs(9.009); | |
301 recorder.CheckTotalCount(1); | |
302 } | |
303 | |
304 #endif // defined(ENABLE_LANGUAGE_DETECTION) | |
OLD | NEW |