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

Unified Diff: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp

Issue 2890023003: [IndexedDB] Adding async tracing for renderer calls. (Closed)
Patch Set: fixed blink tests Created 3 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
index 3ee7671c6a78d16da124f7b8525b48e737b37e47..192778d73b4a7dd40f7832c73a751475ce700ee5 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -44,6 +44,7 @@
#include "platform/Histogram.h"
#include "platform/SharedBuffer.h"
#include "platform/bindings/ScriptState.h"
+#include "platform/wtf/PtrUtil.h"
#include "platform/wtf/RefPtr.h"
#include "public/platform/WebBlobInfo.h"
#include "public/platform/WebData.h"
@@ -129,7 +130,8 @@ DOMStringList* IDBObjectStore::indexNames() const {
IDBRequest* IDBObjectStore::get(ScriptState* script_state,
const ScriptValue& key,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::get");
+ IDB_TRACE("IDBObjectStore::getRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::get", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -155,8 +157,9 @@ IDBRequest* IDBObjectStore::get(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->Get(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
key_range, /*key_only=*/false,
request->CreateWebCallbacks().release());
@@ -166,7 +169,8 @@ IDBRequest* IDBObjectStore::get(ScriptState* script_state,
IDBRequest* IDBObjectStore::getKey(ScriptState* script_state,
const ScriptValue& key,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::getKey");
+ IDB_TRACE("IDBObjectStore::getKeyRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::getKey", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -192,8 +196,9 @@ IDBRequest* IDBObjectStore::getKey(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->Get(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
key_range, /*key_only=*/true,
request->CreateWebCallbacks().release());
@@ -211,7 +216,8 @@ IDBRequest* IDBObjectStore::getAll(ScriptState* script_state,
const ScriptValue& key_range,
unsigned long max_count,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::getAll");
+ IDB_TRACE("IDBObjectStore::getAllRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAll", this);
if (!max_count)
max_count = std::numeric_limits<uint32_t>::max();
@@ -235,8 +241,9 @@ IDBRequest* IDBObjectStore::getAll(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->GetAll(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
range, max_count, false,
request->CreateWebCallbacks().release());
@@ -254,7 +261,8 @@ IDBRequest* IDBObjectStore::getAllKeys(ScriptState* script_state,
const ScriptValue& key_range,
unsigned long max_count,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::getAll");
+ IDB_TRACE("IDBObjectStore::getAllKeysRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAllKeys", this);
if (!max_count)
max_count = std::numeric_limits<uint32_t>::max();
@@ -278,8 +286,9 @@ IDBRequest* IDBObjectStore::getAllKeys(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->GetAll(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
range, max_count, true,
request->CreateWebCallbacks().release());
@@ -324,7 +333,7 @@ IDBRequest* IDBObjectStore::add(ScriptState* script_state,
const ScriptValue& value,
const ScriptValue& key,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::add");
+ IDB_TRACE("IDBObjectStore::addRequestSetup");
return put(script_state, kWebIDBPutModeAddOnly, IDBAny::Create(this), value,
key, exception_state);
}
@@ -333,7 +342,7 @@ IDBRequest* IDBObjectStore::put(ScriptState* script_state,
const ScriptValue& value,
const ScriptValue& key,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::put");
+ IDB_TRACE("IDBObjectStore::putRequestSetup");
return put(script_state, kWebIDBPutModeAddOrUpdate, IDBAny::Create(this),
value, key, exception_state);
}
@@ -359,6 +368,19 @@ IDBRequest* IDBObjectStore::put(ScriptState* script_state,
const ScriptValue& value,
IDBKey* key,
ExceptionState& exception_state) {
+ const char* tracing_name = nullptr;
+ switch (put_mode) {
+ case kWebIDBPutModeAddOrUpdate:
+ tracing_name = "IDBObjectStore::put";
+ break;
+ case kWebIDBPutModeAddOnly:
+ tracing_name = "IDBObjectStore::add";
+ break;
+ case kWebIDBPutModeCursorUpdate:
+ tracing_name = "IDBCursor::update";
+ break;
+ }
+ IDBRequest::AsyncTraceState metrics(tracing_name, this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -495,8 +517,8 @@ IDBRequest* IDBObjectStore::put(ScriptState* script_state,
index_keys.push_back(keys);
}
- IDBRequest* request =
- IDBRequest::Create(script_state, source, transaction_.Get());
+ IDBRequest* request = IDBRequest::Create(
+ script_state, source, transaction_.Get(), std::move(metrics));
value_wrapper.ExtractBlobDataHandles(request->transit_blob_handles());
value_wrapper.WrapIfBiggerThan(IDBValueWrapper::kWrapThreshold);
@@ -513,7 +535,8 @@ IDBRequest* IDBObjectStore::put(ScriptState* script_state,
IDBRequest* IDBObjectStore::deleteFunction(ScriptState* script_state,
const ScriptValue& key,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::delete");
+ IDB_TRACE("IDBObjectStore::deleteRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::delete", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -545,8 +568,9 @@ IDBRequest* IDBObjectStore::deleteFunction(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->DeleteRange(transaction_->Id(), Id(), key_range,
request->CreateWebCallbacks().release());
return request;
@@ -554,7 +578,8 @@ IDBRequest* IDBObjectStore::deleteFunction(ScriptState* script_state,
IDBRequest* IDBObjectStore::clear(ScriptState* script_state,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::clear");
+ IDB_TRACE("IDBObjectStore::clearRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::clear", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -576,8 +601,9 @@ IDBRequest* IDBObjectStore::clear(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->Clear(transaction_->Id(), Id(),
request->CreateWebCallbacks().release());
return request;
@@ -629,6 +655,7 @@ class IndexPopulator final : public EventListener {
void handleEvent(ExecutionContext* execution_context, Event* event) override {
if (!script_state_->ContextIsValid())
return;
+ IDB_TRACE("IDBObjectStore::IndexPopulator::handleEvent");
DCHECK_EQ(ExecutionContext::From(script_state_.Get()), execution_context);
DCHECK_EQ(event->type(), EventTypeNames::success);
@@ -648,7 +675,9 @@ class IndexPopulator final : public EventListener {
Vector<int64_t> index_ids;
index_ids.push_back(IndexMetadata().id);
if (cursor && !cursor->IsDeleted()) {
- cursor->Continue(nullptr, nullptr, ASSERT_NO_EXCEPTION);
+ cursor->Continue(nullptr, nullptr,
+ IDBRequest::AsyncTraceState("IDBCursor::continue", this),
+ ASSERT_NO_EXCEPTION);
IDBKey* primary_key = cursor->IdbPrimaryKey();
ScriptValue value = cursor->value(script_state_.Get());
@@ -685,7 +714,8 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* script_state,
const IDBKeyPath& key_path,
const IDBIndexParameters& options,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::createIndex");
+ IDB_TRACE("IDBObjectStore::createIndexRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::createIndex", this);
if (!transaction_->IsVersionChange()) {
exception_state.ThrowDOMException(
kInvalidStateError,
@@ -743,7 +773,7 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* script_state,
IDBRequest* index_request =
openCursor(script_state, nullptr, kWebIDBCursorDirectionNext,
- kWebIDBTaskTypePreemptive);
+ kWebIDBTaskTypePreemptive, std::move(metrics));
index_request->PreventPropagation();
// This is kept alive by being the success handler of the request, which is in
@@ -835,7 +865,8 @@ IDBRequest* IDBObjectStore::openCursor(ScriptState* script_state,
const ScriptValue& range,
const String& direction_string,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::openCursor");
+ IDB_TRACE("IDBObjectStore::openCursorRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::openCursor", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -860,15 +891,18 @@ IDBRequest* IDBObjectStore::openCursor(ScriptState* script_state,
return nullptr;
}
- return openCursor(script_state, key_range, direction, kWebIDBTaskTypeNormal);
+ return openCursor(script_state, key_range, direction, kWebIDBTaskTypeNormal,
+ std::move(metrics));
}
IDBRequest* IDBObjectStore::openCursor(ScriptState* script_state,
IDBKeyRange* range,
WebIDBCursorDirection direction,
- WebIDBTaskType task_type) {
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ WebIDBTaskType task_type,
+ IDBRequest::AsyncTraceState metrics) {
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
request->SetCursorDetails(IndexedDB::kCursorKeyAndValue, direction);
BackendDB()->OpenCursor(transaction_->Id(), Id(),
@@ -881,7 +915,8 @@ IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* script_state,
const ScriptValue& range,
const String& direction_string,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::openKeyCursor");
+ IDB_TRACE("IDBObjectStore::openKeyCursorRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::openKeyCursor", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -906,8 +941,9 @@ IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
request->SetCursorDetails(IndexedDB::kCursorKeyOnly, direction);
BackendDB()->OpenCursor(transaction_->Id(), Id(),
@@ -920,7 +956,8 @@ IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* script_state,
IDBRequest* IDBObjectStore::count(ScriptState* script_state,
const ScriptValue& range,
ExceptionState& exception_state) {
- IDB_TRACE("IDBObjectStore::count");
+ IDB_TRACE("IDBObjectStore::countRequestSetup");
+ IDBRequest::AsyncTraceState metrics("IDBObjectStore::count", this);
if (IsDeleted()) {
exception_state.ThrowDOMException(
kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -943,8 +980,9 @@ IDBRequest* IDBObjectStore::count(ScriptState* script_state,
return nullptr;
}
- IDBRequest* request = IDBRequest::Create(script_state, IDBAny::Create(this),
- transaction_.Get());
+ IDBRequest* request =
+ IDBRequest::Create(script_state, IDBAny::Create(this), transaction_.Get(),
+ std::move(metrics));
BackendDB()->Count(transaction_->Id(), Id(), IDBIndexMetadata::kInvalidId,
key_range, request->CreateWebCallbacks().release());
return request;

Powered by Google App Engine
This is Rietveld 408576698