diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 19:10:15 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 19:10:15 +0000 |
commit | 0b349ba539020caa0201c6523813a16fa41a3448 (patch) | |
tree | a21857ae3a23f7ddf1797a86feca3bc09c441f66 /content | |
parent | 58a73b384ba1113b1e061696a3d536fdd4579b58 (diff) | |
download | chromium_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.cc | 103 | ||||
-rw-r--r-- | content/common/web_database_observer_impl.h | 24 |
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(); |