Chromium Code Reviews| 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 GetErrorBucket(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. | |
|
cbentzel
2011/08/31 19:53:23
This could be 2 * n and the "in-range" as 2*n+1 to
| |
| 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 MaxBucket() { | |
| 139 return 2 * kNumErrorRanges + 2; | |
| 140 } | |
| 141 | |
| 142 int MaxError() { | |
| 143 return kErrorRangeList[0].high + 1; | |
| 144 } | |
| 145 | |
| 146 } // namespace net | |
| OLD | NEW |