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 |