Chromium Code Reviews| Index: src/runtime/runtime-promise.cc |
| diff --git a/src/runtime/runtime-promise.cc b/src/runtime/runtime-promise.cc |
| index ace8db8b89bb288cdd7f910b9d65355665f3a507..f923d4f56f112e1d3fd2dfce211058244044866c 100644 |
| --- a/src/runtime/runtime-promise.cc |
| +++ b/src/runtime/runtime-promise.cc |
| @@ -43,6 +43,9 @@ RUNTIME_FUNCTION(Runtime_PromiseRejectEventFromStack) { |
| // undefined, which will be interpreted by PromiseRejectEvent |
| // as being a caught exception event. |
| rejected_promise = isolate->GetPromiseOnStackOnThrow(); |
| + isolate->debug()->OnAsyncTaskEvent( |
| + debug::kDebugEnqueueRecurring, |
| + isolate->debug()->NextAsyncTaskId(promise), kDebugPromiseReject); |
| } |
| PromiseRejectEvent(isolate, promise, rejected_promise, value, true); |
| return isolate->heap()->undefined_value(); |
| @@ -108,20 +111,17 @@ bool GetDebugIdForAsyncFunction(Isolate* isolate, |
| } |
| void SetDebugInfo(Isolate* isolate, Handle<PromiseReactionJobInfo> info, |
|
gsathya
2017/01/09 19:24:35
info->promise() == promise right? can we just reus
kozy
2017/01/10 00:11:38
Done.
|
| - int status) { |
| + Handle<JSPromise> promise, int status) { |
| int id; |
| PromiseDebugActionName name; |
| if (GetDebugIdForAsyncFunction(isolate, info, &id)) { |
| name = kDebugAsyncFunction; |
| } else { |
| - id = isolate->GetNextDebugMicrotaskId(); |
| - |
| + id = isolate->debug()->NextAsyncTaskId(promise); |
| DCHECK(status != v8::Promise::kPending); |
| name = status == v8::Promise::kFulfilled ? kDebugPromiseResolve |
| : kDebugPromiseReject; |
| - |
| - isolate->debug()->OnAsyncTaskEvent(kDebugEnqueue, id, name); |
| } |
| info->set_debug_id(id); |
| @@ -130,9 +130,9 @@ void SetDebugInfo(Isolate* isolate, Handle<PromiseReactionJobInfo> info, |
| void EnqueuePromiseReactionJob(Isolate* isolate, |
| Handle<PromiseReactionJobInfo> info, |
| - int status) { |
| + Handle<JSPromise> promise, int status) { |
| if (isolate->debug()->is_active()) { |
| - SetDebugInfo(isolate, info, status); |
| + SetDebugInfo(isolate, info, promise, status); |
| } |
| isolate->EnqueueMicrotask(info); |
| @@ -151,6 +151,13 @@ void PromiseSet(Isolate* isolate, Handle<JSPromise> promise, int status, |
| void PromiseFulfill(Isolate* isolate, Handle<JSPromise> promise, int status, |
| Handle<Object> value) { |
| + if (isolate->debug()->is_active()) { |
| + isolate->debug()->OnAsyncTaskEvent( |
| + debug::kDebugEnqueueRecurring, |
| + isolate->debug()->NextAsyncTaskId(promise), |
| + status == v8::Promise::kFulfilled ? kDebugPromiseResolve |
| + : kDebugPromiseReject); |
| + } |
| // Check if there are any callbacks. |
| if (!promise->deferred_promise()->IsUndefined(isolate)) { |
| Handle<Object> tasks((status == v8::Promise::kFulfilled) |
| @@ -163,7 +170,7 @@ void PromiseFulfill(Isolate* isolate, Handle<JSPromise> promise, int status, |
| handle(promise->deferred_on_resolve(), isolate), |
| handle(promise->deferred_on_reject(), isolate), |
| isolate->native_context()); |
| - EnqueuePromiseReactionJob(isolate, info, status); |
| + EnqueuePromiseReactionJob(isolate, info, promise, status); |
| } |
| PromiseSet(isolate, promise, status, value); |
| @@ -186,10 +193,11 @@ RUNTIME_FUNCTION(Runtime_PromiseReject) { |
| RUNTIME_FUNCTION(Runtime_EnqueuePromiseReactionJob) { |
| HandleScope scope(isolate); |
| - DCHECK_EQ(2, args.length()); |
| + DCHECK_EQ(3, args.length()); |
| CONVERT_ARG_HANDLE_CHECKED(PromiseReactionJobInfo, info, 0); |
| - CONVERT_SMI_ARG_CHECKED(status, 1); |
| - EnqueuePromiseReactionJob(isolate, info, status); |
| + CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 1); |
| + CONVERT_SMI_ARG_CHECKED(status, 2); |
| + EnqueuePromiseReactionJob(isolate, info, promise, status); |
| return isolate->heap()->undefined_value(); |
| } |