Skip to content

Commit 836a613

Browse files
committed
Use const enum for SelectedState.
1 parent 2eba5df commit 836a613

6 files changed

Lines changed: 74 additions & 72 deletions

File tree

src/components/shared/thread/ActivityGraphFills.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import type {
1010
IndexIntoSamplesTable,
1111
IndexIntoCategoryList,
1212
Thread,
13-
SelectedState,
1413
Milliseconds,
1514
DevicePixels,
1615
CssPixels,
1716
} from 'firefox-profiler/types';
17+
import { SelectedState } from 'firefox-profiler/types';
1818
import type { HoveredPixelState } from './ActivityGraph';
1919

2020
/**
@@ -357,13 +357,13 @@ export class ActivityGraphFillComputer {
357357
return percentageBuffers.selectedPercentageAtPixel;
358358
}
359359
switch (samplesSelectedStates[sampleIndex]) {
360-
case 'FILTERED_OUT_BY_TRANSFORM':
360+
case SelectedState.FilteredOutByTransform:
361361
return percentageBuffers.filteredOutByTransformPercentageAtPixel;
362-
case 'UNSELECTED_ORDERED_BEFORE_SELECTED':
362+
case SelectedState.UnselectedOrderedBeforeSelected:
363363
return percentageBuffers.beforeSelectedPercentageAtPixel;
364-
case 'SELECTED':
364+
case SelectedState.Selected:
365365
return percentageBuffers.selectedPercentageAtPixel;
366-
case 'UNSELECTED_ORDERED_AFTER_SELECTED':
366+
case SelectedState.UnselectedOrderedAfterSelected:
367367
return percentageBuffers.afterSelectedPercentageAtPixel;
368368
default:
369369
throw new Error('Unexpected samplesSelectedStates value');
@@ -768,10 +768,10 @@ function _createSelectedPercentageAtPixelBuffers({
768768
* For each category, create a fill style for each of 4 draw states. These fill styles
769769
* are sorted by their gravity.
770770
*
771-
* 'UNSELECTED_ORDERED_BEFORE_SELECTED',
772-
* 'SELECTED',
773-
* 'UNSELECTED_ORDERED_AFTER_SELECTED',
774-
* 'FILTERED_OUT_BY_TRANSFORM'
771+
* SelectedState.UnselectedOrderedBeforeSelected,
772+
* SelectedState.Selected,
773+
* SelectedState.UnselectedOrderedAfterSelected,
774+
* SelectedState.FilteredOutByTransform
775775
*/
776776
function _getCategoryFills(
777777
categoryDrawStyles: CategoryDrawStyles,

src/components/shared/thread/HeightGraph.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import type {
1515
CategoryList,
1616
IndexIntoSamplesTable,
1717
Milliseconds,
18-
SelectedState,
1918
} from 'firefox-profiler/types';
19+
import { SelectedState } from 'firefox-profiler/types';
2020

2121
type Props = {
2222
readonly heightFunc: (param: IndexIntoSamplesTable) => number | null;
@@ -138,7 +138,7 @@ export class ThreadHeightGraph extends PureComponent<Props> {
138138
let samplesBucket;
139139
if (
140140
samplesSelectedStates !== null &&
141-
samplesSelectedStates[i] === 'SELECTED'
141+
samplesSelectedStates[i] === SelectedState.Selected
142142
) {
143143
samplesBucket = highlightedSamples;
144144
} else {

src/components/shared/thread/SampleGraph.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import type {
2424
CategoryList,
2525
IndexIntoSamplesTable,
2626
Milliseconds,
27-
SelectedState,
2827
CssPixels,
2928
TimelineType,
3029
ImplementationFilter,
3130
} from 'firefox-profiler/types';
31+
import { SelectedState } from 'firefox-profiler/types';
3232
import type { SizeProps } from 'firefox-profiler/components/shared/WithSize';
3333
import type { CpuRatioInTimeRange } from './ActivityGraphFills';
3434
import { lightDark } from 'firefox-profiler/utils/dark-mode';
@@ -197,7 +197,7 @@ class ThreadSampleGraphCanvas extends React.PureComponent<CanvasProps> {
197197
let samplesBucket;
198198
if (
199199
samplesSelectedStates !== null &&
200-
samplesSelectedStates[i] === 'SELECTED'
200+
samplesSelectedStates[i] === SelectedState.Selected
201201
) {
202202
samplesBucket = highlightedSamples;
203203
} else {

src/profile-logic/profile-data.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ import type {
8181
IndexIntoCallNodeTable,
8282
AccumulatedCounterSamples,
8383
SamplesLikeTable,
84-
SelectedState,
8584
ProfileFilterPageData,
8685
Milliseconds,
8786
StartEndRange,
@@ -102,6 +101,7 @@ import type {
102101
IndexIntoSourceTable,
103102
TransformOutput,
104103
} from 'firefox-profiler/types';
104+
import { SelectedState } from 'firefox-profiler/types';
105105
import type { CallNodeInfo, SuffixOrderIndex } from './call-node-info';
106106

107107
/**
@@ -919,12 +919,12 @@ function _getSamplesSelectedStatesForNoSelection(
919919
// because everything is unselected. So let's pretend that
920920
// everything is selected so that anything not filtered out will be nicely
921921
// visible.
922-
let sampleSelectedState = 'SELECTED';
922+
let sampleSelectedState = SelectedState.Selected;
923923

924924
// But we still want to display filtered-out samples differently.
925925
const callNodeIndex = sampleCallNodes[sampleIndex];
926926
if (callNodeIndex === null) {
927-
sampleSelectedState = 'FILTERED_OUT_BY_TRANSFORM';
927+
sampleSelectedState = SelectedState.FilteredOutByTransform;
928928
}
929929

930930
result[sampleIndex] = sampleSelectedState;
@@ -990,19 +990,19 @@ function _getSamplesSelectedStatesNonInverted(
990990
const sampleCount = sampleCallNodes.length;
991991
const samplesSelectedStates = new Array(sampleCount);
992992
for (let sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
993-
let sampleSelectedState: SelectedState = 'SELECTED';
993+
let sampleSelectedState: SelectedState = SelectedState.Selected;
994994
const callNodeIndex = sampleCallNodes[sampleIndex];
995995
if (callNodeIndex !== null) {
996996
if (callNodeIndex < selectedCallNodeIndex) {
997-
sampleSelectedState = 'UNSELECTED_ORDERED_BEFORE_SELECTED';
997+
sampleSelectedState = SelectedState.UnselectedOrderedBeforeSelected;
998998
} else if (callNodeIndex < selectedCallNodeDescendantsEndIndex) {
999-
sampleSelectedState = 'SELECTED';
999+
sampleSelectedState = SelectedState.Selected;
10001000
} else {
1001-
sampleSelectedState = 'UNSELECTED_ORDERED_AFTER_SELECTED';
1001+
sampleSelectedState = SelectedState.UnselectedOrderedAfterSelected;
10021002
}
10031003
} else {
10041004
// This sample was filtered out.
1005-
sampleSelectedState = 'FILTERED_OUT_BY_TRANSFORM';
1005+
sampleSelectedState = SelectedState.FilteredOutByTransform;
10061006
}
10071007
samplesSelectedStates[sampleIndex] = sampleSelectedState;
10081008
}
@@ -1027,18 +1027,18 @@ function _getSamplesSelectedStatesInverted(
10271027
const sampleCount = sampleNonInvertedCallNodes.length;
10281028
const samplesSelectedStates = new Array(sampleCount);
10291029
for (let sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
1030-
let sampleSelectedState: SelectedState = 'SELECTED';
1030+
let sampleSelectedState: SelectedState = SelectedState.Selected;
10311031
const callNodeIndex = sampleNonInvertedCallNodes[sampleIndex];
10321032
if (callNodeIndex !== null) {
10331033
const suffixOrderIndex = suffixOrderIndexes[callNodeIndex];
10341034
if (suffixOrderIndex < selectedSubtreeRangeStart) {
1035-
sampleSelectedState = 'UNSELECTED_ORDERED_BEFORE_SELECTED';
1035+
sampleSelectedState = SelectedState.UnselectedOrderedBeforeSelected;
10361036
} else if (suffixOrderIndex >= selectedSubtreeRangeEnd) {
1037-
sampleSelectedState = 'UNSELECTED_ORDERED_AFTER_SELECTED';
1037+
sampleSelectedState = SelectedState.UnselectedOrderedAfterSelected;
10381038
}
10391039
} else {
10401040
// This sample was filtered out.
1041-
sampleSelectedState = 'FILTERED_OUT_BY_TRANSFORM';
1041+
sampleSelectedState = SelectedState.FilteredOutByTransform;
10421042
}
10431043
samplesSelectedStates[sampleIndex] = sampleSelectedState;
10441044
}

src/test/unit/profile-data.test.ts

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import type {
6464
IndexIntoCategoryList,
6565
IndexIntoNativeSymbolTable,
6666
} from 'firefox-profiler/types';
67+
import { SelectedState } from 'firefox-profiler/types';
6768

6869
describe('string-table', function () {
6970
const u = StringTable.withBackingArray(['foo', 'bar', 'baz']);
@@ -1051,38 +1052,38 @@ describe('getSamplesSelectedStates', function () {
10511052
expect(
10521053
getSamplesSelectedStates(callNodeInfo, sampleCallNodes, A_B)
10531054
).toEqual([
1054-
'SELECTED',
1055-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1056-
'SELECTED',
1057-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1058-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1055+
SelectedState.Selected,
1056+
SelectedState.UnselectedOrderedAfterSelected,
1057+
SelectedState.Selected,
1058+
SelectedState.UnselectedOrderedAfterSelected,
1059+
SelectedState.UnselectedOrderedAfterSelected,
10591060
]);
10601061
expect(
10611062
getSamplesSelectedStates(callNodeInfo, sampleCallNodes, A_D)
10621063
).toEqual([
1063-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1064-
'SELECTED',
1065-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1066-
'SELECTED',
1067-
'SELECTED',
1064+
SelectedState.UnselectedOrderedBeforeSelected,
1065+
SelectedState.Selected,
1066+
SelectedState.UnselectedOrderedBeforeSelected,
1067+
SelectedState.Selected,
1068+
SelectedState.Selected,
10681069
]);
10691070
expect(
10701071
getSamplesSelectedStates(callNodeInfo, sampleCallNodes, A_B_F)
10711072
).toEqual([
1072-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1073-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1074-
'SELECTED',
1075-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1076-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1073+
SelectedState.UnselectedOrderedBeforeSelected,
1074+
SelectedState.UnselectedOrderedAfterSelected,
1075+
SelectedState.Selected,
1076+
SelectedState.UnselectedOrderedAfterSelected,
1077+
SelectedState.UnselectedOrderedAfterSelected,
10771078
]);
10781079
expect(
10791080
getSamplesSelectedStates(callNodeInfo, sampleCallNodes, A_D_E)
10801081
).toEqual([
1081-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1082-
'SELECTED',
1083-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1084-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1085-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1082+
SelectedState.UnselectedOrderedBeforeSelected,
1083+
SelectedState.Selected,
1084+
SelectedState.UnselectedOrderedBeforeSelected,
1085+
SelectedState.UnselectedOrderedAfterSelected,
1086+
SelectedState.UnselectedOrderedBeforeSelected,
10861087
]);
10871088
});
10881089

@@ -1147,39 +1148,39 @@ describe('getSamplesSelectedStates', function () {
11471148
expect(
11481149
getSamplesSelectedStates(callNodeInfoInverted, sampleCallNodes, inBA)
11491150
).toEqual([
1150-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1151-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1152-
'SELECTED',
1153-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1154-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1155-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1156-
'SELECTED',
1151+
SelectedState.UnselectedOrderedBeforeSelected,
1152+
SelectedState.UnselectedOrderedBeforeSelected,
1153+
SelectedState.Selected,
1154+
SelectedState.UnselectedOrderedBeforeSelected,
1155+
SelectedState.UnselectedOrderedAfterSelected,
1156+
SelectedState.UnselectedOrderedAfterSelected,
1157+
SelectedState.Selected,
11571158
]);
11581159
// Test C <- B <- A <- ...
11591160
// Only sample 5 has a stack ending in ... -> A -> B -> C
11601161
expect(
11611162
getSamplesSelectedStates(callNodeInfoInverted, sampleCallNodes, inCBA)
11621163
).toEqual([
1163-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1164-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1165-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1166-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1167-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1168-
'SELECTED',
1169-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1164+
SelectedState.UnselectedOrderedBeforeSelected,
1165+
SelectedState.UnselectedOrderedBeforeSelected,
1166+
SelectedState.UnselectedOrderedBeforeSelected,
1167+
SelectedState.UnselectedOrderedBeforeSelected,
1168+
SelectedState.UnselectedOrderedBeforeSelected,
1169+
SelectedState.Selected,
1170+
SelectedState.UnselectedOrderedBeforeSelected,
11701171
]);
11711172
// Test B <- ...
11721173
// Only samples 2 and 6 have stacks ending in ... -> B
11731174
expect(
11741175
getSamplesSelectedStates(callNodeInfoInverted, sampleCallNodes, inB)
11751176
).toEqual([
1176-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1177-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1178-
'SELECTED',
1179-
'UNSELECTED_ORDERED_BEFORE_SELECTED',
1180-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1181-
'UNSELECTED_ORDERED_AFTER_SELECTED',
1182-
'SELECTED',
1177+
SelectedState.UnselectedOrderedBeforeSelected,
1178+
SelectedState.UnselectedOrderedBeforeSelected,
1179+
SelectedState.Selected,
1180+
SelectedState.UnselectedOrderedBeforeSelected,
1181+
SelectedState.UnselectedOrderedAfterSelected,
1182+
SelectedState.UnselectedOrderedAfterSelected,
1183+
SelectedState.Selected,
11831184
]);
11841185
});
11851186

src/types/profile-derived.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -668,22 +668,23 @@ export type RemoveProfileInformation = {
668668
};
669669

670670
/**
671-
* This type is used to decide how to highlight and stripe areas in the
671+
* This const enum is used to decide how to highlight and stripe areas in the
672672
* timeline.
673673
*/
674-
export type SelectedState =
674+
export const enum SelectedState {
675675
// Samples can be filtered through various operations, like searching, or
676676
// call tree transforms.
677-
| 'FILTERED_OUT_BY_TRANSFORM'
677+
FilteredOutByTransform,
678678
// This sample is selected because either the tip or an ancestor call node matches
679679
// the currently selected call node.
680-
| 'SELECTED'
680+
Selected,
681681
// This call node is not selected, and the stacks are ordered before the selected
682682
// call node as sorted by the getTreeOrderComparator.
683-
| 'UNSELECTED_ORDERED_BEFORE_SELECTED'
683+
UnselectedOrderedBeforeSelected,
684684
// This call node is not selected, and the stacks are ordered after the selected
685685
// call node as sorted by the getTreeOrderComparator.
686-
| 'UNSELECTED_ORDERED_AFTER_SELECTED';
686+
UnselectedOrderedAfterSelected,
687+
}
687688

688689
/**
689690
* It holds the initially selected track's HTMLElement. This allows the timeline

0 commit comments

Comments
 (0)