| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 // This file contains macros to simplify histogram reporting from the disk | 5 // This file contains macros to simplify histogram reporting from the disk | 
| 6 // cache. The main issue is that we want to have separate histograms for each | 6 // cache. The main issue is that we want to have separate histograms for each | 
| 7 // type of cache (regular vs. media, etc), without adding the complexity of | 7 // type of cache (regular vs. media, etc), without adding the complexity of | 
| 8 // keeping track of a potentially large number of histogram objects that have to | 8 // keeping track of a potentially large number of histogram objects that have to | 
| 9 // survive the backend object that created them. | 9 // survive the backend object that created them. | 
| 10 | 10 | 
| 11 #ifndef NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 11 #ifndef NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 
| 12 #define NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 12 #define NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 
| 13 | 13 | 
| 14 // ----------------------------------------------------------------------------- | 14 // ----------------------------------------------------------------------------- | 
| 15 | 15 | 
| 16 // These histograms follow the definition of UMA_HISTOGRAMN_XXX except that | 16 // These histograms follow the definition of UMA_HISTOGRAMN_XXX except that | 
| 17 // whenever the name changes (the experiment group changes), the histrogram | 17 // the counter is not cached locally. | 
| 18 // object is re-created. |  | 
| 19 // Note: These macros are only run on one thread, so the declarations of | 18 // Note: These macros are only run on one thread, so the declarations of | 
| 20 // |counter| was made static (i.e., there will be no race for reinitialization). | 19 // |counter| could be static (since there will be no race for reinitialization), | 
|  | 20 // but as they are used (with new names every time) in CACHE_UMA that | 
|  | 21 // would not work and if CACHE_UMA is made to have one instance for every | 
|  | 22 // cache, they will generate too much non-reusable machine code. | 
| 21 | 23 | 
| 22 #define CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, min, max, bucket_count) \ | 24 #define CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, min, max, bucket_count) \ | 
| 23     do { \ | 25     do { \ | 
| 24       static base::HistogramBase* counter(NULL); \ | 26       base::HistogramBase* counter = base::Histogram::FactoryGet( \ | 
| 25       if (!counter || name != counter->histogram_name()) \ |  | 
| 26         counter = base::Histogram::FactoryGet( \ |  | 
| 27             name, min, max, bucket_count, \ | 27             name, min, max, bucket_count, \ | 
| 28             base::Histogram::kUmaTargetedHistogramFlag); \ | 28             base::Histogram::kUmaTargetedHistogramFlag); \ | 
| 29       counter->Add(sample); \ | 29       counter->Add(sample); \ | 
| 30     } while (0) | 30     } while (0) | 
| 31 | 31 | 
| 32 #define CACHE_HISTOGRAM_COUNTS(name, sample) CACHE_HISTOGRAM_CUSTOM_COUNTS( \ | 32 #define CACHE_HISTOGRAM_COUNTS(name, sample) CACHE_HISTOGRAM_CUSTOM_COUNTS( \ | 
| 33     name, sample, 1, 1000000, 50) | 33     name, sample, 1, 1000000, 50) | 
| 34 | 34 | 
| 35 #define CACHE_HISTOGRAM_COUNTS_10000(name, sample) \ | 35 #define CACHE_HISTOGRAM_COUNTS_10000(name, sample) \ | 
| 36     CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 10000, 50) | 36     CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 10000, 50) | 
| 37 | 37 | 
| 38 #define CACHE_HISTOGRAM_COUNTS_50000(name, sample) \ | 38 #define CACHE_HISTOGRAM_COUNTS_50000(name, sample) \ | 
| 39     CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 50000000, 50) | 39     CACHE_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 50000000, 50) | 
| 40 | 40 | 
| 41 #define CACHE_HISTOGRAM_CUSTOM_TIMES(name, sample, min, max, bucket_count) \ | 41 #define CACHE_HISTOGRAM_CUSTOM_TIMES(name, sample, min, max, bucket_count) \ | 
| 42     do { \ | 42     do { \ | 
| 43       static base::HistogramBase* counter(NULL); \ | 43       base::HistogramBase* counter = base::Histogram::FactoryTimeGet( \ | 
| 44       if (!counter || name != counter->histogram_name()) \ |  | 
| 45         counter = base::Histogram::FactoryTimeGet( \ |  | 
| 46             name, min, max, bucket_count, \ | 44             name, min, max, bucket_count, \ | 
| 47             base::Histogram::kUmaTargetedHistogramFlag); \ | 45             base::Histogram::kUmaTargetedHistogramFlag); \ | 
| 48       counter->AddTime(sample); \ | 46       counter->AddTime(sample); \ | 
| 49     } while (0) | 47     } while (0) | 
| 50 | 48 | 
| 51 #define CACHE_HISTOGRAM_TIMES(name, sample) CACHE_HISTOGRAM_CUSTOM_TIMES( \ | 49 #define CACHE_HISTOGRAM_TIMES(name, sample) CACHE_HISTOGRAM_CUSTOM_TIMES( \ | 
| 52     name, sample, base::TimeDelta::FromMilliseconds(1), \ | 50     name, sample, base::TimeDelta::FromMilliseconds(1), \ | 
| 53     base::TimeDelta::FromSeconds(10), 50) | 51     base::TimeDelta::FromSeconds(10), 50) | 
| 54 | 52 | 
| 55 #define CACHE_HISTOGRAM_ENUMERATION(name, sample, boundary_value) do { \ | 53 #define CACHE_HISTOGRAM_ENUMERATION(name, sample, boundary_value) do { \ | 
| 56     static base::HistogramBase* counter(NULL); \ | 54     base::HistogramBase* counter = base::LinearHistogram::FactoryGet( \ | 
| 57     if (!counter || name != counter->histogram_name()) \ |  | 
| 58       counter = base::LinearHistogram::FactoryGet( \ |  | 
| 59                     name, 1, boundary_value, boundary_value + 1, \ | 55                     name, 1, boundary_value, boundary_value + 1, \ | 
| 60                     base::Histogram::kUmaTargetedHistogramFlag); \ | 56                     base::Histogram::kUmaTargetedHistogramFlag); \ | 
| 61     counter->Add(sample); \ | 57     counter->Add(sample); \ | 
| 62   } while (0) | 58   } while (0) | 
| 63 | 59 | 
| 64 #define CACHE_HISTOGRAM_PERCENTAGE(name, under_one_hundred) \ | 60 #define CACHE_HISTOGRAM_PERCENTAGE(name, under_one_hundred) \ | 
| 65     CACHE_HISTOGRAM_ENUMERATION(name, under_one_hundred, 101) | 61     CACHE_HISTOGRAM_ENUMERATION(name, under_one_hundred, 101) | 
| 66 | 62 | 
| 67 // ----------------------------------------------------------------------------- | 63 // ----------------------------------------------------------------------------- | 
| 68 | 64 | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 90 // be used as: | 86 // be used as: | 
| 91 //  CACHE_UMA(COUNTS, "MyName", 0, 20); | 87 //  CACHE_UMA(COUNTS, "MyName", 0, 20); | 
| 92 //  CACHE_UMA(COUNTS, "MyExperiment", 530, 55); | 88 //  CACHE_UMA(COUNTS, "MyExperiment", 530, 55); | 
| 93 // which roughly translates to: | 89 // which roughly translates to: | 
| 94 //  UMA_HISTOGRAM_COUNTS("DiskCache.2.MyName", 20);  // "2" is the CacheType. | 90 //  UMA_HISTOGRAM_COUNTS("DiskCache.2.MyName", 20);  // "2" is the CacheType. | 
| 95 //  UMA_HISTOGRAM_COUNTS("DiskCache.2.MyExperiment_530", 55); | 91 //  UMA_HISTOGRAM_COUNTS("DiskCache.2.MyExperiment_530", 55); | 
| 96 // | 92 // | 
| 97 #define CACHE_UMA(type, name, experiment, sample) {\ | 93 #define CACHE_UMA(type, name, experiment, sample) {\ | 
| 98     const std::string my_name =\ | 94     const std::string my_name =\ | 
| 99         CACHE_UMA_BACKEND_IMPL_OBJ->HistogramName(name, experiment);\ | 95         CACHE_UMA_BACKEND_IMPL_OBJ->HistogramName(name, experiment);\ | 
| 100     switch (CACHE_UMA_BACKEND_IMPL_OBJ->cache_type()) {\ | 96     CACHE_HISTOGRAM_##type(my_name.data(), sample);\ | 
| 101       case net::DISK_CACHE:\ |  | 
| 102         CACHE_HISTOGRAM_##type(my_name.data(), sample);\ |  | 
| 103         break;\ |  | 
| 104       case net::MEDIA_CACHE:\ |  | 
| 105         CACHE_HISTOGRAM_##type(my_name.data(), sample);\ |  | 
| 106         break;\ |  | 
| 107       case net::APP_CACHE:\ |  | 
| 108         CACHE_HISTOGRAM_##type(my_name.data(), sample);\ |  | 
| 109         break;\ |  | 
| 110       case net::SHADER_CACHE:\ |  | 
| 111         CACHE_HISTOGRAM_##type(my_name.data(), sample);\ |  | 
| 112         break;\ |  | 
| 113       case net::PNACL_CACHE:\ |  | 
| 114         CACHE_HISTOGRAM_##type(my_name.data(), sample);\ |  | 
| 115         break;\ |  | 
| 116       default:\ |  | 
| 117         NOTREACHED();\ |  | 
| 118         break;\ |  | 
| 119     }\ |  | 
| 120   } | 97   } | 
| 121 | 98 | 
| 122 #endif  // NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 99 #endif  // NET_DISK_CACHE_BLOCKFILE_HISTOGRAM_MACROS_H_ | 
| OLD | NEW | 
|---|