Updating trunk VERSION from 1014.0 to 1015.0
[chromium-blink-merge.git] / net / base / file_stream_metrics_win.cc
blobc397e4b5ee9f33ed2e24dac9da2e220f39346f71
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.
5 #include "net/base/file_stream_metrics.h"
7 #include <windows.h>
9 #include "base/basictypes.h"
11 namespace net {
13 namespace {
15 struct Range {
16 int low;
17 int high;
20 // The error range list is extracted from WinError.h.
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.
112 const size_t kNumErrorRanges = ARRAYSIZE_UNSAFE(kErrorRangeList);
114 } // namespace
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);
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.
134 // After the last bucket.
135 return 2 * kNumErrorRanges + 1;
138 int MaxFileErrorUmaBucket() {
139 return 2 * kNumErrorRanges + 2;
142 int MaxFileErrorUmaValue() {
143 return kErrorRangeList[0].high + 1;
146 } // namespace net