| OLD | NEW |
| (Empty) |
| 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 CHROME_BROWSER_SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ | |
| 6 #define CHROME_BROWSER_SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ | |
| 7 #pragma once | |
| 8 | |
| 9 #include "base/metrics/histogram.h" | |
| 10 #include "base/time.h" | |
| 11 #include "chrome/browser/sync/syncable/model_type.h" | |
| 12 | |
| 13 // For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted | |
| 14 // if we feel the min, max, or bucket count amount are not appropriate. | |
| 15 #define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \ | |
| 16 name, time, base::TimeDelta::FromMilliseconds(1), \ | |
| 17 base::TimeDelta::FromHours(1), 50) | |
| 18 | |
| 19 // Helper macro for datatype specific histograms. For each datatype, invokes | |
| 20 // a pre-defined PER_DATA_TYPE_MACRO(type_str), where |type_str| is the string | |
| 21 // version of the datatype. | |
| 22 // | |
| 23 // Example usage (ignoring newlines necessary for multiline macro): | |
| 24 // std::vector<syncable::ModelType> types = GetEntryTypes(); | |
| 25 // for (int i = 0; i < types.size(); ++i) { | |
| 26 // #define PER_DATA_TYPE_MACRO(type_str) | |
| 27 // UMA_HISTOGRAM_ENUMERATION("Sync." type_str "StartFailures", | |
| 28 // error, max_error); | |
| 29 // SYNC_DATA_TYPE_HISTOGRAM(types[i]); | |
| 30 // #undef PER_DATA_TYPE_MACRO | |
| 31 // } | |
| 32 // | |
| 33 // TODO(zea): Once visual studio supports proper variadic argument replacement | |
| 34 // in macros, pass in the histogram method directly as a parameter. | |
| 35 // See http://connect.microsoft.com/VisualStudio/feedback/details/380090/ | |
| 36 // variadic-macro-replacement#details | |
| 37 #define SYNC_DATA_TYPE_HISTOGRAM(datatype) \ | |
| 38 do { \ | |
| 39 switch (datatype) { \ | |
| 40 case syncable::BOOKMARKS: \ | |
| 41 PER_DATA_TYPE_MACRO("Bookmarks"); \ | |
| 42 break; \ | |
| 43 case syncable::PREFERENCES: \ | |
| 44 PER_DATA_TYPE_MACRO("Preferences"); \ | |
| 45 break; \ | |
| 46 case syncable::PASSWORDS: \ | |
| 47 PER_DATA_TYPE_MACRO("Passwords"); \ | |
| 48 break; \ | |
| 49 case syncable::AUTOFILL: \ | |
| 50 PER_DATA_TYPE_MACRO("Autofill"); \ | |
| 51 break; \ | |
| 52 case syncable::AUTOFILL_PROFILE: \ | |
| 53 PER_DATA_TYPE_MACRO("AutofillProfiles"); \ | |
| 54 break; \ | |
| 55 case syncable::THEMES: \ | |
| 56 PER_DATA_TYPE_MACRO("Themes"); \ | |
| 57 break; \ | |
| 58 case syncable::TYPED_URLS: \ | |
| 59 PER_DATA_TYPE_MACRO("TypedUrls"); \ | |
| 60 break; \ | |
| 61 case syncable::EXTENSIONS: \ | |
| 62 PER_DATA_TYPE_MACRO("Extensions"); \ | |
| 63 break; \ | |
| 64 case syncable::NIGORI: \ | |
| 65 PER_DATA_TYPE_MACRO("Nigori"); \ | |
| 66 break; \ | |
| 67 case syncable::SEARCH_ENGINES: \ | |
| 68 PER_DATA_TYPE_MACRO("SearchEngines"); \ | |
| 69 break; \ | |
| 70 case syncable::SESSIONS: \ | |
| 71 PER_DATA_TYPE_MACRO("Sessions"); \ | |
| 72 break; \ | |
| 73 case syncable::APPS: \ | |
| 74 PER_DATA_TYPE_MACRO("Apps"); \ | |
| 75 break; \ | |
| 76 case syncable::APP_SETTINGS: \ | |
| 77 PER_DATA_TYPE_MACRO("AppSettings"); \ | |
| 78 break; \ | |
| 79 case syncable::EXTENSION_SETTINGS: \ | |
| 80 PER_DATA_TYPE_MACRO("ExtensionSettings"); \ | |
| 81 break; \ | |
| 82 case syncable::APP_NOTIFICATIONS: \ | |
| 83 PER_DATA_TYPE_MACRO("AppNotifications"); \ | |
| 84 break; \ | |
| 85 default: \ | |
| 86 NOTREACHED() << "Unknown datatype " \ | |
| 87 << syncable::ModelTypeToString(datatype); \ | |
| 88 } \ | |
| 89 } while (0) | |
| 90 | |
| 91 #endif // CHROME_BROWSER_SYNC_UTIL_DATA_TYPE_HISTOGRAM_H_ | |
| OLD | NEW |