summaryrefslogtreecommitdiffstats
path: root/devtools/client/memory/components/Census.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/memory/components/Census.js')
-rw-r--r--devtools/client/memory/components/Census.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/devtools/client/memory/components/Census.js b/devtools/client/memory/components/Census.js
new file mode 100644
index 0000000000..d33050b019
--- /dev/null
+++ b/devtools/client/memory/components/Census.js
@@ -0,0 +1,94 @@
+/* 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/. */
+
+"use strict";
+
+const {
+ Component,
+ createFactory,
+} = require("resource://devtools/client/shared/vendor/react.js");
+const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.js");
+const Tree = createFactory(
+ require("resource://devtools/client/shared/components/VirtualizedTree.js")
+);
+const CensusTreeItem = createFactory(
+ require("resource://devtools/client/memory/components/CensusTreeItem.js")
+);
+const {
+ TREE_ROW_HEIGHT,
+} = require("resource://devtools/client/memory/constants.js");
+const {
+ censusModel,
+ diffingModel,
+} = require("resource://devtools/client/memory/models.js");
+
+class Census extends Component {
+ static get propTypes() {
+ return {
+ 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() {
+ const {
+ census,
+ onExpand,
+ onCollapse,
+ onFocus,
+ diffing,
+ onViewSourceInDebugger,
+ onViewIndividuals,
+ } = this.props;
+
+ const report = census.report;
+ const 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,
+ preventNavigationOnArrowRight: false,
+ 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,
+ });
+ }
+}
+
+module.exports = Census;