summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authormichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 19:10:15 +0000
committermichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 19:10:15 +0000
commit0b349ba539020caa0201c6523813a16fa41a3448 (patch)
treea21857ae3a23f7ddf1797a86feca3bc09c441f66 /content
parent58a73b384ba1113b1e061696a3d536fdd4579b58 (diff)
downloadchromium_src-0b349ba539020caa0201c6523813a16fa41a3448.zip
chromium_src-0b349ba539020caa0201c6523813a16fa41a3448.tar.gz
chromium_src-0b349ba539020caa0201c6523813a16fa41a3448.tar.bz2
Record UMA status on websql results.
This is the chrome-side of https://bugs.webkit.org/show_bug.cgi?id=73258 BUG=98939 Review URL: http://codereview.chromium.org/8590043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113248 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/common/web_database_observer_impl.cc103
-rw-r--r--content/common/web_database_observer_impl.h24
2 files changed, 121 insertions, 6 deletions
diff --git a/content/common/web_database_observer_impl.cc b/content/common/web_database_observer_impl.cc
index 088701d..a210494 100644
--- a/content/common/web_database_observer_impl.cc
+++ b/content/common/web_database_observer_impl.cc
@@ -4,11 +4,61 @@
#include "content/common/web_database_observer_impl.h"
+#include "base/metrics/histogram.h"
#include "base/string16.h"
#include "content/common/database_messages.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
+using WebKit::WebDatabase;
+
+namespace {
+
+const int kResultHistogramSize = 50;
+const int kCallsiteHistogramSize = 10;
+
+int DetermineHistogramResult(int websql_error, int sqlite_error) {
+ // If we have a sqlite error, log it after trimming the extended bits.
+ // There are 26 possible values, but we leave room for some new ones.
+ if (sqlite_error)
+ return std::min(sqlite_error & 0xff, 30);
+
+ // Otherwise, websql_error may be an SQLExceptionCode, SQLErrorCode
+ // or a DOMExceptionCode, or -1 for success.
+ if (websql_error == -1)
+ return 0; // no error
+
+ // SQLExceptionCode starts at 1000
+ if (websql_error >= 1000)
+ websql_error -= 1000;
+
+ return std::min(websql_error + 30, kResultHistogramSize - 1);
+}
+
+#define HISTOGRAM_WEBSQL_RESULT(name, database, callsite, \
+ websql_error, sqlite_error) \
+ do { \
+ DCHECK(callsite < kCallsiteHistogramSize); \
+ int result = DetermineHistogramResult(websql_error, sqlite_error); \
+ if (database.isSyncDatabase()) { \
+ UMA_HISTOGRAM_ENUMERATION("websql.Sync." name, \
+ result, kResultHistogramSize); \
+ if (result) { \
+ UMA_HISTOGRAM_ENUMERATION("websql.Sync." name ".ErrorSite", \
+ callsite, kCallsiteHistogramSize); \
+ } \
+ } else { \
+ UMA_HISTOGRAM_ENUMERATION("websql.Async." name, \
+ result, kResultHistogramSize); \
+ if (result) { \
+ UMA_HISTOGRAM_ENUMERATION("websql.Async." name ".ErrorSite", \
+ callsite, kCallsiteHistogramSize); \
+ } \
+ } \
+ } while (0)
+
+} // namespace
+
WebDatabaseObserverImpl::WebDatabaseObserverImpl(
IPC::Message::Sender* sender)
: sender_(sender),
@@ -19,7 +69,7 @@ WebDatabaseObserverImpl::~WebDatabaseObserverImpl() {
}
void WebDatabaseObserverImpl::databaseOpened(
- const WebKit::WebDatabase& database) {
+ const WebDatabase& database) {
string16 origin_identifier = database.securityOrigin().databaseIdentifier();
string16 database_name = database.name();
open_connections_->AddOpenConnection(origin_identifier, database_name);
@@ -29,13 +79,13 @@ void WebDatabaseObserverImpl::databaseOpened(
}
void WebDatabaseObserverImpl::databaseModified(
- const WebKit::WebDatabase& database) {
+ const WebDatabase& database) {
sender_->Send(new DatabaseHostMsg_Modified(
database.securityOrigin().databaseIdentifier(), database.name()));
}
void WebDatabaseObserverImpl::databaseClosed(
- const WebKit::WebDatabase& database) {
+ const WebDatabase& database) {
string16 origin_identifier = database.securityOrigin().databaseIdentifier();
string16 database_name = database.name();
sender_->Send(new DatabaseHostMsg_Closed(
@@ -43,6 +93,53 @@ void WebDatabaseObserverImpl::databaseClosed(
open_connections_->RemoveOpenConnection(origin_identifier, database_name);
}
+void WebDatabaseObserverImpl::reportOpenDatabaseResult(
+ const WebDatabase& database, int callsite, int websql_error,
+ int sqlite_error) {
+ HISTOGRAM_WEBSQL_RESULT("OpenResult", database, callsite,
+ websql_error, sqlite_error);
+}
+
+void WebDatabaseObserverImpl::reportChangeVersionResult(
+ const WebDatabase& database, int callsite, int websql_error,
+ int sqlite_error) {
+ HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", database, callsite,
+ websql_error, sqlite_error);
+}
+
+void WebDatabaseObserverImpl::reportStartTransactionResult(
+ const WebDatabase& database, int callsite, int websql_error,
+ int sqlite_error) {
+ HISTOGRAM_WEBSQL_RESULT("BeginResult", database, callsite,
+ websql_error, sqlite_error);
+}
+
+void WebDatabaseObserverImpl::reportCommitTransactionResult(
+ const WebDatabase& database, int callsite, int websql_error,
+ int sqlite_error) {
+ HISTOGRAM_WEBSQL_RESULT("CommitResult", database, callsite,
+ websql_error, sqlite_error);
+}
+
+void WebDatabaseObserverImpl::reportExecuteStatementResult(
+ const WebDatabase& database, int callsite, int websql_error,
+ int sqlite_error) {
+ HISTOGRAM_WEBSQL_RESULT("StatementResult", database, callsite,
+ websql_error, sqlite_error);
+}
+
+void WebDatabaseObserverImpl::reportVacuumDatabaseResult(
+ const WebDatabase& database, int sqlite_error) {
+ int result = DetermineHistogramResult(-1, sqlite_error);
+ if (database.isSyncDatabase()) {
+ UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult",
+ result, kResultHistogramSize);
+ } else {
+ UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult",
+ result, kResultHistogramSize);
+ }
+}
+
void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() {
open_connections_->WaitForAllDatabasesToClose();
}
diff --git a/content/common/web_database_observer_impl.h b/content/common/web_database_observer_impl.h
index a79ee6f..274c7d0 100644
--- a/content/common/web_database_observer_impl.h
+++ b/content/common/web_database_observer_impl.h
@@ -16,9 +16,27 @@ class WebDatabaseObserverImpl : public WebKit::WebDatabaseObserver {
explicit WebDatabaseObserverImpl(IPC::Message::Sender* sender);
virtual ~WebDatabaseObserverImpl();
- virtual void databaseOpened(const WebKit::WebDatabase& database);
- virtual void databaseModified(const WebKit::WebDatabase& database);
- virtual void databaseClosed(const WebKit::WebDatabase& database);
+ virtual void databaseOpened(const WebKit::WebDatabase& database) OVERRIDE;
+ virtual void databaseModified(const WebKit::WebDatabase& database) OVERRIDE;
+ virtual void databaseClosed(const WebKit::WebDatabase& database) OVERRIDE;
+
+ virtual void reportOpenDatabaseResult(
+ const WebKit::WebDatabase& database, int callsite,
+ int webSqlErrorCode, int sqliteErrorCode) OVERRIDE;
+ virtual void reportChangeVersionResult(
+ const WebKit::WebDatabase& database, int callsite,
+ int webSqlErrorCode, int sqliteErrorCode) OVERRIDE;
+ virtual void reportStartTransactionResult(
+ const WebKit::WebDatabase& database, int callsite,
+ int webSqlErrorCode, int sqliteErrorCode) OVERRIDE;
+ virtual void reportCommitTransactionResult(
+ const WebKit::WebDatabase& database, int callsite,
+ int webSqlErrorCode, int sqliteErrorCode) OVERRIDE;
+ virtual void reportExecuteStatementResult(
+ const WebKit::WebDatabase& database, int callsite,
+ int webSqlErrorCode, int sqliteErrorCode) OVERRIDE;
+ virtual void reportVacuumDatabaseResult(
+ const WebKit::WebDatabase& database, int sqliteErrorCode) OVERRIDE;
void WaitForAllDatabasesToClose();