Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 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/core/browser/translate_browser_metrics.h"
      6 
      7 #include <string>
      8 
      9 #include "base/basictypes.h"
     10 #include "base/metrics/histogram.h"
     11 #include "base/metrics/sparse_histogram.h"
     12 #include "components/language_usage_metrics/language_usage_metrics.h"
     13 
     14 namespace {
     15 
     16 // Constant string values to indicate UMA names. All entries should have
     17 // a corresponding index in MetricsNameIndex and an entry in |kMetricsEntries|.
     18 const char kTranslateInitiationStatus[] =
     19     "Translate.InitiationStatus.v2";
     20 const char kTranslateReportLanguageDetectionError[] =
     21     "Translate.ReportLanguageDetectionError";
     22 const char kTranslateLocalesOnDisabledByPrefs[] =
     23     "Translate.LocalesOnDisabledByPrefs";
     24 const char kTranslateUndisplayableLanguage[] =
     25     "Translate.UndisplayableLanguage";
     26 const char kTranslateUnsupportedLanguageAtInitiation[] =
     27     "Translate.UnsupportedLanguageAtInitiation";
     28 
     29 struct MetricsEntry {
     30   TranslateBrowserMetrics::MetricsNameIndex index;
     31   const char* const name;
     32 };
     33 
     34 // This entry table should be updated when new UMA items are added.
     35 const MetricsEntry kMetricsEntries[] = {
     36   { TranslateBrowserMetrics::UMA_INITIATION_STATUS,
     37     kTranslateInitiationStatus },
     38   { TranslateBrowserMetrics::UMA_LANGUAGE_DETECTION_ERROR,
     39     kTranslateReportLanguageDetectionError },
     40   { TranslateBrowserMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS,
     41     kTranslateLocalesOnDisabledByPrefs },
     42   { TranslateBrowserMetrics::UMA_UNDISPLAYABLE_LANGUAGE,
     43     kTranslateUndisplayableLanguage },
     44   { TranslateBrowserMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION,
     45     kTranslateUnsupportedLanguageAtInitiation },
     46 };
     47 
     48 COMPILE_ASSERT(arraysize(kMetricsEntries) == TranslateBrowserMetrics::UMA_MAX,
     49                arraysize_of_kMetricsEntries_should_be_UMA_MAX);
     50 
     51 }  // namespace
     52 
     53 namespace TranslateBrowserMetrics {
     54 
     55 void ReportInitiationStatus(InitiationStatusType type) {
     56   UMA_HISTOGRAM_ENUMERATION(kTranslateInitiationStatus,
     57                             type,
     58                             INITIATION_STATUS_MAX);
     59 }
     60 
     61 void ReportLanguageDetectionError() {
     62   UMA_HISTOGRAM_BOOLEAN(kTranslateReportLanguageDetectionError, true);
     63 }
     64 
     65 void ReportLocalesOnDisabledByPrefs(const std::string& locale) {
     66   UMA_HISTOGRAM_SPARSE_SLOWLY(
     67       kTranslateLocalesOnDisabledByPrefs,
     68       language_usage_metrics::LanguageUsageMetrics::ToLanguageCode(locale));
     69 }
     70 
     71 void ReportUndisplayableLanguage(const std::string& language) {
     72   int language_code =
     73       language_usage_metrics::LanguageUsageMetrics::ToLanguageCode(language);
     74   UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateUndisplayableLanguage,
     75                               language_code);
     76 }
     77 
     78 void ReportUnsupportedLanguageAtInitiation(const std::string& language) {
     79   int language_code =
     80       language_usage_metrics::LanguageUsageMetrics::ToLanguageCode(language);
     81   UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateUnsupportedLanguageAtInitiation,
     82                               language_code);
     83 }
     84 
     85 const char* GetMetricsName(MetricsNameIndex index) {
     86   for (size_t i = 0; i < arraysize(kMetricsEntries); ++i) {
     87     if (kMetricsEntries[i].index == index)
     88       return kMetricsEntries[i].name;
     89   }
     90   NOTREACHED();
     91   return NULL;
     92 }
     93 
     94 }  // namespace TranslateBrowserMetrics
     95