Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: content/common/web_database_observer_impl.cc

Issue 8590043: Record UMA status on websql results (chrome) (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/common/web_database_observer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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/common/web_database_observer_impl.h" 5 #include "content/common/web_database_observer_impl.h"
6 6
7 #include "base/metrics/histogram.h"
7 #include "base/string16.h" 8 #include "base/string16.h"
8 #include "content/common/database_messages.h" 9 #include "content/common/database_messages.h"
9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h" 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
11 12
13 using WebKit::WebDatabase;
14
15 namespace {
16
17 const int kResultHistogramSize = 50;
18 const int kCallsiteHistogramSize = 10;
19
20 int DetermineHistogramResult(int webSqlErrorCode, int sqliteErrorCode) {
21 // If we have a sqlite error, log it after trimming the extended bits.
22 // There are 26 possible values, but we leave room for some new ones.
23 if (sqliteErrorCode)
24 return std::min(sqliteErrorCode & 0xff, 30);
25
26 // Otherwise, webSqlErrorCode may be an SQLExceptionCode, SQLErrorCode
27 // or a DOMExceptionCode, or -1 for success.
28 if (webSqlErrorCode == -1)
29 return 0; // no error
30
31 // SQLExceptionCode starts at 1000
32 if (webSqlErrorCode >= 1000)
33 webSqlErrorCode -= 1000;
34
35 return std::min(webSqlErrorCode + 30, kResultHistogramSize - 1);
36 }
37
38 } // namespace
39
12 WebDatabaseObserverImpl::WebDatabaseObserverImpl( 40 WebDatabaseObserverImpl::WebDatabaseObserverImpl(
13 IPC::Message::Sender* sender) 41 IPC::Message::Sender* sender)
14 : sender_(sender), 42 : sender_(sender),
15 open_connections_(new webkit_database::DatabaseConnectionsWrapper) { 43 open_connections_(new webkit_database::DatabaseConnectionsWrapper) {
16 } 44 }
17 45
18 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() { 46 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() {
19 } 47 }
20 48
21 void WebDatabaseObserverImpl::databaseOpened( 49 void WebDatabaseObserverImpl::databaseOpened(
22 const WebKit::WebDatabase& database) { 50 const WebDatabase& database) {
23 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 51 string16 origin_identifier = database.securityOrigin().databaseIdentifier();
24 string16 database_name = database.name(); 52 string16 database_name = database.name();
25 open_connections_->AddOpenConnection(origin_identifier, database_name); 53 open_connections_->AddOpenConnection(origin_identifier, database_name);
26 sender_->Send(new DatabaseHostMsg_Opened( 54 sender_->Send(new DatabaseHostMsg_Opened(
27 origin_identifier, database_name, 55 origin_identifier, database_name,
28 database.displayName(), database.estimatedSize())); 56 database.displayName(), database.estimatedSize()));
29 } 57 }
30 58
31 void WebDatabaseObserverImpl::databaseModified( 59 void WebDatabaseObserverImpl::databaseModified(
32 const WebKit::WebDatabase& database) { 60 const WebDatabase& database) {
33 sender_->Send(new DatabaseHostMsg_Modified( 61 sender_->Send(new DatabaseHostMsg_Modified(
34 database.securityOrigin().databaseIdentifier(), database.name())); 62 database.securityOrigin().databaseIdentifier(), database.name()));
35 } 63 }
36 64
37 void WebDatabaseObserverImpl::databaseClosed( 65 void WebDatabaseObserverImpl::databaseClosed(
38 const WebKit::WebDatabase& database) { 66 const WebDatabase& database) {
39 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 67 string16 origin_identifier = database.securityOrigin().databaseIdentifier();
40 string16 database_name = database.name(); 68 string16 database_name = database.name();
41 sender_->Send(new DatabaseHostMsg_Closed( 69 sender_->Send(new DatabaseHostMsg_Closed(
42 origin_identifier, database_name)); 70 origin_identifier, database_name));
43 open_connections_->RemoveOpenConnection(origin_identifier, database_name); 71 open_connections_->RemoveOpenConnection(origin_identifier, database_name);
44 } 72 }
45 73
74 void WebDatabaseObserverImpl::reportOpenDatabaseResult(
75 const WebDatabase& database, int callsite, int webSqlErrorCode,
76 int sqliteErrorCode) {
77 DCHECK(callsite < kCallsiteHistogramSize);
ramant (doing other things) 2011/11/29 23:29:36 nit: could we define a routine that takes the his
michaeln 2011/11/29 23:50:13 I believe the histogram names can't vary for a par
ramant (doing other things) 2011/11/30 00:13:21 We have to define a macro. It is your call.
78 int result = DetermineHistogramResult(webSqlErrorCode, sqliteErrorCode);
79 if (database.isSyncDatabase()) {
80 UMA_HISTOGRAM_ENUMERATION("websql.Sync.OpenResult",
81 result, kResultHistogramSize);
82 if (result) {
83 UMA_HISTOGRAM_ENUMERATION("websql.Sync.OpenResult.ErrorSite",
84 callsite, kCallsiteHistogramSize);
85 }
86 } else {
87 UMA_HISTOGRAM_ENUMERATION("websql.Async.OpenResult",
88 result, kResultHistogramSize);
89 if (result) {
90 UMA_HISTOGRAM_ENUMERATION("websql.Async.OpenResult.ErrorSite",
91 callsite, kCallsiteHistogramSize);
92 }
93 }
94 }
95
96 void WebDatabaseObserverImpl::reportChangeVersionResult(
97 const WebDatabase& database, int callsite, int webSqlErrorCode,
98 int sqliteErrorCode) {
99 DCHECK(callsite < kCallsiteHistogramSize);
100 int result = DetermineHistogramResult(webSqlErrorCode, sqliteErrorCode);
101 if (database.isSyncDatabase()) {
102 UMA_HISTOGRAM_ENUMERATION("websql.Sync.ChangeVersionResult",
103 result, kResultHistogramSize);
104 if (result) {
105 UMA_HISTOGRAM_ENUMERATION("websql.Sync.ChangeVersionResult.ErrorSite",
106 callsite, kCallsiteHistogramSize);
107 }
108 } else {
109 UMA_HISTOGRAM_ENUMERATION("websql.Async.ChangeVersionResult",
110 result, kResultHistogramSize);
111 if (result) {
112 UMA_HISTOGRAM_ENUMERATION("websql.Async.ChangeVersionResult.ErrorSite",
113 callsite, kCallsiteHistogramSize);
114 }
115 }
116 }
117
118 void WebDatabaseObserverImpl::reportStartTransactionResult(
119 const WebDatabase& database, int callsite, int webSqlErrorCode,
120 int sqliteErrorCode) {
121 DCHECK(callsite < kCallsiteHistogramSize);
122 int result = DetermineHistogramResult(webSqlErrorCode, sqliteErrorCode);
123 if (database.isSyncDatabase()) {
124 UMA_HISTOGRAM_ENUMERATION("websql.Sync.BeginResult",
125 result, kResultHistogramSize);
126 if (result) {
127 UMA_HISTOGRAM_ENUMERATION("websql.Sync.BeginResult.ErrorSite",
128 callsite, kCallsiteHistogramSize);
129 }
130 } else {
131 UMA_HISTOGRAM_ENUMERATION("websql.Async.BeginResult",
132 result, kResultHistogramSize);
133 if (result) {
134 UMA_HISTOGRAM_ENUMERATION("websql.Async.BeginResult.ErrorSite",
135 callsite, kCallsiteHistogramSize);
136 }
137 }
138 }
139
140 void WebDatabaseObserverImpl::reportCommitTransactionResult(
141 const WebDatabase& database, int callsite, int webSqlErrorCode,
142 int sqliteErrorCode) {
143 DCHECK(callsite < kCallsiteHistogramSize);
144 int result = DetermineHistogramResult(webSqlErrorCode, sqliteErrorCode);
145 if (database.isSyncDatabase()) {
146 UMA_HISTOGRAM_ENUMERATION("websql.Sync.CommitResult",
147 result, kResultHistogramSize);
148 if (result) {
149 UMA_HISTOGRAM_ENUMERATION("websql.Sync.CommitResult.ErrorSite",
150 callsite, kCallsiteHistogramSize);
151 }
152 } else {
153 UMA_HISTOGRAM_ENUMERATION("websql.Async.CommitResult", result,
154 result, kResultHistogramSize);
155 if (result) {
156 UMA_HISTOGRAM_ENUMERATION("websql.Async.CommitResult.ErrorSite",
157 callsite, kCallsiteHistogramSize);
158 }
159 }
160 }
161
162 void WebDatabaseObserverImpl::reportExecuteStatementResult(
163 const WebDatabase& database, int callsite, int webSqlErrorCode,
164 int sqliteErrorCode) {
165 DCHECK(callsite < kCallsiteHistogramSize);
166 int result = DetermineHistogramResult(webSqlErrorCode, sqliteErrorCode);
167 if (database.isSyncDatabase()) {
168 UMA_HISTOGRAM_ENUMERATION("websql.Sync.StatementResult",
169 result, kHistogramSize);
170 if (result) {
171 UMA_HISTOGRAM_ENUMERATION("websql.Sync.StatementResult.ErrorSite",
172 callsite, kCallsiteHistogramSize);
173 }
174 } else {
175 UMA_HISTOGRAM_ENUMERATION("websql.Async.StatementResult",
176 result, kResultHistogramSize);
177 if (result) {
178 UMA_HISTOGRAM_ENUMERATION("websql.Async.StatementResult.ErrorSite",
179 callsite, kCallsiteHistogramSize);
180 }
181 }
182 }
183
184 void WebDatabaseObserverImpl::reportVacuumDatabaseResult(
185 const WebDatabase& database, int sqliteErrorCode) {
186 int result = DetermineHistogramResult(-1, sqliteErrorCode);
187 if (database.isSyncDatabase()) {
188 UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult",
189 result, kResultHistogramSize);
190 } else {
191 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult",
192 result, kResultHistogramSize);
193 }
194 }
195
46 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() { 196 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() {
47 open_connections_->WaitForAllDatabasesToClose(); 197 open_connections_->WaitForAllDatabasesToClose();
48 } 198 }
OLDNEW
« no previous file with comments | « content/common/web_database_observer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698