| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/child/web_database_observer_impl.h" | 5 #include "content/child/web_database_observer_impl.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
| 9 #include "content/common/database_messages.h" | 9 #include "content/common/database_messages.h" |
| 10 #include "third_party/WebKit/public/platform/WebCString.h" | 10 #include "third_party/WebKit/public/platform/WebCString.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 if (websql_error == -1) | 31 if (websql_error == -1) |
| 32 return 0; // no error | 32 return 0; // no error |
| 33 | 33 |
| 34 // SQLExceptionCode starts at 1000 | 34 // SQLExceptionCode starts at 1000 |
| 35 if (websql_error >= 1000) | 35 if (websql_error >= 1000) |
| 36 websql_error -= 1000; | 36 websql_error -= 1000; |
| 37 | 37 |
| 38 return std::min(websql_error + 30, kResultHistogramSize - 1); | 38 return std::min(websql_error + 30, kResultHistogramSize - 1); |
| 39 } | 39 } |
| 40 | 40 |
| 41 #define UMA_HISTOGRAM_WEBSQL_RESULT(name, is_sync_database, \ | 41 #define UMA_HISTOGRAM_WEBSQL_RESULT(name, callsite, websql_error, sqlite_error)
\ |
| 42 callsite, websql_error, sqlite_error) \ | |
| 43 do { \ | 42 do { \ |
| 44 DCHECK(callsite < kCallsiteHistogramSize); \ | 43 DCHECK(callsite < kCallsiteHistogramSize); \ |
| 45 int result = DetermineHistogramResult(websql_error, sqlite_error); \ | 44 int result = DetermineHistogramResult(websql_error, sqlite_error); \ |
| 46 if (is_sync_database) { \ | 45 UMA_HISTOGRAM_ENUMERATION("websql.Async." name, \ |
| 47 UMA_HISTOGRAM_ENUMERATION("websql.Sync." name, \ | 46 result, kResultHistogramSize); \ |
| 48 result, kResultHistogramSize); \ | 47 if (result) { \ |
| 49 if (result) { \ | 48 UMA_HISTOGRAM_ENUMERATION("websql.Async." name ".ErrorSite", \ |
| 50 UMA_HISTOGRAM_ENUMERATION("websql.Sync." name ".ErrorSite", \ | 49 callsite, kCallsiteHistogramSize); \ |
| 51 callsite, kCallsiteHistogramSize); \ | |
| 52 } \ | |
| 53 } else { \ | |
| 54 UMA_HISTOGRAM_ENUMERATION("websql.Async." name, \ | |
| 55 result, kResultHistogramSize); \ | |
| 56 if (result) { \ | |
| 57 UMA_HISTOGRAM_ENUMERATION("websql.Async." name ".ErrorSite", \ | |
| 58 callsite, kCallsiteHistogramSize); \ | |
| 59 } \ | |
| 60 } \ | 50 } \ |
| 61 } while (0) | 51 } while (0) |
| 62 | |
| 63 } // namespace | 52 } // namespace |
| 64 | 53 |
| 65 WebDatabaseObserverImpl::WebDatabaseObserverImpl(IPC::SyncMessageFilter* sender) | 54 WebDatabaseObserverImpl::WebDatabaseObserverImpl(IPC::SyncMessageFilter* sender) |
| 66 : sender_(sender), | 55 : sender_(sender), |
| 67 open_connections_(new storage::DatabaseConnectionsWrapper) { | 56 open_connections_(new storage::DatabaseConnectionsWrapper) { |
| 68 DCHECK(sender); | 57 DCHECK(sender); |
| 69 } | 58 } |
| 70 | 59 |
| 71 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() { | 60 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() { |
| 72 } | 61 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 95 const WebString& database_name) { | 84 const WebString& database_name) { |
| 96 sender_->Send(new DatabaseHostMsg_Closed( | 85 sender_->Send(new DatabaseHostMsg_Closed( |
| 97 origin_identifier.utf8(), database_name)); | 86 origin_identifier.utf8(), database_name)); |
| 98 open_connections_->RemoveOpenConnection(origin_identifier.utf8(), | 87 open_connections_->RemoveOpenConnection(origin_identifier.utf8(), |
| 99 database_name); | 88 database_name); |
| 100 } | 89 } |
| 101 | 90 |
| 102 void WebDatabaseObserverImpl::reportOpenDatabaseResult( | 91 void WebDatabaseObserverImpl::reportOpenDatabaseResult( |
| 103 const WebString& origin_identifier, | 92 const WebString& origin_identifier, |
| 104 const WebString& database_name, | 93 const WebString& database_name, |
| 105 bool is_sync_database, | |
| 106 int callsite, int websql_error, int sqlite_error) { | 94 int callsite, int websql_error, int sqlite_error) { |
| 107 UMA_HISTOGRAM_WEBSQL_RESULT("OpenResult", is_sync_database, callsite, | 95 UMA_HISTOGRAM_WEBSQL_RESULT("OpenResult", callsite, |
| 108 websql_error, sqlite_error); | 96 websql_error, sqlite_error); |
| 109 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 97 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 110 } | 98 } |
| 111 | 99 |
| 112 void WebDatabaseObserverImpl::reportChangeVersionResult( | 100 void WebDatabaseObserverImpl::reportChangeVersionResult( |
| 113 const WebString& origin_identifier, | 101 const WebString& origin_identifier, |
| 114 const WebString& database_name, | 102 const WebString& database_name, |
| 115 bool is_sync_database, | |
| 116 int callsite, int websql_error, int sqlite_error) { | 103 int callsite, int websql_error, int sqlite_error) { |
| 117 UMA_HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", is_sync_database, callsite, | 104 UMA_HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", callsite, |
| 118 websql_error, sqlite_error); | 105 websql_error, sqlite_error); |
| 119 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 106 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 120 } | 107 } |
| 121 | 108 |
| 122 void WebDatabaseObserverImpl::reportStartTransactionResult( | 109 void WebDatabaseObserverImpl::reportStartTransactionResult( |
| 123 const WebString& origin_identifier, | 110 const WebString& origin_identifier, |
| 124 const WebString& database_name, | 111 const WebString& database_name, |
| 125 bool is_sync_database, | |
| 126 int callsite, int websql_error, int sqlite_error) { | 112 int callsite, int websql_error, int sqlite_error) { |
| 127 UMA_HISTOGRAM_WEBSQL_RESULT("BeginResult", is_sync_database, callsite, | 113 UMA_HISTOGRAM_WEBSQL_RESULT("BeginResult", callsite, |
| 128 websql_error, sqlite_error); | 114 websql_error, sqlite_error); |
| 129 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 115 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 130 } | 116 } |
| 131 | 117 |
| 132 void WebDatabaseObserverImpl::reportCommitTransactionResult( | 118 void WebDatabaseObserverImpl::reportCommitTransactionResult( |
| 133 const WebString& origin_identifier, | 119 const WebString& origin_identifier, |
| 134 const WebString& database_name, | 120 const WebString& database_name, |
| 135 bool is_sync_database, | |
| 136 int callsite, int websql_error, int sqlite_error) { | 121 int callsite, int websql_error, int sqlite_error) { |
| 137 UMA_HISTOGRAM_WEBSQL_RESULT("CommitResult", is_sync_database, callsite, | 122 UMA_HISTOGRAM_WEBSQL_RESULT("CommitResult", callsite, |
| 138 websql_error, sqlite_error); | 123 websql_error, sqlite_error); |
| 139 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 124 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 140 } | 125 } |
| 141 | 126 |
| 142 void WebDatabaseObserverImpl::reportExecuteStatementResult( | 127 void WebDatabaseObserverImpl::reportExecuteStatementResult( |
| 143 const WebString& origin_identifier, | 128 const WebString& origin_identifier, |
| 144 const WebString& database_name, | 129 const WebString& database_name, |
| 145 bool is_sync_database, | |
| 146 int callsite, int websql_error, int sqlite_error) { | 130 int callsite, int websql_error, int sqlite_error) { |
| 147 UMA_HISTOGRAM_WEBSQL_RESULT("StatementResult", is_sync_database, callsite, | 131 UMA_HISTOGRAM_WEBSQL_RESULT("StatementResult", callsite, |
| 148 websql_error, sqlite_error); | 132 websql_error, sqlite_error); |
| 149 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 133 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 150 } | 134 } |
| 151 | 135 |
| 152 void WebDatabaseObserverImpl::reportVacuumDatabaseResult( | 136 void WebDatabaseObserverImpl::reportVacuumDatabaseResult( |
| 153 const WebString& origin_identifier, | 137 const WebString& origin_identifier, |
| 154 const WebString& database_name, | 138 const WebString& database_name, |
| 155 bool is_sync_database, | |
| 156 int sqlite_error) { | 139 int sqlite_error) { |
| 157 int result = DetermineHistogramResult(-1, sqlite_error); | 140 int result = DetermineHistogramResult(-1, sqlite_error); |
| 158 if (is_sync_database) { | 141 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult", |
| 159 UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult", | |
| 160 result, kResultHistogramSize); | 142 result, kResultHistogramSize); |
| 161 } else { | 143 |
| 162 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult", | |
| 163 result, kResultHistogramSize); | |
| 164 } | |
| 165 HandleSqliteError(origin_identifier, database_name, sqlite_error); | 144 HandleSqliteError(origin_identifier, database_name, sqlite_error); |
| 166 } | 145 } |
| 167 | 146 |
| 168 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() { | 147 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() { |
| 169 open_connections_->WaitForAllDatabasesToClose(); | 148 open_connections_->WaitForAllDatabasesToClose(); |
| 170 } | 149 } |
| 171 | 150 |
| 172 void WebDatabaseObserverImpl::HandleSqliteError( | 151 void WebDatabaseObserverImpl::HandleSqliteError( |
| 173 const WebString& origin_identifier, | 152 const WebString& origin_identifier, |
| 174 const WebString& database_name, | 153 const WebString& database_name, |
| 175 int error) { | 154 int error) { |
| 176 // We filter out errors which the backend doesn't act on to avoid | 155 // We filter out errors which the backend doesn't act on to avoid |
| 177 // a unnecessary ipc traffic, this method can get called at a fairly | 156 // a unnecessary ipc traffic, this method can get called at a fairly |
| 178 // high frequency (per-sqlstatement). | 157 // high frequency (per-sqlstatement). |
| 179 if (error == SQLITE_CORRUPT || error == SQLITE_NOTADB) { | 158 if (error == SQLITE_CORRUPT || error == SQLITE_NOTADB) { |
| 180 sender_->Send(new DatabaseHostMsg_HandleSqliteError( | 159 sender_->Send(new DatabaseHostMsg_HandleSqliteError( |
| 181 origin_identifier.utf8(), | 160 origin_identifier.utf8(), |
| 182 database_name, | 161 database_name, |
| 183 error)); | 162 error)); |
| 184 } | 163 } |
| 185 } | 164 } |
| 186 | 165 |
| 187 } // namespace content | 166 } // namespace content |
| OLD | NEW |