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/common/translate/translate_common_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(TranslateCommonMetrics::MetricsNameIndex index, | |
37 int expected_not_provided, | |
38 int expected_valid, | |
39 int expected_invalid) { | |
40 ASSERT_EQ(TranslateCommonMetrics::GetMetricsName(index), key_); | |
41 | |
42 Snapshot(); | |
43 | |
44 EXPECT_EQ(expected_not_provided, | |
45 GetCountWithoutSnapshot( | |
46 TranslateCommonMetrics::LANGUAGE_NOT_PROVIDED)); | |
47 EXPECT_EQ(expected_valid, | |
48 GetCountWithoutSnapshot( | |
49 TranslateCommonMetrics::LANGUAGE_VALID)); | |
50 EXPECT_EQ(expected_invalid, | |
51 GetCountWithoutSnapshot( | |
52 TranslateCommonMetrics::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(TranslateCommonMetrics::GetMetricsName( | |
63 TranslateCommonMetrics::UMA_LANGUAGE_VERIFICATION), key_); | |
64 | |
65 Snapshot(); | |
66 | |
67 EXPECT_EQ( | |
68 expected_cld_disabled, | |
69 GetCountWithoutSnapshot( | |
70 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED)); | |
71 EXPECT_EQ( | |
72 expected_cld_only, | |
73 GetCountWithoutSnapshot( | |
74 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_ONLY)); | |
75 EXPECT_EQ( | |
76 expected_unknown, | |
77 GetCountWithoutSnapshot( | |
78 TranslateCommonMetrics::LANGUAGE_VERIFICATION_UNKNOWN)); | |
79 EXPECT_EQ( | |
80 expected_cld_agree, | |
81 GetCountWithoutSnapshot( | |
82 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_AGREE)); | |
83 EXPECT_EQ( | |
84 expected_cld_disagree, | |
85 GetCountWithoutSnapshot( | |
86 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE)); | |
87 EXPECT_EQ( | |
88 expected_trust_cld, | |
89 GetCountWithoutSnapshot( | |
90 TranslateCommonMetrics::LANGUAGE_VERIFICATION_TRUST_CLD)); | |
91 EXPECT_EQ( | |
92 expected_cld_complement_sub_code, | |
93 GetCountWithoutSnapshot( | |
94 TranslateCommonMetrics:: | |
95 LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE)); | |
96 } | |
97 | |
98 void CheckScheme(int expected_http, int expected_https, int expected_others) { | |
99 ASSERT_EQ(TranslateCommonMetrics::GetMetricsName( | |
100 TranslateCommonMetrics::UMA_PAGE_SCHEME), key_); | |
101 | |
102 Snapshot(); | |
103 | |
104 EXPECT_EQ(expected_http, | |
105 GetCountWithoutSnapshot(TranslateCommonMetrics::SCHEME_HTTP)); | |
106 EXPECT_EQ(expected_https, | |
107 GetCountWithoutSnapshot(TranslateCommonMetrics::SCHEME_HTTPS)); | |
108 EXPECT_EQ(expected_others, | |
109 GetCountWithoutSnapshot(TranslateCommonMetrics::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(TranslateCommonMetricsTest, ReportContentLanguage) { | |
174 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
175 TranslateCommonMetrics::UMA_CONTENT_LANGUAGE)); | |
176 | |
177 recorder.CheckLanguage(TranslateCommonMetrics::UMA_CONTENT_LANGUAGE, 0, 0, 0); | |
178 TranslateCommonMetrics::ReportContentLanguage(std::string(), std::string()); | |
179 recorder.CheckLanguage(TranslateCommonMetrics::UMA_CONTENT_LANGUAGE, 1, 0, 0); | |
180 TranslateCommonMetrics::ReportContentLanguage("ja_JP", "ja-JP"); | |
181 recorder.CheckLanguage(TranslateCommonMetrics::UMA_CONTENT_LANGUAGE, 1, 0, 1); | |
182 TranslateCommonMetrics::ReportContentLanguage("en", "en"); | |
183 recorder.CheckLanguage(TranslateCommonMetrics::UMA_CONTENT_LANGUAGE, 1, 1, 1); | |
184 } | |
185 | |
186 TEST(TranslateCommonMetricsTest, ReportHtmlLang) { | |
187 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
188 TranslateCommonMetrics::UMA_HTML_LANG)); | |
189 | |
190 recorder.CheckLanguage(TranslateCommonMetrics::UMA_HTML_LANG, 0, 0, 0); | |
191 TranslateCommonMetrics::ReportHtmlLang(std::string(), std::string()); | |
192 recorder.CheckLanguage(TranslateCommonMetrics::UMA_HTML_LANG, 1, 0, 0); | |
193 TranslateCommonMetrics::ReportHtmlLang("ja_JP", "ja-JP"); | |
194 recorder.CheckLanguage(TranslateCommonMetrics::UMA_HTML_LANG, 1, 0, 1); | |
195 TranslateCommonMetrics::ReportHtmlLang("en", "en"); | |
196 recorder.CheckLanguage(TranslateCommonMetrics::UMA_HTML_LANG, 1, 1, 1); | |
197 } | |
198 | |
199 TEST(TranslateCommonMetricsTest, ReportLanguageVerification) { | |
200 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
201 TranslateCommonMetrics::UMA_LANGUAGE_VERIFICATION)); | |
202 | |
203 recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0); | |
204 TranslateCommonMetrics::ReportLanguageVerification( | |
205 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED); | |
206 recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0); | |
207 TranslateCommonMetrics::ReportLanguageVerification( | |
208 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_ONLY); | |
209 recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0); | |
210 TranslateCommonMetrics::ReportLanguageVerification( | |
211 TranslateCommonMetrics::LANGUAGE_VERIFICATION_UNKNOWN); | |
212 recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0); | |
213 TranslateCommonMetrics::ReportLanguageVerification( | |
214 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_AGREE); | |
215 recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0); | |
216 TranslateCommonMetrics::ReportLanguageVerification( | |
217 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE); | |
218 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0); | |
219 TranslateCommonMetrics::ReportLanguageVerification( | |
220 TranslateCommonMetrics::LANGUAGE_VERIFICATION_TRUST_CLD); | |
221 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0); | |
222 TranslateCommonMetrics::ReportLanguageVerification( | |
223 TranslateCommonMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE); | |
224 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1); | |
225 } | |
226 | |
227 TEST(TranslateCommonMetricsTest, ReportTimeToBeReady) { | |
228 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
229 TranslateCommonMetrics::UMA_TIME_TO_BE_READY)); | |
230 recorder.CheckTotalCount(0); | |
231 TranslateCommonMetrics::ReportTimeToBeReady(3.14); | |
232 recorder.CheckValueInLogs(3.14); | |
233 recorder.CheckTotalCount(1); | |
234 } | |
235 | |
236 TEST(TranslateCommonMetricsTest, ReportTimeToLoad) { | |
237 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
238 TranslateCommonMetrics::UMA_TIME_TO_LOAD)); | |
239 recorder.CheckTotalCount(0); | |
240 TranslateCommonMetrics::ReportTimeToLoad(573.0); | |
241 recorder.CheckValueInLogs(573.0); | |
242 recorder.CheckTotalCount(1); | |
243 } | |
244 | |
245 TEST(TranslateCommonMetricsTest, ReportTimeToTranslate) { | |
246 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
247 TranslateCommonMetrics::UMA_TIME_TO_TRANSLATE)); | |
248 recorder.CheckTotalCount(0); | |
249 TranslateCommonMetrics::ReportTimeToTranslate(4649.0); | |
250 recorder.CheckValueInLogs(4649.0); | |
251 recorder.CheckTotalCount(1); | |
252 } | |
253 | |
254 TEST(TranslateCommonMetricsTest, ReportUserActionDuration) { | |
255 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
256 TranslateCommonMetrics::UMA_USER_ACTION_DURATION)); | |
257 recorder.CheckTotalCount(0); | |
258 TimeTicks begin = TimeTicks::Now(); | |
259 TimeTicks end = begin + base::TimeDelta::FromSeconds(3776); | |
260 TranslateCommonMetrics::ReportUserActionDuration(begin, end); | |
261 recorder.CheckValueInLogs(3776000.0); | |
262 recorder.CheckTotalCount(1); | |
263 } | |
264 | |
265 TEST(TranslateCommonMetricsTest, ReportPageScheme) { | |
266 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
267 TranslateCommonMetrics::UMA_PAGE_SCHEME)); | |
268 recorder.CheckScheme(0, 0, 0); | |
269 TranslateCommonMetrics::ReportPageScheme("http"); | |
270 recorder.CheckScheme(1, 0, 0); | |
271 TranslateCommonMetrics::ReportPageScheme("https"); | |
272 recorder.CheckScheme(1, 1, 0); | |
273 TranslateCommonMetrics::ReportPageScheme("ftp"); | |
274 recorder.CheckScheme(1, 1, 1); | |
275 } | |
276 | |
277 TEST(TranslateCommonMetricsTest, ReportSimilarLanguageMatch) { | |
278 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
279 TranslateCommonMetrics::UMA_SIMILAR_LANGUAGE_MATCH)); | |
280 recorder.CheckTotalCount(0); | |
281 EXPECT_EQ(0, recorder.GetCount(kTrue)); | |
282 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
283 TranslateCommonMetrics::ReportSimilarLanguageMatch(true); | |
284 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
285 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
286 TranslateCommonMetrics::ReportSimilarLanguageMatch(false); | |
287 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
288 EXPECT_EQ(1, recorder.GetCount(kFalse)); | |
289 } | |
290 | |
291 TEST(TranslateCommonMetricsTest, ReportLanguageDetectionTime) { | |
292 MetricsRecorder recorder(TranslateCommonMetrics::GetMetricsName( | |
293 TranslateCommonMetrics::UMA_LANGUAGE_DETECTION)); | |
294 recorder.CheckTotalCount(0); | |
295 TimeTicks begin = TimeTicks::Now(); | |
296 TimeTicks end = begin + base::TimeDelta::FromMicroseconds(9009); | |
297 TranslateCommonMetrics::ReportLanguageDetectionTime(begin, end); | |
298 recorder.CheckValueInLogs(9.009); | |
299 recorder.CheckTotalCount(1); | |
300 } | |
OLD | NEW |