зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 17aff9906595 (bug 1386584) because bug 1386299 had to be backed out. r=backout on a CLOSED TREE
This commit is contained in:
Родитель
2c0e4d8ac4
Коммит
5a6d56ddde
|
@ -7,55 +7,69 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { Cu, components } = require("chrome");
|
||||
(function (factory) {
|
||||
// This file might be require()d, but might also be loaded via
|
||||
// Cu.import. Account for the differences here.
|
||||
if (this.module && module.id.indexOf("stack") >= 0) {
|
||||
// require.
|
||||
const {components, Cu} = require("chrome");
|
||||
factory.call(this, components, Cu, exports);
|
||||
} else {
|
||||
// Cu.import.
|
||||
this.isWorker = false;
|
||||
factory.call(this, Components, Components.utils, this);
|
||||
this.EXPORTED_SYMBOLS = ["callFunctionWithAsyncStack", "describeNthCaller",
|
||||
"getStack"];
|
||||
}
|
||||
}).call(this, function (components, Cu, exports) {
|
||||
/**
|
||||
* Return a description of the Nth caller, suitable for logging.
|
||||
*
|
||||
* @param {Number} n the caller to describe
|
||||
* @return {String} a description of the nth caller.
|
||||
*/
|
||||
function describeNthCaller(n) {
|
||||
if (isWorker) {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a description of the Nth caller, suitable for logging.
|
||||
*
|
||||
* @param {Number} n the caller to describe
|
||||
* @return {String} a description of the nth caller.
|
||||
*/
|
||||
function describeNthCaller(n) {
|
||||
if (isWorker) {
|
||||
return "";
|
||||
let caller = components.stack;
|
||||
// Do one extra iteration to skip this function.
|
||||
while (n >= 0) {
|
||||
--n;
|
||||
caller = caller.caller;
|
||||
}
|
||||
|
||||
let func = caller.name;
|
||||
let file = caller.filename;
|
||||
if (file.includes(" -> ")) {
|
||||
file = caller.filename.split(/ -> /)[1];
|
||||
}
|
||||
let path = file + ":" + caller.lineNumber;
|
||||
|
||||
return func + "() -> " + path;
|
||||
}
|
||||
|
||||
let caller = components.stack;
|
||||
// Do one extra iteration to skip this function.
|
||||
while (n >= 0) {
|
||||
--n;
|
||||
caller = caller.caller;
|
||||
/**
|
||||
* Return a stack object that can be serialized and, when
|
||||
* deserialized, passed to callFunctionWithAsyncStack.
|
||||
*/
|
||||
function getStack() {
|
||||
return components.stack.caller;
|
||||
}
|
||||
|
||||
let func = caller.name;
|
||||
let file = caller.filename;
|
||||
if (file.includes(" -> ")) {
|
||||
file = caller.filename.split(/ -> /)[1];
|
||||
/**
|
||||
* Like Cu.callFunctionWithAsyncStack but handles the isWorker case
|
||||
* -- |Cu| isn't defined in workers.
|
||||
*/
|
||||
function callFunctionWithAsyncStack(callee, stack, id) {
|
||||
if (isWorker) {
|
||||
return callee();
|
||||
}
|
||||
return Cu.callFunctionWithAsyncStack(callee, stack, id);
|
||||
}
|
||||
let path = file + ":" + caller.lineNumber;
|
||||
|
||||
return func + "() -> " + path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a stack object that can be serialized and, when
|
||||
* deserialized, passed to callFunctionWithAsyncStack.
|
||||
*/
|
||||
function getStack() {
|
||||
return components.stack.caller;
|
||||
}
|
||||
|
||||
/**
|
||||
* Like Cu.callFunctionWithAsyncStack but handles the isWorker case
|
||||
* -- |Cu| isn't defined in workers.
|
||||
*/
|
||||
function callFunctionWithAsyncStack(callee, stack, id) {
|
||||
if (isWorker) {
|
||||
return callee();
|
||||
}
|
||||
return Cu.callFunctionWithAsyncStack(callee, stack, id);
|
||||
}
|
||||
|
||||
exports.callFunctionWithAsyncStack = callFunctionWithAsyncStack;
|
||||
exports.describeNthCaller = describeNthCaller;
|
||||
exports.getStack = getStack;
|
||||
exports.callFunctionWithAsyncStack = callFunctionWithAsyncStack;
|
||||
exports.describeNthCaller = describeNthCaller;
|
||||
exports.getStack = getStack;
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче