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

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/platform/WebString.h" 11 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/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 websql_error, int sqlite_error) {
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 (sqlite_error)
24 return std::min(sqlite_error & 0xff, 30);
25
26 // Otherwise, websql_error may be an SQLExceptionCode, SQLErrorCode
27 // or a DOMExceptionCode, or -1 for success.
28 if (websql_error == -1)
29 return 0; // no error
30
31 // SQLExceptionCode starts at 1000
32 if (websql_error >= 1000)
33 websql_error -= 1000;
34
35 return std::min(websql_error + 30, kResultHistogramSize - 1);
36 }
37
38 #define HISTOGRAM_WEBSQL_RESULT(name, database, callsite, \
39 websql_error, sqlite_error) \
40 do { \
41 DCHECK(callsite < kCallsiteHistogramSize); \
42 int result = DetermineHistogramResult(websql_error, sqlite_error); \
43 if (database.isSyncDatabase()) { \
44 UMA_HISTOGRAM_ENUMERATION("websql.Sync." name, \
45 result, kResultHistogramSize); \
46 if (result) { \
47 UMA_HISTOGRAM_ENUMERATION("websql.Sync." name ".ErrorSite", \
48 callsite, kCallsiteHistogramSize); \
49 } \
50 } else { \
51 UMA_HISTOGRAM_ENUMERATION("websql.Async." name, \
52 result, kResultHistogramSize); \
53 if (result) { \
54 UMA_HISTOGRAM_ENUMERATION("websql.Async." name ".ErrorSite", \
55 callsite, kCallsiteHistogramSize); \
56 } \
57 } \
58 } while (0)
59
60 } // namespace
61
12 WebDatabaseObserverImpl::WebDatabaseObserverImpl( 62 WebDatabaseObserverImpl::WebDatabaseObserverImpl(
13 IPC::Message::Sender* sender) 63 IPC::Message::Sender* sender)
14 : sender_(sender), 64 : sender_(sender),
15 open_connections_(new webkit_database::DatabaseConnectionsWrapper) { 65 open_connections_(new webkit_database::DatabaseConnectionsWrapper) {
16 } 66 }
17 67
18 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() { 68 WebDatabaseObserverImpl::~WebDatabaseObserverImpl() {
19 } 69 }
20 70
21 void WebDatabaseObserverImpl::databaseOpened( 71 void WebDatabaseObserverImpl::databaseOpened(
22 const WebKit::WebDatabase& database) { 72 const WebDatabase& database) {
23 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 73 string16 origin_identifier = database.securityOrigin().databaseIdentifier();
24 string16 database_name = database.name(); 74 string16 database_name = database.name();
25 open_connections_->AddOpenConnection(origin_identifier, database_name); 75 open_connections_->AddOpenConnection(origin_identifier, database_name);
26 sender_->Send(new DatabaseHostMsg_Opened( 76 sender_->Send(new DatabaseHostMsg_Opened(
27 origin_identifier, database_name, 77 origin_identifier, database_name,
28 database.displayName(), database.estimatedSize())); 78 database.displayName(), database.estimatedSize()));
29 } 79 }
30 80
31 void WebDatabaseObserverImpl::databaseModified( 81 void WebDatabaseObserverImpl::databaseModified(
32 const WebKit::WebDatabase& database) { 82 const WebDatabase& database) {
33 sender_->Send(new DatabaseHostMsg_Modified( 83 sender_->Send(new DatabaseHostMsg_Modified(
34 database.securityOrigin().databaseIdentifier(), database.name())); 84 database.securityOrigin().databaseIdentifier(), database.name()));
35 } 85 }
36 86
37 void WebDatabaseObserverImpl::databaseClosed( 87 void WebDatabaseObserverImpl::databaseClosed(
38 const WebKit::WebDatabase& database) { 88 const WebDatabase& database) {
39 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 89 string16 origin_identifier = database.securityOrigin().databaseIdentifier();
40 string16 database_name = database.name(); 90 string16 database_name = database.name();
41 sender_->Send(new DatabaseHostMsg_Closed( 91 sender_->Send(new DatabaseHostMsg_Closed(
42 origin_identifier, database_name)); 92 origin_identifier, database_name));
43 open_connections_->RemoveOpenConnection(origin_identifier, database_name); 93 open_connections_->RemoveOpenConnection(origin_identifier, database_name);
44 } 94 }
45 95
96 void WebDatabaseObserverImpl::reportOpenDatabaseResult(
97 const WebDatabase& database, int callsite, int websql_error,
98 int sqlite_error) {
99 HISTOGRAM_WEBSQL_RESULT("OpenResult", database, callsite,
100 websql_error, sqlite_error);
101 }
102
103 void WebDatabaseObserverImpl::reportChangeVersionResult(
104 const WebDatabase& database, int callsite, int websql_error,
105 int sqlite_error) {
106 HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", database, callsite,
107 websql_error, sqlite_error);
108 }
109
110 void WebDatabaseObserverImpl::reportStartTransactionResult(
111 const WebDatabase& database, int callsite, int websql_error,
112 int sqlite_error) {
113 HISTOGRAM_WEBSQL_RESULT("BeginResult", database, callsite,
114 websql_error, sqlite_error);
115 }
116
117 void WebDatabaseObserverImpl::reportCommitTransactionResult(
118 const WebDatabase& database, int callsite, int websql_error,
119 int sqlite_error) {
120 HISTOGRAM_WEBSQL_RESULT("CommitResult", database, callsite,
121 websql_error, sqlite_error);
122 }
123
124 void WebDatabaseObserverImpl::reportExecuteStatementResult(
125 const WebDatabase& database, int callsite, int websql_error,
126 int sqlite_error) {
127 HISTOGRAM_WEBSQL_RESULT("StatementResult", database, callsite,
128 websql_error, sqlite_error);
129 }
130
131 void WebDatabaseObserverImpl::reportVacuumDatabaseResult(
132 const WebDatabase& database, int sqlite_error) {
133 int result = DetermineHistogramResult(-1, sqlite_error);
134 if (database.isSyncDatabase()) {
135 UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult",
136 result, kResultHistogramSize);
137 } else {
138 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult",
139 result, kResultHistogramSize);
140 }
141 }
142
46 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() { 143 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() {
47 open_connections_->WaitForAllDatabasesToClose(); 144 open_connections_->WaitForAllDatabasesToClose();
48 } 145 }
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