| Index: content/common/web_database_observer_impl.cc
|
| ===================================================================
|
| --- content/common/web_database_observer_impl.cc (revision 113054)
|
| +++ content/common/web_database_observer_impl.cc (working copy)
|
| @@ -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 @@
|
| }
|
|
|
| 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::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 @@
|
| 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();
|
| }
|
|
|