| 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 |