Home | History | Annotate | Download | only in util
      1 // Copyright (c) 2012 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 #ifndef SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_
      6 #define SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_
      7 
      8 #include "base/metrics/histogram.h"
      9 #include "base/time/time.h"
     10 #include "sync/internal_api/public/base/model_type.h"
     11 
     12 // For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted
     13 // if we feel the min, max, or bucket count amount are not appropriate.
     14 #define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \
     15     name, time, base::TimeDelta::FromMilliseconds(1), \
     16     base::TimeDelta::FromHours(1), 50)
     17 
     18 // Helper macro for datatype specific histograms. For each datatype, invokes
     19 // a pre-defined PER_DATA_TYPE_MACRO(type_str), where |type_str| is the string
     20 // version of the datatype.
     21 //
     22 // Example usage (ignoring newlines necessary for multiline macro):
     23 // std::vector<syncer::ModelType> types = GetEntryTypes();
     24 // for (int i = 0; i < types.size(); ++i) {
     25 // #define PER_DATA_TYPE_MACRO(type_str)
     26 //     UMA_HISTOGRAM_ENUMERATION("Sync." type_str "StartFailures",
     27 //                               error, max_error);
     28 //   SYNC_DATA_TYPE_HISTOGRAM(types[i]);
     29 // #undef PER_DATA_TYPE_MACRO
     30 // }
     31 //
     32 // TODO(zea): Once visual studio supports proper variadic argument replacement
     33 // in macros, pass in the histogram method directly as a parameter.
     34 // See http://connect.microsoft.com/VisualStudio/feedback/details/380090/
     35 // variadic-macro-replacement#details
     36 #define SYNC_DATA_TYPE_HISTOGRAM(datatype) \
     37   do { \
     38     switch (datatype) { \
     39       case ::syncer::BOOKMARKS: \
     40         PER_DATA_TYPE_MACRO("Bookmarks"); \
     41         break; \
     42       case ::syncer::PREFERENCES: \
     43         PER_DATA_TYPE_MACRO("Preferences"); \
     44         break; \
     45       case ::syncer::PASSWORDS: \
     46         PER_DATA_TYPE_MACRO("Passwords"); \
     47         break; \
     48       case ::syncer::AUTOFILL: \
     49         PER_DATA_TYPE_MACRO("Autofill"); \
     50         break; \
     51       case ::syncer::AUTOFILL_PROFILE: \
     52         PER_DATA_TYPE_MACRO("AutofillProfiles"); \
     53         break; \
     54       case ::syncer::THEMES: \
     55         PER_DATA_TYPE_MACRO("Themes"); \
     56         break; \
     57       case ::syncer::TYPED_URLS: \
     58         PER_DATA_TYPE_MACRO("TypedUrls"); \
     59         break; \
     60       case ::syncer::EXTENSIONS: \
     61         PER_DATA_TYPE_MACRO("Extensions"); \
     62         break; \
     63       case ::syncer::NIGORI: \
     64         PER_DATA_TYPE_MACRO("Nigori"); \
     65         break; \
     66       case ::syncer::SEARCH_ENGINES: \
     67         PER_DATA_TYPE_MACRO("SearchEngines"); \
     68         break; \
     69       case ::syncer::SESSIONS: \
     70         PER_DATA_TYPE_MACRO("Sessions"); \
     71         break; \
     72       case ::syncer::APPS: \
     73         PER_DATA_TYPE_MACRO("Apps"); \
     74         break; \
     75       case ::syncer::APP_LIST: \
     76         PER_DATA_TYPE_MACRO("AppList"); \
     77         break; \
     78       case ::syncer::APP_SETTINGS: \
     79         PER_DATA_TYPE_MACRO("AppSettings"); \
     80         break; \
     81       case ::syncer::EXTENSION_SETTINGS: \
     82         PER_DATA_TYPE_MACRO("ExtensionSettings"); \
     83         break; \
     84       case ::syncer::APP_NOTIFICATIONS: \
     85         PER_DATA_TYPE_MACRO("AppNotifications"); \
     86         break; \
     87       case ::syncer::HISTORY_DELETE_DIRECTIVES: \
     88         PER_DATA_TYPE_MACRO("HistoryDeleteDirectives"); \
     89         break; \
     90       case ::syncer::SYNCED_NOTIFICATIONS: \
     91         PER_DATA_TYPE_MACRO("SyncedNotifications"); \
     92         break; \
     93       case ::syncer::SYNCED_NOTIFICATION_APP_INFO: \
     94         PER_DATA_TYPE_MACRO("SyncedNotificationAppInfo"); \
     95         break; \
     96       case ::syncer::DEVICE_INFO: \
     97         PER_DATA_TYPE_MACRO("DeviceInfo"); \
     98         break; \
     99       case ::syncer::EXPERIMENTS: \
    100         PER_DATA_TYPE_MACRO("Experiments"); \
    101         break; \
    102       case ::syncer::PRIORITY_PREFERENCES :\
    103         PER_DATA_TYPE_MACRO("PriorityPreferences"); \
    104         break; \
    105       case ::syncer::DICTIONARY: \
    106         PER_DATA_TYPE_MACRO("Dictionary"); \
    107         break; \
    108       case ::syncer::FAVICON_IMAGES: \
    109         PER_DATA_TYPE_MACRO("FaviconImages"); \
    110         break; \
    111       case ::syncer::FAVICON_TRACKING: \
    112         PER_DATA_TYPE_MACRO("FaviconTracking"); \
    113         break; \
    114       case ::syncer::SUPERVISED_USER_SETTINGS: \
    115         PER_DATA_TYPE_MACRO("ManagedUserSetting"); \
    116         break; \
    117       case ::syncer::SUPERVISED_USERS: \
    118         PER_DATA_TYPE_MACRO("ManagedUser"); \
    119         break; \
    120       case ::syncer::SUPERVISED_USER_SHARED_SETTINGS: \
    121         PER_DATA_TYPE_MACRO("ManagedUserSharedSetting"); \
    122         break; \
    123       case ::syncer::ARTICLES: \
    124         PER_DATA_TYPE_MACRO("Article"); \
    125         break; \
    126       case ::syncer::PROXY_TABS: \
    127         PER_DATA_TYPE_MACRO("Tabs"); \
    128         break; \
    129       default: \
    130         NOTREACHED() << "Unknown datatype " \
    131                      << ::syncer::ModelTypeToString(datatype);  \
    132     } \
    133   } while (0)
    134 
    135 #endif  // SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_
    136