15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/base/model_type.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// if we feel the min, max, or bucket count amount are not appropriate. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name, time, base::TimeDelta::FromMilliseconds(1), \ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromHours(1), 50) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macro for datatype specific histograms. For each datatype, invokes 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a pre-defined PER_DATA_TYPE_MACRO(type_str), where |type_str| is the string 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version of the datatype. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example usage (ignoring newlines necessary for multiline macro): 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// std::vector<syncer::ModelType> types = GetEntryTypes(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for (int i = 0; i < types.size(); ++i) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// #define PER_DATA_TYPE_MACRO(type_str) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UMA_HISTOGRAM_ENUMERATION("Sync." type_str "StartFailures", 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// error, max_error); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SYNC_DATA_TYPE_HISTOGRAM(types[i]); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// #undef PER_DATA_TYPE_MACRO 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(zea): Once visual studio supports proper variadic argument replacement 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in macros, pass in the histogram method directly as a parameter. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See http://connect.microsoft.com/VisualStudio/feedback/details/380090/ 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// variadic-macro-replacement#details 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_DATA_TYPE_HISTOGRAM(datatype) \ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { \ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (datatype) { \ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::BOOKMARKS: \ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Bookmarks"); \ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::PREFERENCES: \ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Preferences"); \ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::PASSWORDS: \ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Passwords"); \ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::AUTOFILL: \ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Autofill"); \ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::AUTOFILL_PROFILE: \ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("AutofillProfiles"); \ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::THEMES: \ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Themes"); \ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::TYPED_URLS: \ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("TypedUrls"); \ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::EXTENSIONS: \ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Extensions"); \ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::NIGORI: \ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Nigori"); \ 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::SEARCH_ENGINES: \ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("SearchEngines"); \ 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::SESSIONS: \ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Sessions"); \ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::APPS: \ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Apps"); \ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ::syncer::APP_LIST: \ 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PER_DATA_TYPE_MACRO("AppList"); \ 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; \ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::APP_SETTINGS: \ 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("AppSettings"); \ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::EXTENSION_SETTINGS: \ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("ExtensionSettings"); \ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::APP_NOTIFICATIONS: \ 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("AppNotifications"); \ 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::HISTORY_DELETE_DIRECTIVES: \ 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("HistoryDeleteDirectives"); \ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ::syncer::SYNCED_NOTIFICATIONS: \ 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("SyncedNotifications"); \ 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ::syncer::SYNCED_NOTIFICATION_APP_INFO: \ 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PER_DATA_TYPE_MACRO("SyncedNotificationAppInfo"); \ 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; \ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::DEVICE_INFO: \ 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("DeviceInfo"); \ 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ::syncer::EXPERIMENTS: \ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PER_DATA_TYPE_MACRO("Experiments"); \ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; \ 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ::syncer::PRIORITY_PREFERENCES :\ 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("PriorityPreferences"); \ 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ::syncer::DICTIONARY: \ 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("Dictionary"); \ 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ::syncer::FAVICON_IMAGES: \ 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("FaviconImages"); \ 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ::syncer::FAVICON_TRACKING: \ 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("FaviconTracking"); \ 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case ::syncer::SUPERVISED_USER_SETTINGS: \ 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PER_DATA_TYPE_MACRO("ManagedUserSetting"); \ 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; \ 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case ::syncer::SUPERVISED_USERS: \ 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PER_DATA_TYPE_MACRO("ManagedUser"); \ 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) break; \ 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case ::syncer::SUPERVISED_USER_SHARED_SETTINGS: \ 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PER_DATA_TYPE_MACRO("ManagedUserSharedSetting"); \ 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; \ 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) case ::syncer::ARTICLES: \ 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PER_DATA_TYPE_MACRO("Article"); \ 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) break; \ 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case ::syncer::PROXY_TABS: \ 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PER_DATA_TYPE_MACRO("Tabs"); \ 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; \ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: \ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Unknown datatype " \ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ::syncer::ModelTypeToString(datatype); \ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (0) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ 136