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

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

Issue 2890023003: [IndexedDB] Adding async tracing for renderer calls. (Closed)
Patch Set: fixed 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/IDBRequest.cpp
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index 76d5cc57c1ab501165292e5c0af4c86959339347..8705094481042e071a260558471091e9ef83f458 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -44,6 +44,7 @@
#include "modules/indexeddb/IDBTracing.h"
#include "modules/indexeddb/IDBValue.h"
#include "modules/indexeddb/WebIDBCallbacksImpl.h"
+#include "platform/Histogram.h"
#include "platform/SharedBuffer.h"
#include "public/platform/WebBlobInfo.h"
@@ -51,10 +52,34 @@ using blink::WebIDBCursor;
namespace blink {
-IDBRequest* IDBRequest::Create(ScriptState* script_state,
- IDBAny* source,
- IDBTransaction* transaction) {
- IDBRequest* request = new IDBRequest(script_state, source, transaction);
+IDBRequest::ScopedMetricsTracker::ScopedMetricsTracker(const char* uma_name,
+ const char* tracing_name,
+ void* id)
+ : uma_name_(uma_name),
+ tracing_name_(tracing_name),
+ id_(id),
+ start_(uma_name_ ? WTF::TimeTicks::Now() : WTF::TimeTicks()) {
+ if (tracing_name_)
+ TRACE_EVENT_ASYNC_BEGIN0("IndexedDB", tracing_name_, id);
+}
+
+IDBRequest::ScopedMetricsTracker::~ScopedMetricsTracker() {
+ if (tracing_name_)
+ TRACE_EVENT_ASYNC_END0("IndexedDB", tracing_name_, id_);
+}
+
+void IDBRequest::ScopedMetricsTracker::RecordUMAMetrics() const {
+ if (uma_name_)
+ UMA_HISTOGRAM_MEDIUM_TIMES(uma_name_, WTF::TimeTicks::Now() - start_);
pwnall 2017/05/18 22:14:32 Does this not record UMA data?
dmurph 2017/05/18 23:51:15 not anymore :P
+}
+
+IDBRequest* IDBRequest::Create(
+ ScriptState* script_state,
+ IDBAny* source,
+ IDBTransaction* transaction,
+ std::unique_ptr<IDBRequest::ScopedMetricsTracker> metrics) {
+ IDBRequest* request =
+ new IDBRequest(script_state, source, transaction, std::move(metrics));
request->SuspendIfNeeded();
// Requests associated with IDBFactory (open/deleteDatabase/getDatabaseNames)
// are not associated with transactions.
@@ -65,11 +90,13 @@ IDBRequest* IDBRequest::Create(ScriptState* script_state,
IDBRequest::IDBRequest(ScriptState* script_state,
IDBAny* source,
- IDBTransaction* transaction)
+ IDBTransaction* transaction,
+ std::unique_ptr<ScopedMetricsTracker> metrics)
: SuspendableObject(ExecutionContext::From(script_state)),
transaction_(transaction),
isolate_(script_state->GetIsolate()),
- source_(source) {}
+ source_(source),
+ metrics_(std::move(metrics)) {}
IDBRequest::~IDBRequest() {
DCHECK(ready_state_ == DONE || ready_state_ == kEarlyDeath ||
@@ -249,6 +276,7 @@ void IDBRequest::EnqueueResponse(DOMException* error) {
SetResult(IDBAny::CreateUndefined());
pending_cursor_.Clear();
EnqueueEvent(Event::CreateCancelableBubble(EventTypeNames::error));
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse(const Vector<String>& string_list) {
@@ -260,6 +288,7 @@ void IDBRequest::EnqueueResponse(const Vector<String>& string_list) {
for (size_t i = 0; i < string_list.size(); ++i)
dom_string_list->Append(string_list[i]);
EnqueueResultInternal(IDBAny::Create(dom_string_list));
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse(std::unique_ptr<WebIDBCursor> backend,
@@ -286,6 +315,7 @@ void IDBRequest::EnqueueResponse(std::unique_ptr<WebIDBCursor> backend,
NOTREACHED();
}
SetResultCursor(cursor, key, primary_key, std::move(value));
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse(IDBKey* idb_key) {
@@ -298,6 +328,7 @@ void IDBRequest::EnqueueResponse(IDBKey* idb_key) {
EnqueueResultInternal(IDBAny::Create(idb_key));
else
EnqueueResultInternal(IDBAny::CreateUndefined());
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse(const Vector<RefPtr<IDBValue>>& values) {
@@ -307,6 +338,7 @@ void IDBRequest::EnqueueResponse(const Vector<RefPtr<IDBValue>>& values) {
AckReceivedBlobs(values);
EnqueueResultInternal(IDBAny::Create(values));
+ MaybeRecordMetrics();
}
#if DCHECK_IS_ON()
@@ -343,6 +375,7 @@ void IDBRequest::EnqueueResponse(PassRefPtr<IDBValue> prp_value) {
#endif
EnqueueResultInternal(IDBAny::Create(value.Release()));
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse(int64_t value) {
@@ -350,6 +383,7 @@ void IDBRequest::EnqueueResponse(int64_t value) {
if (!ShouldEnqueueEvent())
return;
EnqueueResultInternal(IDBAny::Create(value));
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResponse() {
@@ -357,6 +391,7 @@ void IDBRequest::EnqueueResponse() {
if (!ShouldEnqueueEvent())
return;
EnqueueResultInternal(IDBAny::CreateUndefined());
+ MaybeRecordMetrics();
}
void IDBRequest::EnqueueResultInternal(IDBAny* result) {
@@ -382,6 +417,7 @@ void IDBRequest::EnqueueResponse(IDBKey* key,
DCHECK(pending_cursor_);
SetResultCursor(pending_cursor_.Release(), key, primary_key,
std::move(value));
+ MaybeRecordMetrics();
}
bool IDBRequest::HasPendingActivity() const {

Powered by Google App Engine
This is Rietveld 408576698