Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test that we recompute census diffs at the appropriate times.
const {
diffingState,
snapshotState,
censusDisplays,
viewState,
} = require("resource://devtools/client/memory/constants.js");
const {
setCensusDisplayAndRefresh,
} = require("resource://devtools/client/memory/actions/census-display.js");
const {
toggleDiffing,
selectSnapshotForDiffingAndRefresh,
} = require("resource://devtools/client/memory/actions/diffing.js");
const {
setFilterStringAndRefresh,
} = require("resource://devtools/client/memory/actions/filter.js");
const {
takeSnapshot,
readSnapshot,
} = require("resource://devtools/client/memory/actions/snapshot.js");
const {
changeView,
} = require("resource://devtools/client/memory/actions/view.js");
add_task(async function () {
const front = new StubbedMemoryFront();
const heapWorker = new HeapAnalysesClient();
await front.attach();
const store = Store();
const { getState, dispatch } = store;
dispatch(changeView(viewState.CENSUS));
await dispatch(
setCensusDisplayAndRefresh(heapWorker, censusDisplays.allocationStack)
);
equal(getState().censusDisplay.inverted, false, "not inverted at start");
equal(getState().diffing, null, "not diffing by default");
const s1 = await dispatch(takeSnapshot(front, heapWorker));
const s2 = await dispatch(takeSnapshot(front, heapWorker));
const s3 = await dispatch(takeSnapshot(front, heapWorker));
dispatch(readSnapshot(heapWorker, s1));
dispatch(readSnapshot(heapWorker, s2));
dispatch(readSnapshot(heapWorker, s3));
await waitUntilSnapshotState(store, [
snapshotState.READ,
snapshotState.READ,
snapshotState.READ,
]);
await dispatch(toggleDiffing());
dispatch(
selectSnapshotForDiffingAndRefresh(heapWorker, getState().snapshots[0])
);
dispatch(
selectSnapshotForDiffingAndRefresh(heapWorker, getState().snapshots[1])
);
await waitUntilState(
store,
state => state.diffing.state === diffingState.TOOK_DIFF
);
const shouldTriggerRecompute = [
{
name: "toggling inversion",
func: () =>
dispatch(
setCensusDisplayAndRefresh(
heapWorker,
censusDisplays.invertedAllocationStack
)
),
},
{
name: "filtering",
func: () => dispatch(setFilterStringAndRefresh("scr", heapWorker)),
},
{
name: "changing displays",
func: () =>
dispatch(
setCensusDisplayAndRefresh(heapWorker, censusDisplays.coarseType)
),
},
];
for (const { name, func } of shouldTriggerRecompute) {
dumpn(`Testing that "${name}" triggers a diff recompute`);
func();
await waitUntilState(
store,
state => state.diffing.state === diffingState.TAKING_DIFF
);
ok(true, "triggered diff recompute.");
await waitUntilState(
store,
state => state.diffing.state === diffingState.TOOK_DIFF
);
ok(true, "And then the diff should complete.");
ok(getState().diffing.census, "And we should have a census.");
ok(
getState().diffing.census.report,
"And that census should have a report."
);
equal(
getState().diffing.census.display,
getState().censusDisplay,
"And that census should have the correct display"
);
equal(
getState().diffing.census.filter,
getState().filter,
"And that census should have the correct filter"
);
equal(
getState().diffing.census.display.inverted,
getState().censusDisplay.inverted,
"And that census should have the correct inversion"
);
}
heapWorker.destroy();
await front.detach();
});