remove dependency between aggrow and stackRegistry

Reviewed By: bnham

Differential Revision: D3876267

fbshipit-source-id: 2ad7e70445f3f4641cde554e94de000403368233
This commit is contained in:
Charles Dick authored and Facebook Github Bot committed 2016-10-06 07:58:36 -07:00
1 parent 1502e66c31
commit 217a4449d4
7 files changed
+108 -82

No files matched your search

@@ -1,8 +1,8 @@
SHELL := /bin/bash
all:
NODE_PATH="../../../../node_modules/" babel --presets babel-preset-react-native -d out src
for f in out/*.js; do echo "// @generated" >> $$f; done
NODE_PATH="../../../../node_modules/" babel --presets babel-preset-react-native --source-maps inline -d out src
for f in out/*.js; do echo -e "\n// @generated" >> $$f; done
watch:
NODE_PATH="../../../../node_modules/" babel --watch --presets babel-preset-react-native -d out src
@@ -46,17 +46,16 @@ return stackIdMap[id];
}
function stackRegistry(interner){// eslint-disable-line no-unused-vars
function stackRegistry(){// eslint-disable-line no-unused-vars
return{
root:{id:0},
nodeCount:1,
insert:function insertNode(parent,label){
var labelId=interner.intern(label);
var node=parent[labelId];
insert:function insertNode(parent,frameId){
var node=parent[frameId];
if(node===undefined){
node={id:this.nodeCount};
this.nodeCount++;
parent[labelId]=node;
parent[frameId]=node;
}
return node;
},
@@ -116,7 +115,7 @@ return new stackData(stackIdMap,maxStackDepth);
}
function aggrow(strings,stacks,numRows){// eslint-disable-line no-unused-vars
function aggrow(numRows){// eslint-disable-line no-unused-vars
// expander ID definitions
var FIELD_EXPANDER_ID_MIN=0x0000;
var FIELD_EXPANDER_ID_MAX=0x7fff;
@@ -142,16 +141,16 @@ var NODE_REORDER_BIT=0x0004;// children need to be sorted
var NODE_REPOSITION_BIT=0x0008;// children need position
var NODE_INDENT_SHIFT=16;
function calleeFrameGetter(stack,depth){
function calleeFrameIdGetter(stack,depth){
return stack[depth];
}
function callerFrameGetter(stack,depth){
function callerFrameIdGetter(stack,depth){
return stack[stack.length-depth-1];
}
function createStackComparers(stackGetter,frameGetter){
var comparers=new Array(stacks.maxDepth);var _loop=function _loop(
function createStackComparers(stackGetter,frameIdGetter,maxStackDepth){
var comparers=new Array(maxStackDepth);var _loop=function _loop(
depth){
var captureDepth=depth;// NB: to capture depth per loop iteration
comparers[depth]=function calleeStackComparer(rowA,rowB){
@@ -166,8 +165,8 @@ return-1;
}else if(b.length<=captureDepth){
return 1;
}
return frameGetter(a,captureDepth)-frameGetter(b,captureDepth);
};};for(var depth=0;depth<stacks.maxDepth;depth++){_loop(depth);
return frameIdGetter(a,captureDepth)-frameIdGetter(b,captureDepth);
};};for(var depth=0;depth<maxStackDepth;depth++){_loop(depth);
}
return comparers;
}
@@ -325,6 +324,7 @@ nextActiveIndex));
function addChildrenWithStackExpander(row,expander,activeIndex,depth,nextActiveIndex){
var rowIndices=row.indices;
var stackGetter=expander.stackGetter;
var frameIdGetter=expander.frameIdGetter;
var frameGetter=expander.frameGetter;
var comparer=expander.comparers[depth];
var expandNextFrame=activeIndex|depth+1<<ACTIVE_EXPANDER_FRAME_SHIFT;
@@ -357,10 +357,10 @@ if(begin<rowIndices.length){
var end=begin+1;
while(end<rowIndices.length){
var endStack=stackGetter(rowIndices[end]);
if(frameGetter(beginStack,depth)!==frameGetter(endStack,depth)){
if(frameIdGetter(beginStack,depth)!==frameIdGetter(endStack,depth)){
row.children.push(createTreeNode(
row,
columnName+strings.get(frameGetter(beginStack,depth)),
columnName+frameGetter(frameIdGetter(beginStack,depth)),
rowIndices.subarray(begin,end),
expandNextFrame));
begin=end;
@@ -370,7 +370,7 @@ end++;
}
row.children.push(createTreeNode(
row,
columnName+strings.get(frameGetter(beginStack,depth)),
columnName+frameGetter(frameIdGetter(beginStack,depth)),
rowIndices.subarray(begin,end),
expandNextFrame));
}
@@ -418,27 +418,29 @@ comparer:comparer});
return FIELD_EXPANDER_ID_MIN+state.fieldExpanders.length-1;
},
addCalleeStackExpander:function addCalleeStackExpander(name,stackGetter){
addCalleeStackExpander:function addCalleeStackExpander(name,maxStackDepth,stackGetter,frameGetter){
if(STACK_EXPANDER_ID_MIN+state.fieldExpanders.length>=STACK_EXPANDER_ID_MAX){
throw'too many stack expanders!';
}
state.stackExpanders.push({
name:name,// name for column
stackGetter:stackGetter,// row index -> stack array
comparers:createStackComparers(stackGetter,calleeFrameGetter),// depth -> comparer
frameGetter:calleeFrameGetter});
comparers:createStackComparers(stackGetter,calleeFrameIdGetter,maxStackDepth),// depth -> comparer
frameIdGetter:calleeFrameIdGetter,// (stack, depth) -> string id
frameGetter:frameGetter});
return STACK_EXPANDER_ID_MIN+state.stackExpanders.length-1;
},
addCallerStackExpander:function addCallerStackExpander(name,stackGetter){
addCallerStackExpander:function addCallerStackExpander(name,maxStackDepth,stackGetter,frameGetter){
if(STACK_EXPANDER_ID_MIN+state.fieldExpanders.length>=STACK_EXPANDER_ID_MAX){
throw'too many stack expanders!';
}
state.stackExpanders.push({
name:name,
stackGetter:stackGetter,
comparers:createStackComparers(stackGetter,callerFrameGetter),
frameGetter:callerFrameGetter});
comparers:createStackComparers(stackGetter,callerFrameIdGetter,maxStackDepth),
frameIdGetter:callerFrameIdGetter,
frameGetter:frameGetter});
return STACK_EXPANDER_ID_MIN+state.stackExpanders.length-1;
},
@@ -616,4 +618,6 @@ contract:function contract(row){
contractRow(row);
}};
}// @generated
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZ2dyb3cuanMiXSwibmFtZXMiOlsic3RyaW5nSW50ZXJuZXIiLCJzdHJpbmdzIiwiaWRzIiwiaW50ZXJuIiwiaW50ZXJuU3RyaW5nIiwicyIsImZpbmQiLCJ1bmRlZmluZWQiLCJpZCIsImxlbmd0aCIsInB1c2giLCJnZXQiLCJnZXRTdHJpbmciLCJzdGFja0RhdGEiLCJzdGFja0lkTWFwIiwibWF4RGVwdGgiLCJnZXRTdGFjayIsInN0YWNrUmVnaXN0cnkiLCJyb290Iiwibm9kZUNvdW50IiwiaW5zZXJ0IiwiaW5zZXJ0Tm9kZSIsInBhcmVudCIsImZyYW1lSWQiLCJub2RlIiwiZmxhdHRlbiIsImZsYXR0ZW5TdGFja3MiLCJzdGFja0ZyYW1lQ291bnQiLCJjb3VudFN0YWNrcyIsInRyZWUiLCJkZXB0aCIsImxlYWYiLCJjb25zb2xlIiwibG9nIiwidG9TdHJpbmciLCJBcnJheSIsInN0YWNrQXJyYXkiLCJJbnQzMkFycmF5IiwibWF4U3RhY2tEZXB0aCIsImZsYXR0ZW5TdGFja3NJbXBsIiwic3RhY2siLCJjaGlsZFN0YWNrIiwiTWF0aCIsIm1heCIsIk51bWJlciIsInBvcCIsInN1YmFycmF5IiwibmV3U3RhY2siLCJpIiwiYWdncm93IiwibnVtUm93cyIsIkZJRUxEX0VYUEFOREVSX0lEX01JTiIsIkZJRUxEX0VYUEFOREVSX0lEX01BWCIsIlNUQUNLX0VYUEFOREVSX0lEX01JTiIsIlNUQUNLX0VYUEFOREVSX0lEX01BWCIsIklOVkFMSURfQUNUSVZFX0VYUEFOREVSIiwiQUNUSVZFX0VYUEFOREVSX01BU0siLCJBQ1RJVkVfRVhQQU5ERVJfRlJBTUVfU0hJRlQiLCJBR0dSRUdBVE9SX0lEX01BWCIsIkFDVElWRV9BR0dSRUdBVE9SX01BU0siLCJBQ1RJVkVfQUdHUkVHQVRPUl9BU0NfQklUIiwiTk9ERV9FWFBBTkRFRF9CSVQiLCJOT0RFX1JFQUdHUkVHQVRFX0JJVCIsIk5PREVfUkVPUkRFUl9CSVQiLCJOT0RFX1JFUE9TSVRJT05fQklUIiwiTk9ERV9JTkRFTlRfU0hJRlQiLCJjYWxsZWVGcmFtZUlkR2V0dGVyIiwiY2FsbGVyRnJhbWVJZEdldHRlciIsImNyZWF0ZVN0YWNrQ29tcGFyZXJzIiwic3RhY2tHZXR0ZXIiLCJmcmFtZUlkR2V0dGVyIiwiY29tcGFyZXJzIiwiY2FwdHVyZURlcHRoIiwiY2FsbGVlU3RhY2tDb21wYXJlciIsInJvd0EiLCJyb3dCIiwiYSIsImIiLCJjcmVhdGVUcmVlTm9kZSIsImxhYmVsIiwiaW5kaWNlcyIsImV4cGFuZGVyIiwiaW5kZW50Iiwic3RhdGUiLCJjaGlsZHJlbiIsImFnZ3JlZ2F0ZXMiLCJ0b3AiLCJoZWlnaHQiLCJub1NvcnRPcmRlciIsImZpZWxkRXhwYW5kZXJzIiwic3RhY2tFeHBhbmRlcnMiLCJhY3RpdmVFeHBhbmRlcnMiLCJhZ2dyZWdhdG9ycyIsImFjdGl2ZUFnZ3JlZ2F0b3JzIiwic29ydGVyIiwiZXZhbHVhdGVBZ2dyZWdhdGUiLCJyb3ciLCJqIiwiYWdncmVnYXRvciIsImV2YWx1YXRlQWdncmVnYXRlcyIsImV2YWx1YXRlT3JkZXIiLCJjaGlsZCIsInNvcnQiLCJldmFsdWF0ZVBvc2l0aW9uIiwiY2hpbGRUb3AiLCJnZXRSb3dzSW1wbCIsInJlc3VsdCIsInVwZGF0ZUhlaWdodCIsImhlaWdodENoYW5nZSIsImFkZENoaWxkcmVuV2l0aEZpZWxkRXhwYW5kZXIiLCJuZXh0QWN0aXZlSW5kZXgiLCJyb3dJbmRpY2VzIiwiY29tcGFyZXIiLCJiZWdpbiIsImVuZCIsIm5hbWUiLCJmb3JtYXR0ZXIiLCJhZGRDaGlsZHJlbldpdGhTdGFja0V4cGFuZGVyIiwiYWN0aXZlSW5kZXgiLCJmcmFtZUdldHRlciIsImV4cGFuZE5leHRGcmFtZSIsImNvbHVtbk5hbWUiLCJiZWdpblN0YWNrIiwiZW5kU3RhY2siLCJjb250cmFjdFJvdyIsInBydW5lRXhwYW5kZXJzIiwib2xkRXhwYW5kZXIiLCJuZXdFeHBhbmRlciIsImFkZEZpZWxkRXhwYW5kZXIiLCJhZGRDYWxsZWVTdGFja0V4cGFuZGVyIiwiYWRkQ2FsbGVyU3RhY2tFeHBhbmRlciIsImdldEV4cGFuZGVycyIsImV4cGFuZGVycyIsImdldEV4cGFuZGVyTmFtZSIsInNldEFjdGl2ZUV4cGFuZGVycyIsInNsaWNlIiwiZ2V0QWN0aXZlRXhwYW5kZXJzIiwiYWRkQWdncmVnYXRvciIsImdldEFnZ3JlZ2F0b3JzIiwiZ2V0QWdncmVnYXRvck5hbWUiLCJzZXRBY3RpdmVBZ2dyZWdhdG9ycyIsImFzY2VuZGluZyIsImNhcHR1cmVTb3J0ZXIiLCJjYXB0dXJlSW5kZXgiLCJjIiwiZ2V0QWN0aXZlQWdncmVnYXRvcnMiLCJnZXRSb3dzIiwiZ2V0Um93TGFiZWwiLCJnZXRSb3dJbmRlbnQiLCJnZXRSb3dBZ2dyZWdhdGUiLCJpbmRleCIsImdldEhlaWdodCIsImNhbkV4cGFuZCIsImNhbkNvbnRyYWN0IiwiZXhwYW5kIiwiZXhJZCIsImNvbnRyYWN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFTQSxlQUFULEVBQTBCLENBQUU7QUFDMUIsR0FBTUMsU0FBVSxFQUFoQjtBQUNBLEdBQU1DLEtBQU0sRUFBWjtBQUNBLE1BQU87QUFDTEMsT0FBUSxRQUFTQyxhQUFULENBQXNCQyxDQUF0QixDQUF5QjtBQUMvQixHQUFNQyxNQUFPSixJQUFJRyxDQUFKLENBQWI7QUFDQSxHQUFJQyxPQUFTQyxTQUFiLENBQXdCO0FBQ3RCLEdBQU1DLElBQUtQLFFBQVFRLE1BQW5CO0FBQ0FQLElBQUlHLENBQUosRUFBU0csRUFBVDtBQUNBUCxRQUFRUyxJQUFSLENBQWFMLENBQWI7QUFDQSxNQUFPRyxHQUFQO0FBQ0QsQ0FMRCxJQUtPO0FBQ0wsTUFBT0YsS0FBUDtBQUNEO0FBQ0YsQ0FYSTtBQVlMSyxJQUFLLFFBQVNDLFVBQVQsQ0FBbUJKLEVBQW5CLENBQXVCO0FBQzFCLE1BQU9QLFNBQVFPLEVBQVIsQ0FBUDtBQUNELENBZEksQ0FBUDs7QUFnQkQ7O0FBRUQsUUFBU0ssVUFBVCxDQUFtQkMsVUFBbkIsQ0FBK0JDLFFBQS9CLENBQXlDLENBQUU7QUFDekMsTUFBTztBQUNMQSxTQUFVQSxRQURMO0FBRUxKLElBQUssUUFBU0ssU0FBVCxDQUFrQlIsRUFBbEIsQ0FBc0I7QUFDekIsTUFBT00sWUFBV04sRUFBWCxDQUFQO0FBQ0QsQ0FKSSxDQUFQOztBQU1EOztBQUVELFFBQVNTLGNBQVQsRUFBeUIsQ0FBRTtBQUN6QixNQUFPO0FBQ0xDLEtBQU0sQ0FBRVYsR0FBSSxDQUFOLENBREQ7QUFFTFcsVUFBVyxDQUZOO0FBR0xDLE9BQVEsUUFBU0MsV0FBVCxDQUFvQkMsTUFBcEIsQ0FBNEJDLE9BQTVCLENBQXFDO0FBQzNDLEdBQUlDLE1BQU9GLE9BQU9DLE9BQVAsQ0FBWDtBQUNBLEdBQUlDLE9BQVNqQixTQUFiLENBQXdCO0FBQ3RCaUIsS0FBTyxDQUFFaEIsR0FBSSxLQUFLVyxTQUFYLENBQVA7QUFDQSxLQUFLQSxTQUFMO0FBQ0FHLE9BQU9DLE9BQVAsRUFBa0JDLElBQWxCO0FBQ0Q7QUFDRCxNQUFPQSxLQUFQO0FBQ0QsQ0FYSTtBQVlMQyxRQUFTLFFBQVNDLGNBQVQsRUFBeUI7QUFDaEMsR0FBSUMsaUJBQWtCLENBQXRCO0FBQ0EsUUFBU0MsWUFBVCxDQUFxQkMsSUFBckIsQ0FBMkJDLEtBQTNCLENBQWtDO0FBQ2hDLEdBQUlDLE1BQU8sSUFBWDtBQUNBLElBQUssR0FBTVIsUUFBWCxHQUFzQk0sS0FBdEIsQ0FBNEI7QUFDMUIsR0FBSU4sVUFBWSxJQUFoQixDQUFzQjtBQUNwQlEsS0FBT0gsWUFBWUMsS0FBS04sT0FBTCxDQUFaLENBQTJCTyxNQUFRLENBQW5DLENBQVA7QUFDRDtBQUNGO0FBQ0QsR0FBSUMsSUFBSixDQUFVO0FBQ1JKLGlCQUFtQkcsS0FBbkI7QUFDRDtBQUNELE1BQU8sTUFBUDtBQUNEO0FBQ0RGLFlBQVksS0FBS1YsSUFBakIsQ0FBdUIsQ0FBdkI7QUFDQWMsUUFBUUMsR0FBUixDQUFZLGdDQUFrQyxDQUFDTixnQkFBa0IsQ0FBbkIsRUFBc0JPLFFBQXRCLEVBQWxDLENBQXFFLEdBQWpGO0FBQ0EsR0FBTXBCLFlBQWEsR0FBSXFCLE1BQUosQ0FBVSxLQUFLaEIsU0FBZixDQUFuQjtBQUNBLEdBQU1pQixZQUFhLEdBQUlDLFdBQUosQ0FBZVYsZ Line truncated
// @generated
@@ -145,28 +145,28 @@ return type.getRef().value.name;// element.type symbolicated name
return'#unknown';
}
function buildReactComponentTree(visitor,registry){
function buildReactComponentTree(visitor,registry,strings){
var ref=visitor.getRef();
if(ref.reactTree||ref.reactParent===undefined){
return;// has one or doesn't need one
}
var parentVisitor=ref.reactParent;
if(parentVisitor===null){
ref.reactTree=registry.insert(registry.root,getInternalInstanceName(visitor));
ref.reactTree=registry.insert(registry.root,strings.intern(getInternalInstanceName(visitor)));
}else if(parentVisitor){
var parentRef=parentVisitor.getRef();
buildReactComponentTree(parentVisitor,registry);
buildReactComponentTree(parentVisitor,registry,strings);
var relativeName=getInternalInstanceName(visitor);
if(ref.reactKey){
relativeName=ref.reactKey+': '+relativeName;
}
ref.reactTree=registry.insert(parentRef.reactTree,relativeName);
ref.reactTree=registry.insert(parentRef.reactTree,strings.intern(relativeName));
}else{
throw'non react instance parent of react instance';
}
}
function markReactComponentTree(refs,registry){
function markReactComponentTree(refs,registry,strings){
// annotate all refs that are react internal instances with their parent and name
// ref.reactParent = visitor that points to parent instance,
// null if we know it's an instance, but don't have a parent yet
@@ -201,7 +201,7 @@ edgeRef.reactParent=visitorClone;
// build tree of react internal instances (since that's what has the structure)
// fill in ref.reactTree = path registry node
forEachRef(refs,function(visitor){
buildReactComponentTree(visitor,registry);
buildReactComponentTree(visitor,registry,strings);
});
// hook in components by looking at their _reactInternalInstance fields
forEachRef(refs,function(visitor){
@@ -253,14 +253,14 @@ ref.module='#unknown '+name;
});
}
function registerPathToRoot(refs,registry){
markReactComponentTree(refs,registry);
function registerPathToRoot(refs,registry,strings){
markReactComponentTree(refs,registry,strings);
markModules(refs);
var breadth=[];
forEachRef(refs,function(visitor){
var ref=visitor.getRef();
if(ref.type==='CallbackGlobalObject'){
ref.rootPath=registry.insert(registry.root,ref.type);
ref.rootPath=registry.insert(registry.root,strings.intern(ref.type));
breadth.push(visitor.clone());
}
});var _loop=function _loop(){
@@ -276,7 +276,7 @@ var pathName=edgeRef.type;
if(edgeName){
pathName=edgeName+': '+pathName;
}
edgeRef.rootPath=registry.insert(ref.rootPath,pathName);
edgeRef.rootPath=registry.insert(ref.rootPath,strings.intern(pathName));
nextBreadth.push(edgeVisitor.clone());
// copy module and react tree forward
if(edgeRef.module===undefined){
@@ -330,10 +330,10 @@ newData.set(data);
var dataOffset=this.data.length;
this.data=null;
registerPathToRoot(capture.refs,this.stacks);
registerPathToRoot(capture.refs,this.stacks,this.strings);
var internedCaptureId=this.strings.intern(captureId);
var noneString=this.strings.intern('#none');
var noneStack=this.stacks.insert(this.stacks.root,'#none');
var noneStack=this.stacks.insert(this.stacks.root,noneString);
forEachRef(capture.refs,function(visitor){
var ref=visitor.getRef();
var id=visitor.id;
@@ -382,7 +382,7 @@ var agStrings=this.strings;
var agStacks=this.stacks.flatten();
var agData=this.data;
var agNumRows=agData.length/numFields;
var ag=new aggrow(agStrings,agStacks,agNumRows);
var ag=new aggrow(agNumRows);
ag.addFieldExpander('Id',
function getId(row){
@@ -414,11 +414,19 @@ function compareSize(rowA,rowB){
return agData[rowA*numFields+traceField]-agData[rowB*numFields+traceField];
});
var pathExpander=ag.addCalleeStackExpander('Path',
function getStack(row){return agStacks.get(agData[row*numFields+pathField]);});
var pathExpander=ag.addCalleeStackExpander(
'Path',
agStacks.maxDepth,
function getStack(row){return agStacks.get(agData[row*numFields+pathField]);},
function getFrame(id){return agStrings.get(id);});
var reactExpander=ag.addCalleeStackExpander(
'React Tree',
agStacks.maxDepth,
function getStack(row){return agStacks.get(agData[row*numFields+reactField]);},
function getFrame(id){return agStrings.get(id);});
var reactExpander=ag.addCalleeStackExpander('React Tree',
function getStack(row){return agStacks.get(agData[row*numFields+reactField]);});
var valueExpander=ag.addFieldExpander('Value',
function getValue(row){return agStrings.get(agData[row*numFields+valueField]);},
@@ -469,4 +477,6 @@ var r=new captureRegistry();
r.register('trace',preLoadedCapture);
preLoadedCapture=undefined;// let GG clean up the capture
ReactDOM.render(React.createElement(Table,{aggrow:r.getAggrow()}),document.body);
}// @generated
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWFwQ2FwdHVyZS5qcyJdLCJuYW1lcyI6WyJSZWZWaXNpdG9yIiwicmVmcyIsImlkIiwicHJvdG90eXBlIiwibW92ZVRvRWRnZSIsIm5hbWUiLCJyZWYiLCJlZGdlcyIsImVkZ2VJZCIsInVuZGVmaW5lZCIsIm1vdmVUb0ZpcnN0IiwiY2FsbGJhY2siLCJmb3JFYWNoRWRnZSIsInZpc2l0b3IiLCJnZXRUeXBlIiwidHlwZSIsImdldFJlZiIsImNsb25lIiwiaXNEZWZpbmVkIiwiZ2V0VmFsdWUiLCJ2YWx1ZSIsInJvcGUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJpbmRleCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiam9pbiIsInVybCIsImxpbmUiLCJjb2wiLCJmdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwiZXhlY3V0YWJsZSIsImZvckVhY2hSZWYiLCJmaXJzdFJlZiIsImdldEludGVybmFsSW5zdGFuY2VOYW1lIiwiZGlzcGxheU5hbWUiLCJidWlsZFJlYWN0Q29tcG9uZW50VHJlZSIsInJlZ2lzdHJ5Iiwic3RyaW5ncyIsInJlYWN0VHJlZSIsInJlYWN0UGFyZW50IiwicGFyZW50VmlzaXRvciIsImluc2VydCIsInJvb3QiLCJpbnRlcm4iLCJwYXJlbnRSZWYiLCJyZWxhdGl2ZU5hbWUiLCJyZWFjdEtleSIsIm1hcmtSZWFjdENvbXBvbmVudFRyZWUiLCJ2aXNpdG9yQ2xvbmUiLCJlZGdlTmFtZSIsImVkZ2VWaXNpdG9yIiwiZWRnZVJlZiIsImNoaWxkTmFtZSIsImNoaWxkVmlzaXRvciIsImNoaWxkUmVmIiwiaW5zdGFuY2VSZWYiLCJmdW5jdGlvblVybEZpbGVOYW1lIiwiZmlsZSIsImxhc3RJbmRleE9mIiwibWFya01vZHVsZXMiLCJtb2R1bGVzIiwibWVtYmVyTmFtZSIsIm1lbWJlciIsIm1vZHVsZSIsInJlZ2lzdGVyUGF0aFRvUm9vdCIsImJyZWFkdGgiLCJyb290UGF0aCIsInB1c2giLCJuZXh0QnJlYWR0aCIsImkiLCJwYXRoTmFtZSIsImNhcHR1cmVSZWdpc3RyeSIsInN0cmluZ0ludGVybmVyIiwic3RhY2tzIiwic3RhY2tSZWdpc3RyeSIsImRhdGEiLCJJbnQzMkFycmF5IiwiaWRGaWVsZCIsInR5cGVGaWVsZCIsInNpemVGaWVsZCIsInRyYWNlRmllbGQiLCJwYXRoRmllbGQiLCJyZWFjdEZpZWxkIiwidmFsdWVGaWVsZCIsIm1vZHVsZUZpZWxkIiwibnVtRmllbGRzIiwicmVnaXN0ZXIiLCJyZWdpc3RlckNhcHR1cmUiLCJjYXB0dXJlSWQiLCJjYXB0dXJlIiwicm93Q291bnQiLCJtYXJrZWRCbG9ja3MiLCJjb25zb2xlIiwibG9nIiwidG9TdHJpbmciLCJuZXdEYXRhIiwic2V0IiwiZGF0YU9mZnNldCIsImludGVybmVkQ2FwdHVyZUlkIiwibm9uZVN0cmluZyIsIm5vbmVTdGFjayIsInNpemUiLCJibG9jayIsImNhcGFjaXR5IiwiY2VsbFNpemUiLCJnZXRBZ2dyb3ciLCJhZ1N0cmluZ3MiLCJhZ1N0YWNrcyIsImZsYXR0ZW4iLCJhZ0RhdGEiLCJhZ051bVJvd3MiLCJhZyIsImFnZ3JvdyIsImFkZEZpZWxkRXhwYW5kZXIiLCJnZXRJZCIsInJvdyIsImNvbXBhcmVBZGRyZXNzIiwicm93QSIsInJvd0IiLCJ0eXBlRXhwYW5kZXIiLCJnZXQiLCJjb21wYXJlVHlwZSIsImdldFNpemUiLCJjb21wYXJlU2l6ZSIsInBhdGhFeHBhbmRlciIsImFkZENhbGxlZVN0YWNrRXhwYW5kZXIiLCJtYXhEZXB0aCIsImdldFN0YWNrIiwiZ2V0RnJhbWUiLCJyZWFjdEV4cGFuZGVyIiwidmFsdWVFeHBhbmRlciIsImNvbXBhcmVWYWx1ZSIsIm1vZHVsZUV4cGFuZGVyIiwiZ2V0TW9kdWxlIiwiY29tcGFyZU1vZHVsZSIsInNpemVBZ2dyZWdhdG9yIiwiYWRkQWdncmVnYXRvciIsImFnZ3JlZ2F0ZVNpemUiLCJpbmRpY2VzIiwiZm9ybWF0U2l6ZSIsInNvcnRTaXplIiwiYSIsImIiLCJjb3VudEFnZ3JlZ2F0b3IiLCJhZ2dyZWdhdGVDb3VudCIsImZvcm1hdENvdW50Iiwic29ydENvdW50Iiwic2V0QWN0aXZlRXhwYW5kZXJzIiwic2V0QWN0aXZlQWdncmVnYXRvcnMiLCJwcmVMb2FkZWRDYXB0dXJlIiwiciIsIlJlYWN0RE9NIiwicmVuZGVyIiwiZG9jdW1lbnQiLCJib2R5Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7O0FBRUEsUUFBU0EsV0FBVCxDQUFvQkMsSUFBcEIsQ0FBMEJDLEVBQTFCLENBQThCO0FBQzVCLEtBQUtELElBQUwsQ0FBWUEsSUFBWjtBQUNBLEtBQUtDLEVBQUwsQ0FBVUEsRUFBVjtBQUNEOztBQUVERixXQUFXRyxTQUFYLENBQXVCO0FBQ3JCQyxXQUFZLFFBQVNBLFdBQVQsQ0FBb0JDLElBQXBCLENBQTBCO0FBQ3BDLEdBQU1DLEtBQU0sS0FBS0wsSUFBTCxDQUFVLEtBQUtDLEVBQWYsQ0FBWjtBQUNBLEdBQUlJLEtBQU9BLElBQUlDLEtBQWYsQ0FBc0I7QUFDcEIsR0FBTUEsT0FBUUQsSUFBSUMsS0FBbEI7QUFDQSxJQUFLLEdBQU1DLE9BQVgsR0FBcUJELE1BQXJCLENBQTRCO0FBQzFCLEdBQUlBLE1BQU1DLE1BQU4sSUFBa0JILElBQXRCLENBQTRCO0FBQzFCLEtBQUtILEVBQUwsQ0FBVU0sTUFBVjtBQUNBLE1BQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNELEtBQUtOLEVBQUwsQ0FBVU8sU0FBVjtBQUNBLE1BQU8sS0FBUDtBQUNELENBZG9CO0FBZXJCQyxZQUFhLFFBQVNBLFlBQVQsQ0FBcUJDLFFBQXJCLENBQStCO0FBQzFDLEdBQU1MLEtBQU0sS0FBS0wsSUFBTCxDQUFVLEtBQUtDLEVBQWYsQ0FBWjtBQUNBLEdBQUlJLEtBQU9BLElBQUlDLEtBQWYsQ0FBc0I7QUFDcEIsR0FBTUEsT0FBUUQsSUFBSUMsS0FBbEI7QUFDQSxJQUFLLEdBQU1DLE9BQVgsR0FBcUJELE1BQXJCLENBQTRCO0FBQzFCLEtBQUtMLEVBQUwsQ0FBVU0sTUFBVjtBQUNBLEdBQUlHLFNBQVNKLE1BQU1DLE1BQU4sQ0FBVCxDQUF3QixJQUF4QixDQUFKLENBQW1DO0FBQ2pDLE1BQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNELEtBQUtOLEVBQUwsQ0FBVU8sU0FBVjtBQUNBLE1BQU8sS0FBUDtBQUNELENBNUJvQjtBQTZCckJHLFlBQWEsUUFBU0EsWUFBVCxDQUFxQkQsUUFBckIsQ0FBK0I7QUFDMUMsR0FBTUwsS0FBTSxLQUFLTCxJQUFMLENBQVUsS0FBS0MsRUFBZixDQUFaO0FBQ0EsR0FBSUksS0FBT0EsSUFBSUMsS0FBZixDQUFzQjtBQUNwQixHQUFNQSxPQUFRRCxJQUFJQyxLQUFsQjtBQUNBLEdBQU1NLFNBQVUsR0FBSWIsV0FBSixDQUFlLEtBQUtDLElBQXBCLENBQTBCUSxTQUExQixDQUFoQjtBQUNBLElBQUssR0FBTUQsT0FBWCxHQUFxQkQsTUFBckIsQ0FBNEI7QUFDMUJNLFFBQVFYLEVBQVIsQ0FBYU0sTUFBYjtBQUNBRyxTQUFTSixNQUFNQyxNQUFOLENBQVQsQ0FBd0JLLE9BQXhCO0FBQ0Q7QUFDRjtBQUNGLENBdkNvQjtBQXdDckJDLFFBQVMsUUFBU0EsUUFBVCxFQUFtQjtBQUMxQixHQUFNUixLQUFNLEtBQUtMLElBQUwsQ0FBVSxLQUFLQyxFQUFmLENBQVo7QUFDQSxHQUFJSSxHQUFKLENBQVM7QUFDUCxNQUFPQSxLQUFJUyxJQUFYO0FBQ0Q7QUFDRCxNQUFPTixVQUFQO0FBQ0QsQ0E5Q29CO0FBK0NyQk8sT0FBUSxRQUFTQSxPQUFULEVBQWtCO0FBQ3hCLE1BQU8sTUFBS2YsSUFBTCxDQUFVLEtBQUtDLEVBQWYsQ0FBUDtBQUNELENBakRvQjtBQWtEckJlLE1BQU8sUUFBU0EsTUFBVCxFQUFpQjtBQUN0QixNQUFPLElBQUlqQixXQUFKLENBQWUsS0FBS0MsSUFBcEIsQ0FBMEIsS0FBS0MsRUFBL0IsQ0FBUDtBQUNELENBcERvQjtBQXFEckJnQixVQUFXLFFBQVNBLFVBQVQsRUFBcUI7QUFDOUIsTUFBTyxDQUFDLENBQUMsS0FBS2hCLEVBQWQ7QUFDRCxDQXZEb0I7QUF3RHJCaUIsU0FBVSxRQUFTQSxTQUFULEVBQW9CO0FBQzVCLEdBQU1iLEtBQU0sS0FBS0wsSUFBTCxDQUFVLEtBQUtDLEVBQWYsQ0FBWjtBQUNBLEdBQUlJLEdBQUosQ0FBUztBQUNQL Line truncated
// @generated
@@ -546,4 +546,6 @@ document.body.addEventListener('keydown',this.keydown);
{
document.body.removeEventListener('keydown',this.keydown);
}}]);return Table;}(React.Component);// @generated
}}]);return Table;}(React.Component);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90YWJsZS5qcyJdLCJuYW1lcyI6WyJyb3dIZWlnaHQiLCJ0cmVlSW5kZW50IiwiRHJhZ2dhYmxlIiwicHJvcHMiLCJpZCIsImRyYWdTdGFydCIsImUiLCJkYXRhVHJhbnNmZXIiLCJzZXREYXRhIiwiUmVhY3QiLCJjbG9uZUVsZW1lbnQiLCJjaGlsZHJlbiIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZWxlbWVudCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJEcm9wVGFyZ2V0IiwidGhpc0lkIiwiZHJvcEZpbHRlciIsImRyb3BBY3Rpb24iLCJvbkRyYWdPdmVyIiwic291cmNlSWQiLCJnZXREYXRhIiwicHJldmVudERlZmF1bHQiLCJvbkRyb3AiLCJmdW5jIiwiRXhwYW5kZXJDb25maWd1cmF0aW9uIiwiYWdncm93IiwiZXhwYW5kZXIiLCJ0b1N0cmluZyIsIndpZHRoIiwiaGVpZ2h0IiwiYm9yZGVyIiwibWFyZ2luIiwiZ2V0RXhwYW5kZXJOYW1lIiwiVGFibGVDb25maWd1cmF0aW9uIiwic3RhdGUiLCJleHBhbmRlZCIsImV4IiwiZXhwYW5kZXJUZXh0IiwiY29uZmlnIiwiZ2V0RXhwYW5kZXJzIiwibWFwIiwicmVuZGVyRXhwYW5kZXIiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIm92ZXJmbG93IiwiYm9yZGVyTGVmdCIsInNldFN0YXRlIiwib2JqZWN0IiwiVGFibGVIZWFkZXIiLCJhZ2dyZWdhdG9ycyIsImdldEFjdGl2ZUFnZ3JlZ2F0b3JzIiwiZXhwYW5kZXJzIiwiZ2V0QWN0aXZlRXhwYW5kZXJzIiwiaGVhZGVycyIsImkiLCJsZW5ndGgiLCJuYW1lIiwiZ2V0QWdncmVnYXRvck5hbWUiLCJwdXNoIiwicyIsInN0YXJ0c1dpdGgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmbGV4U2hyaW5rIiwidGV4dEFsaWduIiwiYmciLCJzZXAiLCJhbGlnbkl0ZW1zIiwiYm9yZGVyQm90dG9tIiwiVGFibGUiLCJ2aWV3cG9ydCIsInRvcCIsImN1cnNvciIsInRhcmdldCIsIk1hdGgiLCJmbG9vciIsInNjcm9sbFRvcCIsImNsaWVudEhlaWdodCIsImNlaWwiLCJyb3ciLCJuZXdDdXJzb3IiLCJjb250cmFjdCIsImNvbnNvbGUiLCJsb2ciLCJleHBhbmQiLCJfc2Nyb2xsRGl2Iiwic2Nyb2xsRGl2IiwiZ2V0Um93cyIsImtleUNvZGUiLCJfa2VlcEN1cnNvckluVmlld3BvcnQiLCJnZXRIZWlnaHQiLCJjYW5Db250cmFjdCIsIl9jb250cmFjdFJvdyIsImdldFJvd0luZGVudCIsImluZGVudCIsImNhbkV4cGFuZCIsIl9leHBhbmRSb3ciLCJkIiwic0luZGV4IiwicGFyc2VJbnQiLCJzdWJzdHIiLCJkSW5kZXgiLCJhY3RpdmUiLCJkcmFnZ2VkIiwic3BsaWNlIiwic2V0QWN0aXZlQWdncmVnYXRvcnMiLCJzZXRBY3RpdmVFeHBhbmRlcnMiLCJzRXhwYW5kZXIiLCJzdWJzdHJpbmciLCJmbGV4R3JvdyIsInNjcm9sbCIsImRpdiIsInBvc2l0aW9uIiwicmVuZGVyVmlydHVhbGl6ZWRSb3dzIiwicm93cyIsInJlbmRlclJvdyIsImNoaWxkIiwiY29sdW1ucyIsInJvd1RleHQiLCJhZ2dyZWdhdGVzIiwicGFyZW50IiwiYWdncmVnYXRlIiwiZ2V0Um93QWdncmVnYXRlIiwibWFyZ2luTGVmdCIsImdldFJvd0xhYmVsIiwid2hpdGVTcGFjZSIsIm1hcmdpblJpZ2h0Iiwia2V5ZG93biIsImJpbmQiLCJkb2N1bWVudCIsImJvZHkiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQU1BLFdBQVksRUFBbEI7QUFDQSxHQUFNQyxZQUFhLEVBQW5CLEM7O0FBRU1DLFMsa0VBQW9DO0FBQ3hDLG1CQUFZQyxLQUFaLENBQW1CO0FBQ1hBLEtBRFc7QUFFbEIs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 Line truncated
// @generated
@@ -46,17 +46,16 @@ function stackData(stackIdMap, maxDepth) { // eslint-disable-line no-unused-vars
};
}
function stackRegistry(interner) { // eslint-disable-line no-unused-vars
function stackRegistry() { // eslint-disable-line no-unused-vars
return {
root: { id: 0 },
nodeCount: 1,
insert: function insertNode(parent, label) {
const labelId = interner.intern(label);
let node = parent[labelId];
insert: function insertNode(parent, frameId) {
let node = parent[frameId];
if (node === undefined) {
node = { id: this.nodeCount };
this.nodeCount++;
parent[labelId] = node;
parent[frameId] = node;
}
return node;
},
@@ -116,7 +115,7 @@ function stackRegistry(interner) { // eslint-disable-line no-unused-vars
};
}
function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-vars
function aggrow(numRows) { // eslint-disable-line no-unused-vars
// expander ID definitions
const FIELD_EXPANDER_ID_MIN = 0x0000;
const FIELD_EXPANDER_ID_MAX = 0x7fff;
@@ -142,17 +141,17 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
const NODE_REPOSITION_BIT = 0x0008; // children need position
const NODE_INDENT_SHIFT = 16;
function calleeFrameGetter(stack, depth) {
function calleeFrameIdGetter(stack, depth) {
return stack[depth];
}
function callerFrameGetter(stack, depth) {
function callerFrameIdGetter(stack, depth) {
return stack[stack.length - depth - 1];
}
function createStackComparers(stackGetter, frameGetter) {
const comparers = new Array(stacks.maxDepth);
for (let depth = 0; depth < stacks.maxDepth; depth++) {
function createStackComparers(stackGetter, frameIdGetter, maxStackDepth) {
const comparers = new Array(maxStackDepth);
for (let depth = 0; depth < maxStackDepth; depth++) {
const captureDepth = depth; // NB: to capture depth per loop iteration
comparers[depth] = function calleeStackComparer(rowA, rowB) {
const a = stackGetter(rowA);
@@ -166,7 +165,7 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
} else if (b.length <= captureDepth) {
return 1;
}
return frameGetter(a, captureDepth) - frameGetter(b, captureDepth);
return frameIdGetter(a, captureDepth) - frameIdGetter(b, captureDepth);
};
}
return comparers;
@@ -325,6 +324,7 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
function addChildrenWithStackExpander(row, expander, activeIndex, depth, nextActiveIndex) {
const rowIndices = row.indices;
const stackGetter = expander.stackGetter;
const frameIdGetter = expander.frameIdGetter;
const frameGetter = expander.frameGetter;
const comparer = expander.comparers[depth];
const expandNextFrame = activeIndex | ((depth + 1) << ACTIVE_EXPANDER_FRAME_SHIFT);
@@ -357,10 +357,10 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
let end = begin + 1;
while (end < rowIndices.length) {
const endStack = stackGetter(rowIndices[end]);
if (frameGetter(beginStack, depth) !== frameGetter(endStack, depth)) {
if (frameIdGetter(beginStack, depth) !== frameIdGetter(endStack, depth)) {
row.children.push(createTreeNode(
row,
columnName + strings.get(frameGetter(beginStack, depth)),
columnName + frameGetter(frameIdGetter(beginStack, depth)),
rowIndices.subarray(begin, end),
expandNextFrame));
begin = end;
@@ -370,7 +370,7 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
}
row.children.push(createTreeNode(
row,
columnName + strings.get(frameGetter(beginStack, depth)),
columnName + frameGetter(frameIdGetter(beginStack, depth)),
rowIndices.subarray(begin, end),
expandNextFrame));
}
@@ -418,27 +418,29 @@ function aggrow(strings, stacks, numRows) { // eslint-disable-line no-unused-var
});
return FIELD_EXPANDER_ID_MIN + state.fieldExpanders.length - 1;
},
addCalleeStackExpander: function addCalleeStackExpander(name, stackGetter) {
addCalleeStackExpander: function addCalleeStackExpander(name, maxStackDepth, stackGetter, frameGetter) {
if (STACK_EXPANDER_ID_MIN + state.fieldExpanders.length >= STACK_EXPANDER_ID_MAX) {
throw 'too many stack expanders!';
}
state.stackExpanders.push({
name: name, // name for column
stackGetter: stackGetter, // row index -> stack array
comparers: createStackComparers(stackGetter, calleeFrameGetter), // depth -> comparer
frameGetter: calleeFrameGetter, // (stack, depth) -> string id
comparers: createStackComparers(stackGetter, calleeFrameIdGetter, maxStackDepth), // depth -> comparer
frameIdGetter: calleeFrameIdGetter, // (stack, depth) -> string id
frameGetter: frameGetter,
});
return STACK_EXPANDER_ID_MIN + state.stackExpanders.length - 1;
},
addCallerStackExpander: function addCallerStackExpander(name, stackGetter) {
addCallerStackExpander: function addCallerStackExpander(name, maxStackDepth, stackGetter, frameGetter) {
if (STACK_EXPANDER_ID_MIN + state.fieldExpanders.length >= STACK_EXPANDER_ID_MAX) {
throw 'too many stack expanders!';
}
state.stackExpanders.push({
name: name,
stackGetter: stackGetter,
comparers: createStackComparers(stackGetter, callerFrameGetter),
frameGetter: callerFrameGetter,
comparers: createStackComparers(stackGetter, callerFrameIdGetter, maxStackDepth),
frameIdGetter: callerFrameIdGetter,
frameGetter: frameGetter,
});
return STACK_EXPANDER_ID_MIN + state.stackExpanders.length - 1;
},
@@ -145,28 +145,28 @@ function getInternalInstanceName(visitor) {
return '#unknown';
}
function buildReactComponentTree(visitor, registry) {
function buildReactComponentTree(visitor, registry, strings) {
const ref = visitor.getRef();
if (ref.reactTree || ref.reactParent === undefined) {
return; // has one or doesn't need one
}
const parentVisitor = ref.reactParent;
if (parentVisitor === null) {
ref.reactTree = registry.insert(registry.root, getInternalInstanceName(visitor));
ref.reactTree = registry.insert(registry.root, strings.intern(getInternalInstanceName(visitor)));
} else if (parentVisitor) {
const parentRef = parentVisitor.getRef();
buildReactComponentTree(parentVisitor, registry);
buildReactComponentTree(parentVisitor, registry, strings);
let relativeName = getInternalInstanceName(visitor);
if (ref.reactKey) {
relativeName = ref.reactKey + ': ' + relativeName;
}
ref.reactTree = registry.insert(parentRef.reactTree, relativeName);
ref.reactTree = registry.insert(parentRef.reactTree, strings.intern(relativeName));
} else {
throw 'non react instance parent of react instance';
}
}
function markReactComponentTree(refs, registry) {
function markReactComponentTree(refs, registry, strings) {
// annotate all refs that are react internal instances with their parent and name
// ref.reactParent = visitor that points to parent instance,
// null if we know it's an instance, but don't have a parent yet
@@ -201,7 +201,7 @@ function markReactComponentTree(refs, registry) {
// build tree of react internal instances (since that's what has the structure)
// fill in ref.reactTree = path registry node
forEachRef(refs, (visitor) => {
buildReactComponentTree(visitor, registry);
buildReactComponentTree(visitor, registry, strings);
});
// hook in components by looking at their _reactInternalInstance fields
forEachRef(refs, (visitor) => {
@@ -253,14 +253,14 @@ function markModules(refs) {
});
}
function registerPathToRoot(refs, registry) {
markReactComponentTree(refs, registry);
function registerPathToRoot(refs, registry, strings) {
markReactComponentTree(refs, registry, strings);
markModules(refs);
let breadth = [];
forEachRef(refs, (visitor) => {
const ref = visitor.getRef();
if (ref.type === 'CallbackGlobalObject') {
ref.rootPath = registry.insert(registry.root, ref.type);
ref.rootPath = registry.insert(registry.root, strings.intern(ref.type));
breadth.push(visitor.clone());
}
});
@@ -276,7 +276,7 @@ function registerPathToRoot(refs, registry) {
if (edgeName) {
pathName = edgeName + ': ' + pathName;
}
edgeRef.rootPath = registry.insert(ref.rootPath, pathName);
edgeRef.rootPath = registry.insert(ref.rootPath, strings.intern(pathName));
nextBreadth.push(edgeVisitor.clone());
// copy module and react tree forward
if (edgeRef.module === undefined) {
@@ -330,10 +330,10 @@ function captureRegistry() {
let dataOffset = this.data.length;
this.data = null;
registerPathToRoot(capture.refs, this.stacks);
registerPathToRoot(capture.refs, this.stacks, this.strings);
const internedCaptureId = this.strings.intern(captureId);
const noneString = this.strings.intern('#none');
const noneStack = this.stacks.insert(this.stacks.root, '#none');
const noneStack = this.stacks.insert(this.stacks.root, noneString);
forEachRef(capture.refs, (visitor) => {
const ref = visitor.getRef();
const id = visitor.id;
@@ -382,7 +382,7 @@ function captureRegistry() {
const agStacks = this.stacks.flatten();
const agData = this.data;
const agNumRows = agData.length / numFields;
const ag = new aggrow(agStrings, agStacks, agNumRows);
const ag = new aggrow(agNumRows);
ag.addFieldExpander('Id',
function getId(row) {
@@ -414,11 +414,19 @@ function captureRegistry() {
return agData[rowA * numFields + traceField] - agData[rowB * numFields + traceField];
});
const pathExpander = ag.addCalleeStackExpander('Path',
function getStack(row) { return agStacks.get(agData[row * numFields + pathField]); });
const pathExpander = ag.addCalleeStackExpander(
'Path',
agStacks.maxDepth,
function getStack(row) { return agStacks.get(agData[row * numFields + pathField]); },
function getFrame(id) { return agStrings.get(id); },
);
const reactExpander = ag.addCalleeStackExpander('React Tree',
function getStack(row) { return agStacks.get(agData[row * numFields + reactField]); });
const reactExpander = ag.addCalleeStackExpander(
'React Tree',
agStacks.maxDepth,
function getStack(row) { return agStacks.get(agData[row * numFields + reactField]); },
function getFrame(id) { return agStrings.get(id); },
);
const valueExpander = ag.addFieldExpander('Value',
function getValue(row) { return agStrings.get(agData[row * numFields + valueField]); },
@@ -109,7 +109,7 @@ function symbolicateHeapCaptureFunctions(capture, onFailure, onSuccess) {
if (original.name) {
ref.value.name = original.name;
} else if (!ref.value.name) {
ref.value.name = path.posix.basename(original.source) + ':' + original.line;
ref.value.name = path.posix.basename(original.source || '') + ':' + original.line;
}
ref.value.url = original.source;
ref.value.line = original.line;