Mypal/devtools/client/memory/components/census.js
2019-03-11 13:26:37 +03:00

80 lines
2.3 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
const { DOM: dom, createClass, PropTypes, createFactory } = require("devtools/client/shared/vendor/react");
const Tree = createFactory(require("devtools/client/shared/components/tree"));
const CensusTreeItem = createFactory(require("./census-tree-item"));
const { createParentMap } = require("../utils");
const { TREE_ROW_HEIGHT } = require("../constants");
const { censusModel, diffingModel } = require("../models");
const Census = module.exports = createClass({
displayName: "Census",
propTypes: {
census: censusModel,
onExpand: PropTypes.func.isRequired,
onCollapse: PropTypes.func.isRequired,
onFocus: PropTypes.func.isRequired,
onViewSourceInDebugger: PropTypes.func.isRequired,
onViewIndividuals: PropTypes.func.isRequired,
diffing: diffingModel,
},
render() {
let {
census,
onExpand,
onCollapse,
onFocus,
diffing,
onViewSourceInDebugger,
onViewIndividuals,
} = this.props;
const report = census.report;
let parentMap = census.parentMap;
const { totalBytes, totalCount } = report;
const getPercentBytes = totalBytes === 0
? _ => 0
: bytes => (bytes / totalBytes) * 100;
const getPercentCount = totalCount === 0
? _ => 0
: count => (count / totalCount) * 100;
return Tree({
autoExpandDepth: 0,
focused: census.focused,
getParent: node => {
const parent = parentMap[node.id];
return parent === report ? null : parent;
},
getChildren: node => node.children || [],
isExpanded: node => census.expanded.has(node.id),
onExpand,
onCollapse,
onFocus,
renderItem: (item, depth, focused, arrow, expanded) =>
new CensusTreeItem({
onViewSourceInDebugger,
item,
depth,
focused,
arrow,
expanded,
getPercentBytes,
getPercentCount,
diffing,
inverted: census.display.inverted,
onViewIndividuals,
}),
getRoots: () => report.children || [],
getKey: node => node.id,
itemHeight: TREE_ROW_HEIGHT,
});
}
});