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 |