Commit 63fb5381 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Introduce more debug events for promises.

BUG=v8:3093
LOG=Y
R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/393283007

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22591 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 55d8d2f0
......@@ -1202,9 +1202,15 @@ function MakeScriptObject_(script, include_source) {
function MakePromiseEvent(event_data) {
if (event_data.type = "new Promise") {
if (event_data.type == "new") {
return new NewPromiseEvent(event_data);
}
if (event_data.type == "update") {
return new UpdatePromiseStatusEvent(event_data);
}
if (event_data.type == "chain") {
return new UpdatePromiseParentEvent(event_data);
}
}
......@@ -1227,6 +1233,40 @@ NewPromiseEvent.prototype.resolver = function() {
}
function UpdatePromiseStatusEvent(event_data) {
this.promise_ = event_data.promise;
this.status_ = event_data.status;
this.value_ = event_data.value;
}
UpdatePromiseStatusEvent.prototype.promise = PromiseGetter;
UpdatePromiseStatusEvent.prototype.status = function() {
return this.status_;
}
UpdatePromiseStatusEvent.prototype.value = function() {
return MakeMirror(this.value_);
}
function UpdatePromiseParentEvent(event_data) {
this.promise_ = event_data.promise;
this.parentPromise_ = event_data.parentPromise;
}
UpdatePromiseParentEvent.prototype.promise = PromiseGetter;
UpdatePromiseParentEvent.prototype.parentPromise = function() {
return MakeMirror(this.parentPromise_);
}
function MakeAsyncTaskEvent(event_data) {
return new AsyncTaskEvent(event_data);
}
......
......@@ -40,7 +40,7 @@ var lastMicrotaskId = 0;
throw MakeTypeError('resolver_not_a_function', [resolver]);
var promise = PromiseInit(this);
if (DEBUG_IS_ACTIVE) {
%DebugPromiseEvent({ type : "new Promise",
%DebugPromiseEvent({ type : "new",
promise: this,
resolver: resolver });
}
......@@ -62,6 +62,12 @@ var lastMicrotaskId = 0;
SET_PRIVATE(promise, promiseValue, value);
SET_PRIVATE(promise, promiseOnResolve, onResolve);
SET_PRIVATE(promise, promiseOnReject, onReject);
if (DEBUG_IS_ACTIVE && status !== 0) {
%DebugPromiseEvent({ type: "update",
promise: promise,
status: status,
value: value });
}
return promise;
}
......@@ -234,6 +240,11 @@ var lastMicrotaskId = 0;
-1);
break;
}
if (DEBUG_IS_ACTIVE) {
%DebugPromiseEvent({ type: "chain",
promise: deferred.promise,
parentPromise: this });
}
return deferred.promise;
}
......
......@@ -10,7 +10,7 @@ var exception = null;
var new_promise;
function listener(event, exec_state, event_data, data) {
if (event != Debug.DebugEvent.PromiseEvent) return;
if (!(event_data instanceof debug.NewPromiseEvent)) return;
try {
assertTrue(event_data.resolver().isFunction());
assertEquals(resolver, event_data.resolver().value());
......
......@@ -51,7 +51,7 @@ EXPECTED_FUNCTION_COUNT = 420
EXPECTED_FUZZABLE_COUNT = 335
EXPECTED_CCTEST_COUNT = 8
EXPECTED_UNKNOWN_COUNT = 4
EXPECTED_BUILTINS_COUNT = 813
EXPECTED_BUILTINS_COUNT = 815
# Don't call these at all.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment