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

Unified Diff: src/debug/debug.cc

Issue 2623313005: [inspector] introduced debug::SetAsyncTaskListener (Closed)
Patch Set: Created 3 years, 11 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: src/debug/debug.cc
diff --git a/src/debug/debug.cc b/src/debug/debug.cc
index 08da3d8b26f0b52e9bb8b946389a1436e41af93a..75ff222765125df94ceb84ab931bcee125df5342 100644
--- a/src/debug/debug.cc
+++ b/src/debug/debug.cc
@@ -1815,6 +1815,27 @@ void ResetPromiseHandle(const v8::WeakCallbackInfo<void>& info) {
GlobalHandles::Destroy(data->location);
info.SetSecondPassCallback(&SendAsyncTaskEventCancel);
}
+
+debug::PromiseDebugActionName ToInterfaceDebugActionName(
+ PromiseDebugActionName name) {
+ switch (name) {
+ case kDebugAsyncFunction:
+ return debug::kDebugAsyncFunction;
+ case kDebugPromiseResolve:
+ return debug::kDebugPromiseResolve;
+ case kDebugPromiseReject:
+ return debug::kDebugPromiseReject;
+ case kDebugPromiseResolveThenableJob:
+ return debug::kDebugPromiseResolveThenableJob;
+ case kDebugPromiseCollected:
+ return debug::kDebugPromiseCollected;
+ case kDebugNotActive:
+ UNREACHABLE();
+ return debug::kDebugAsyncFunction;
+ }
+ UNREACHABLE();
+ return debug::kDebugAsyncFunction;
+}
} // namespace
int Debug::NextAsyncTaskId(Handle<JSObject> promise) {
@@ -1844,10 +1865,26 @@ int Debug::NextAsyncTaskId(Handle<JSObject> promise) {
return async_id->value();
}
+void Debug::SetAsyncTaskListener(debug::AsyncTaskListener listener,
+ void* data) {
+ async_task_listener_ = listener;
+ async_task_listener_data_ = data;
+ UpdateState();
+}
+
void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id,
PromiseDebugActionName name) {
if (in_debug_scope() || ignore_events()) return;
+ if (async_task_listener_) {
+ async_task_listener_(type, id, ToInterfaceDebugActionName(name),
+ async_task_listener_data_);
+ if (message_handler_ == NULL &&
dgozman 2017/01/13 00:01:48 nullptr
dgozman 2017/01/13 00:01:48 Let's extract variable |only_foreign_listener_pres
kozy 2017/01/13 15:59:13 Done.
kozy 2017/01/13 15:59:13 Done.
+ (event_listener_.is_null() || event_listener_->IsForeign())) {
+ return;
+ }
+ }
+
HandleScope scope(isolate_);
DebugScope debug_scope(this);
if (debug_scope.failed()) return;
@@ -2131,7 +2168,8 @@ void Debug::SetMessageHandler(v8::Debug::MessageHandler handler) {
}
void Debug::UpdateState() {
- bool is_active = message_handler_ != NULL || !event_listener_.is_null();
+ bool is_active = message_handler_ != NULL || !event_listener_.is_null() ||
+ async_task_listener_ != NULL;
if (is_active || in_debug_scope()) {
// Note that the debug context could have already been loaded to
// bootstrap test cases.
« no previous file with comments | « src/debug/debug.h ('k') | src/debug/debug-interface.h » ('j') | src/debug/interface-types.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698