| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "net/base/file_stream_metrics.h" |
| 6 |
| 7 #include <windows.h> |
| 8 |
| 9 #include "base/basictypes.h" |
| 10 |
| 11 namespace net { |
| 12 |
| 13 namespace { |
| 14 |
| 15 struct Range { |
| 16 int low; |
| 17 int high; |
| 18 }; |
| 19 |
| 20 // The error range list is extracted from WinError.h. |
| 21 // |
| 22 // NOTE: The gaps between the ranges need to be recorded too. |
| 23 // They will have odd-numbered buckets. |
| 24 const Range kErrorRangeList[] = { |
| 25 { 0, 321 }, // 2. |
| 26 { 335, 371 }, // 4. |
| 27 { 383, 387 }, // 6. |
| 28 { 399, 404 }, // etc. |
| 29 { 415, 418 }, |
| 30 { 431, 433 }, |
| 31 { 447, 868 }, |
| 32 { 994, 1471 }, |
| 33 { 1500, 1513 }, |
| 34 { 1536, 1553 }, |
| 35 { 1601, 1654 }, |
| 36 { 1700, 1834 }, |
| 37 { 1898, 1938 }, |
| 38 { 2000, 2024 }, |
| 39 { 2048, 2085 }, |
| 40 { 2108, 2110 }, |
| 41 { 2202, 2203 }, |
| 42 { 2250, 2251 }, |
| 43 { 2401, 2405 }, |
| 44 { 3000, 3021 }, |
| 45 { 3950, 3951 }, |
| 46 { 4000, 4007 }, |
| 47 { 4050, 4066 }, |
| 48 { 4096, 4116 }, |
| 49 { 4200, 4215 }, |
| 50 { 4300, 4353 }, |
| 51 { 4390, 4395 }, |
| 52 { 4500, 4501 }, |
| 53 { 4864, 4905 }, |
| 54 { 5001, 5090 }, |
| 55 { 5890, 5953 }, |
| 56 { 6000, 6023 }, |
| 57 { 6118, 6119 }, |
| 58 { 6200, 6201 }, |
| 59 { 6600, 6649 }, |
| 60 { 6700, 6732 }, |
| 61 { 6800, 6856 }, |
| 62 { 7001, 7071 }, |
| 63 { 8001, 8018 }, |
| 64 { 8192, 8263 }, |
| 65 { 8301, 8640 }, |
| 66 { 8704, 8705 }, |
| 67 { 8960, 9053 }, |
| 68 { 9216, 9218 }, |
| 69 { 9263, 9276 }, |
| 70 { 9472, 9506 }, |
| 71 { 9550, 9573 }, |
| 72 { 9600, 9622 }, |
| 73 { 9650, 9656 }, |
| 74 { 9688, 9723 }, |
| 75 { 9750, 9754 }, |
| 76 { 9800, 9802 }, |
| 77 { 9850, 9853 }, |
| 78 { 9900, 9907 }, |
| 79 { 10000, 10072 }, |
| 80 { 10091, 10113 }, |
| 81 { 11001, 11034 }, |
| 82 { 12288, 12335 }, |
| 83 { 12544, 12559 }, |
| 84 { 12595, 12597 }, |
| 85 { 12801, 12803 }, |
| 86 { 13000, 13026 }, |
| 87 { 13800, 13933 }, |
| 88 { 14000, 14111 }, |
| 89 { 15000, 15039 }, |
| 90 { 15080, 15086 }, |
| 91 { 15100, 15109 }, |
| 92 { 15200, 15208 }, |
| 93 { 15250, 15251 }, |
| 94 { 15299, 15302 }, |
| 95 { 16385, 16436 }, |
| 96 { 18432, 18454 }, |
| 97 { 20480, 20486 }, |
| 98 { 24577, 24607 }, |
| 99 { 28673, 28698 }, |
| 100 { 32790, 32816 }, |
| 101 { 33281, 33322 }, |
| 102 { 35005, 35024 }, |
| 103 { 36000, 36004 }, |
| 104 { 40010, 40011 }, |
| 105 { 40067, 40069 }, |
| 106 { 53248, 53293 }, |
| 107 { 53376, 53382 }, |
| 108 { 57344, 57360 }, |
| 109 { 57377, 57394 }, |
| 110 { 65535, 65536 } // 2 * kNumErrorRanges. |
| 111 }; |
| 112 const size_t kNumErrorRanges = ARRAYSIZE_UNSAFE(kErrorRangeList); |
| 113 |
| 114 } // namespace |
| 115 |
| 116 // Windows has very many errors. We're not interested in most of them, but we |
| 117 // don't know which ones are significant. |
| 118 // This function maps error ranges to specific buckets. |
| 119 // If we get hits on the buckets, we can add those values to the values we |
| 120 // record individually. |
| 121 // If we get values *between* the buckets, we record those as buckets too. |
| 122 int GetFileErrorUmaBucket(int error) { |
| 123 error = HRESULT_CODE(error); |
| 124 |
| 125 // This is a linear search, but of a short fixed-size array. |
| 126 // It also gets called infrequently, on errors. |
| 127 for (size_t n = 0; n < kNumErrorRanges; ++n) { |
| 128 if (error < kErrorRangeList[n].low) |
| 129 return (2 * (n + 1)) - 1; // In gap before the range. |
| 130 if (error <= kErrorRangeList[n].high) |
| 131 return 2 * (n + 1); // In the range. |
| 132 } |
| 133 |
| 134 // After the last bucket. |
| 135 return 2 * kNumErrorRanges + 1; |
| 136 } |
| 137 |
| 138 int MaxFileErrorUmaBucket() { |
| 139 return 2 * kNumErrorRanges + 2; |
| 140 } |
| 141 |
| 142 int MaxFileErrorUmaValue() { |
| 143 return kErrorRangeList[0].high + 1; |
| 144 } |
| 145 |
| 146 } // namespace net |
| OLD | NEW |