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 }; 24 25 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(FileErrorSourceStrings) == 26 FILE_ERROR_SOURCE_COUNT, 27 file_error_source_enum_has_changed); 28 29 void RecordFileErrorTypeCount(FileErrorSource source) { 30 UMA_HISTOGRAM_ENUMERATION( 31 "Net.FileErrorType_Counts", source, FILE_ERROR_SOURCE_COUNT); 32 } 33 34 } // namespace 35 36 void RecordFileError(int error, FileErrorSource source, bool record) { 37 LOG(ERROR) << " " << __FUNCTION__ << "()" 38 << " error = " << error 39 << " source = " << source 40 << " record = " << record; 41 42 if (!record) 43 return; 44 45 RecordFileErrorTypeCount(source); 46 47 int bucket = GetFileErrorUmaBucket(error); 48 49 // Fixed values per platform. 50 static const int max_bucket = MaxFileErrorUmaBucket(); 51 static const int max_error = MaxFileErrorUmaValue(); 52 53 switch(source) { 54 case FILE_ERROR_SOURCE_OPEN: 55 UMA_HISTOGRAM_ENUMERATION("Net.FileError_Open", error, max_error); 56 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Open", bucket, max_bucket); 57 break; 58 59 case FILE_ERROR_SOURCE_WRITE: 60 UMA_HISTOGRAM_ENUMERATION("Net.FileError_Write", error, max_error); 61 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Write", bucket, max_bucket); 62 break; 63 64 case FILE_ERROR_SOURCE_READ: 65 UMA_HISTOGRAM_ENUMERATION("Net.FileError_Read", error, max_error); 66 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Read", bucket, max_bucket); 67 break; 68 69 case FILE_ERROR_SOURCE_SEEK: 70 UMA_HISTOGRAM_ENUMERATION("Net.FileError_Seek", error, max_error); 71 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Seek", bucket, max_bucket); 72 break; 73 74 case FILE_ERROR_SOURCE_FLUSH: 75 UMA_HISTOGRAM_ENUMERATION("Net.FileError_Flush", error, max_error); 76 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_Flush", bucket, max_bucket); 77 break; 78 79 case FILE_ERROR_SOURCE_SET_EOF: 80 UMA_HISTOGRAM_ENUMERATION("Net.FileError_SetEof", error, max_error); 81 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_SetEof", bucket, 82 max_bucket); 83 break; 84 85 case FILE_ERROR_SOURCE_GET_SIZE: 86 UMA_HISTOGRAM_ENUMERATION("Net.FileError_GetSize", error, max_error); 87 UMA_HISTOGRAM_ENUMERATION("Net.FileErrorRange_GetSize", bucket, 88 max_bucket); 89 break; 90 91 default: 92 break; 93 } 94 } 95 96 const char* GetFileErrorSourceName(FileErrorSource source) { 97 DCHECK_NE(FILE_ERROR_SOURCE_COUNT, source); 98 return FileErrorSourceStrings[source]; 99 } 100 101 } // namespace net 102