• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "net/base/file_stream_metrics.h"
6 
7 #include "base/basictypes.h"
8 #include "base/logging.h"
9 #include "base/metrics/histogram.h"
10 
11 namespace net {
12 
13 namespace {
14 
15 const char* FileErrorSourceStrings[] = {
16   "OPEN",
17   "WRITE",
18   "READ",
19   "SEEK",
20   "FLUSH",
21   "SET_EOF",
22   "GET_SIZE",
23   "CLOSE"
24 };
25 
26 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(FileErrorSourceStrings) ==
27                    FILE_ERROR_SOURCE_COUNT,
28                file_error_source_enum_has_changed);
29 
RecordFileErrorTypeCount(FileErrorSource source)30 void RecordFileErrorTypeCount(FileErrorSource source) {
31   UMA_HISTOGRAM_ENUMERATION(
32       "Net.FileErrorType_Counts", source, FILE_ERROR_SOURCE_COUNT);
33 }
34 
35 }  // namespace
36 
RecordFileError(int error,FileErrorSource source,bool record)37 void RecordFileError(int error, FileErrorSource source, bool record) {
38   if (!record)
39     return;
40 
41   RecordFileErrorTypeCount(source);
42 
43   int bucket = GetFileErrorUmaBucket(error);
44 
45   // Fixed values per platform.
46   static const int max_bucket = MaxFileErrorUmaBucket();
47   static const int max_error = MaxFileErrorUmaValue();
48 
49   switch(source) {
50     case FILE_ERROR_SOURCE_OPEN:
51       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Open", error, max_error);
52       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Open", bucket, max_bucket);
53       break;
54 
55     case FILE_ERROR_SOURCE_WRITE:
56       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Write", error, max_error);
57       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Write", bucket, max_bucket);
58       break;
59 
60     case FILE_ERROR_SOURCE_READ:
61       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Read", error, max_error);
62       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Read", bucket, max_bucket);
63       break;
64 
65     case FILE_ERROR_SOURCE_SEEK:
66       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Seek", error, max_error);
67       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Seek", bucket, max_bucket);
68       break;
69 
70     case FILE_ERROR_SOURCE_FLUSH:
71       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Flush", error, max_error);
72       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Flush", bucket, max_bucket);
73       break;
74 
75     case FILE_ERROR_SOURCE_SET_EOF:
76       UMA_HISTOGRAM_ENUMERATION("Net.FileError_SetEof", error, max_error);
77       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_SetEof", bucket,
78                                 max_bucket);
79       break;
80 
81     case FILE_ERROR_SOURCE_GET_SIZE:
82       UMA_HISTOGRAM_ENUMERATION("Net.FileError_GetSize", error, max_error);
83       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_GetSize", bucket,
84                                 max_bucket);
85       break;
86 
87     case FILE_ERROR_SOURCE_CLOSE:
88       UMA_HISTOGRAM_ENUMERATION("Net.FileError_Close", error, max_error);
89       UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Close", bucket,
90                                 max_bucket);
91       break;
92 
93     default:
94       break;
95   }
96 }
97 
GetFileErrorSourceName(FileErrorSource source)98 const char* GetFileErrorSourceName(FileErrorSource source) {
99   DCHECK_NE(FILE_ERROR_SOURCE_COUNT, source);
100   return FileErrorSourceStrings[source];
101 }
102 
103 }  // namespace net
104