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