OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
Jói
2013/10/02 12:12:11
Any chance to get this file move recognized, e.g.
droger
2013/10/02 12:33:12
It worked!
| |
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 "components/translate/common/translate_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(translate::MetricsNameIndex index, | |
37 int expected_not_provided, | |
38 int expected_valid, | |
39 int expected_invalid) { | |
40 ASSERT_EQ(translate::GetMetricsName(index), key_); | |
41 | |
42 Snapshot(); | |
43 | |
44 EXPECT_EQ(expected_not_provided, | |
45 GetCountWithoutSnapshot(translate::LANGUAGE_NOT_PROVIDED)); | |
46 EXPECT_EQ(expected_valid, | |
47 GetCountWithoutSnapshot(translate::LANGUAGE_VALID)); | |
48 EXPECT_EQ(expected_invalid, | |
49 GetCountWithoutSnapshot(translate::LANGUAGE_INVALID)); | |
50 } | |
51 | |
52 void CheckLanguageVerification(int expected_cld_disabled, | |
53 int expected_cld_only, | |
54 int expected_unknown, | |
55 int expected_cld_agree, | |
56 int expected_cld_disagree, | |
57 int expected_trust_cld, | |
58 int expected_cld_complement_sub_code) { | |
59 ASSERT_EQ(translate::GetMetricsName(translate::UMA_LANGUAGE_VERIFICATION), | |
60 key_); | |
61 | |
62 Snapshot(); | |
63 | |
64 EXPECT_EQ( | |
65 expected_cld_disabled, | |
66 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_DISABLED)); | |
67 EXPECT_EQ( | |
68 expected_cld_only, | |
69 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_ONLY)); | |
70 EXPECT_EQ( | |
71 expected_unknown, | |
72 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_UNKNOWN)); | |
73 EXPECT_EQ( | |
74 expected_cld_agree, | |
75 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_AGREE)); | |
76 EXPECT_EQ( | |
77 expected_cld_disagree, | |
78 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_DISAGREE)); | |
79 EXPECT_EQ( | |
80 expected_trust_cld, | |
81 GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_TRUST_CLD)); | |
82 EXPECT_EQ(expected_cld_complement_sub_code, | |
83 GetCountWithoutSnapshot( | |
84 translate::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE)); | |
85 } | |
86 | |
87 void CheckScheme(int expected_http, int expected_https, int expected_others) { | |
88 ASSERT_EQ(translate::GetMetricsName(translate::UMA_PAGE_SCHEME), key_); | |
89 | |
90 Snapshot(); | |
91 | |
92 EXPECT_EQ(expected_http, GetCountWithoutSnapshot(translate::SCHEME_HTTP)); | |
93 EXPECT_EQ(expected_https, GetCountWithoutSnapshot(translate::SCHEME_HTTPS)); | |
94 EXPECT_EQ(expected_others, | |
95 GetCountWithoutSnapshot(translate::SCHEME_OTHERS)); | |
96 } | |
97 | |
98 void CheckTotalCount(int count) { | |
99 Snapshot(); | |
100 EXPECT_EQ(count, GetTotalCount()); | |
101 } | |
102 | |
103 void CheckValueInLogs(double value) { | |
104 Snapshot(); | |
105 ASSERT_TRUE(samples_.get()); | |
106 for (scoped_ptr<SampleCountIterator> i = samples_->Iterator(); !i->Done(); | |
107 i->Next()) { | |
108 HistogramBase::Sample min; | |
109 HistogramBase::Sample max; | |
110 HistogramBase::Count count; | |
111 i->Get(&min, &max, &count); | |
112 if (min <= value && value <= max && count >= 1) | |
113 return; | |
114 } | |
115 EXPECT_FALSE(true); | |
116 } | |
117 | |
118 HistogramBase::Count GetCount(HistogramBase::Sample value) { | |
119 Snapshot(); | |
120 return GetCountWithoutSnapshot(value); | |
121 } | |
122 | |
123 private: | |
124 void Snapshot() { | |
125 HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_); | |
126 if (!histogram) | |
127 return; | |
128 samples_ = histogram->SnapshotSamples(); | |
129 } | |
130 | |
131 HistogramBase::Count GetCountWithoutSnapshot(HistogramBase::Sample value) { | |
132 if (!samples_.get()) | |
133 return 0; | |
134 HistogramBase::Count count = samples_->GetCount(value); | |
135 if (!base_samples_.get()) | |
136 return count; | |
137 return count - base_samples_->GetCount(value); | |
138 } | |
139 | |
140 HistogramBase::Count GetTotalCount() { | |
141 if (!samples_.get()) | |
142 return 0; | |
143 HistogramBase::Count count = samples_->TotalCount(); | |
144 if (!base_samples_.get()) | |
145 return count; | |
146 return count - base_samples_->TotalCount(); | |
147 } | |
148 | |
149 std::string key_; | |
150 scoped_ptr<HistogramSamples> base_samples_; | |
151 scoped_ptr<HistogramSamples> samples_; | |
152 | |
153 DISALLOW_COPY_AND_ASSIGN(MetricsRecorder); | |
154 }; | |
155 | |
156 } // namespace | |
157 | |
158 TEST(TranslateMetricsTest, ReportContentLanguage) { | |
159 MetricsRecorder recorder( | |
160 translate::GetMetricsName(translate::UMA_CONTENT_LANGUAGE)); | |
161 | |
162 recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 0, 0, 0); | |
163 translate::ReportContentLanguage(std::string(), std::string()); | |
164 recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 0, 0); | |
165 translate::ReportContentLanguage("ja_JP", "ja-JP"); | |
166 recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 0, 1); | |
167 translate::ReportContentLanguage("en", "en"); | |
168 recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 1, 1); | |
169 } | |
170 | |
171 TEST(TranslateMetricsTest, ReportHtmlLang) { | |
172 MetricsRecorder recorder(translate::GetMetricsName(translate::UMA_HTML_LANG)); | |
173 | |
174 recorder.CheckLanguage(translate::UMA_HTML_LANG, 0, 0, 0); | |
175 translate::ReportHtmlLang(std::string(), std::string()); | |
176 recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 0, 0); | |
177 translate::ReportHtmlLang("ja_JP", "ja-JP"); | |
178 recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 0, 1); | |
179 translate::ReportHtmlLang("en", "en"); | |
180 recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 1, 1); | |
181 } | |
182 | |
183 TEST(TranslateMetricsTest, ReportLanguageVerification) { | |
184 MetricsRecorder recorder( | |
185 translate::GetMetricsName(translate::UMA_LANGUAGE_VERIFICATION)); | |
186 | |
187 recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0); | |
188 translate::ReportLanguageVerification( | |
189 translate::LANGUAGE_VERIFICATION_CLD_DISABLED); | |
190 recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0); | |
191 translate::ReportLanguageVerification( | |
192 translate::LANGUAGE_VERIFICATION_CLD_ONLY); | |
193 recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0); | |
194 translate::ReportLanguageVerification( | |
195 translate::LANGUAGE_VERIFICATION_UNKNOWN); | |
196 recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0); | |
197 translate::ReportLanguageVerification( | |
198 translate::LANGUAGE_VERIFICATION_CLD_AGREE); | |
199 recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0); | |
200 translate::ReportLanguageVerification( | |
201 translate::LANGUAGE_VERIFICATION_CLD_DISAGREE); | |
202 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0); | |
203 translate::ReportLanguageVerification( | |
204 translate::LANGUAGE_VERIFICATION_TRUST_CLD); | |
205 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0); | |
206 translate::ReportLanguageVerification( | |
207 translate::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE); | |
208 recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1); | |
209 } | |
210 | |
211 TEST(TranslateMetricsTest, ReportTimeToBeReady) { | |
212 MetricsRecorder recorder( | |
213 translate::GetMetricsName(translate::UMA_TIME_TO_BE_READY)); | |
214 recorder.CheckTotalCount(0); | |
215 translate::ReportTimeToBeReady(3.14); | |
216 recorder.CheckValueInLogs(3.14); | |
217 recorder.CheckTotalCount(1); | |
218 } | |
219 | |
220 TEST(TranslateMetricsTest, ReportTimeToLoad) { | |
221 MetricsRecorder recorder( | |
222 translate::GetMetricsName(translate::UMA_TIME_TO_LOAD)); | |
223 recorder.CheckTotalCount(0); | |
224 translate::ReportTimeToLoad(573.0); | |
225 recorder.CheckValueInLogs(573.0); | |
226 recorder.CheckTotalCount(1); | |
227 } | |
228 | |
229 TEST(TranslateMetricsTest, ReportTimeToTranslate) { | |
230 MetricsRecorder recorder( | |
231 translate::GetMetricsName(translate::UMA_TIME_TO_TRANSLATE)); | |
232 recorder.CheckTotalCount(0); | |
233 translate::ReportTimeToTranslate(4649.0); | |
234 recorder.CheckValueInLogs(4649.0); | |
235 recorder.CheckTotalCount(1); | |
236 } | |
237 | |
238 TEST(TranslateMetricsTest, ReportUserActionDuration) { | |
239 MetricsRecorder recorder( | |
240 translate::GetMetricsName(translate::UMA_USER_ACTION_DURATION)); | |
241 recorder.CheckTotalCount(0); | |
242 TimeTicks begin = TimeTicks::Now(); | |
243 TimeTicks end = begin + base::TimeDelta::FromSeconds(3776); | |
244 translate::ReportUserActionDuration(begin, end); | |
245 recorder.CheckValueInLogs(3776000.0); | |
246 recorder.CheckTotalCount(1); | |
247 } | |
248 | |
249 TEST(TranslateMetricsTest, ReportPageScheme) { | |
250 MetricsRecorder recorder( | |
251 translate::GetMetricsName(translate::UMA_PAGE_SCHEME)); | |
252 recorder.CheckScheme(0, 0, 0); | |
253 translate::ReportPageScheme("http"); | |
254 recorder.CheckScheme(1, 0, 0); | |
255 translate::ReportPageScheme("https"); | |
256 recorder.CheckScheme(1, 1, 0); | |
257 translate::ReportPageScheme("ftp"); | |
258 recorder.CheckScheme(1, 1, 1); | |
259 } | |
260 | |
261 TEST(TranslateMetricsTest, ReportSimilarLanguageMatch) { | |
262 MetricsRecorder recorder( | |
263 translate::GetMetricsName(translate::UMA_SIMILAR_LANGUAGE_MATCH)); | |
264 recorder.CheckTotalCount(0); | |
265 EXPECT_EQ(0, recorder.GetCount(kTrue)); | |
266 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
267 translate::ReportSimilarLanguageMatch(true); | |
268 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
269 EXPECT_EQ(0, recorder.GetCount(kFalse)); | |
270 translate::ReportSimilarLanguageMatch(false); | |
271 EXPECT_EQ(1, recorder.GetCount(kTrue)); | |
272 EXPECT_EQ(1, recorder.GetCount(kFalse)); | |
273 } | |
274 | |
275 TEST(TranslateMetricsTest, ReportLanguageDetectionTime) { | |
276 MetricsRecorder recorder( | |
277 translate::GetMetricsName(translate::UMA_LANGUAGE_DETECTION)); | |
278 recorder.CheckTotalCount(0); | |
279 TimeTicks begin = TimeTicks::Now(); | |
280 TimeTicks end = begin + base::TimeDelta::FromMicroseconds(9009); | |
281 translate::ReportLanguageDetectionTime(begin, end); | |
282 recorder.CheckValueInLogs(9.009); | |
283 recorder.CheckTotalCount(1); | |
284 } | |
OLD | NEW |