@parca/profile 0.19.112 → 0.19.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/GraphTooltipArrow/Content.d.ts +2 -2
- package/dist/GraphTooltipArrow/Content.d.ts.map +1 -1
- package/dist/GraphTooltipArrow/DockedGraphTooltip/index.d.ts +2 -2
- package/dist/GraphTooltipArrow/DockedGraphTooltip/index.d.ts.map +1 -1
- package/dist/GraphTooltipArrow/useGraphTooltip/index.d.ts +2 -2
- package/dist/GraphTooltipArrow/useGraphTooltip/index.d.ts.map +1 -1
- package/dist/GraphTooltipArrow/useGraphTooltipMetaInfo/index.d.ts +2 -2
- package/dist/GraphTooltipArrow/useGraphTooltipMetaInfo/index.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenu.d.ts +2 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenu.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.d.ts +2 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.d.ts +2 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/TooltipContext.d.ts +3 -3
- package/dist/ProfileFlameGraph/FlameGraphArrow/TooltipContext.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/index.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/index.js +3 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/useMappingList.d.ts +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/useMappingList.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/useMappingList.js +16 -16
- package/dist/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.d.ts +2 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/utils.d.ts +5 -5
- package/dist/ProfileFlameGraph/FlameGraphArrow/utils.d.ts.map +1 -1
- package/dist/ProfileView/hooks/useProfileMetadata.d.ts +2 -2
- package/dist/ProfileView/hooks/useProfileMetadata.d.ts.map +1 -1
- package/dist/ProfileView/hooks/useProfileMetadata.js +6 -2
- package/dist/Sandwich/components/CallersSection.d.ts.map +1 -1
- package/dist/Sandwich/components/CallersSection.js +5 -2
- package/dist/Sandwich/utils/processRowData.d.ts +1 -1
- package/dist/Sandwich/utils/processRowData.d.ts.map +1 -1
- package/dist/SourceView/index.js +3 -3
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +3 -2
- package/dist/Table/utils/functions.d.ts +3 -3
- package/dist/Table/utils/functions.d.ts.map +1 -1
- package/dist/Table/utils/functions.js +3 -3
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -0
- package/package.json +3 -3
- package/src/GraphTooltipArrow/Content.tsx +3 -3
- package/src/GraphTooltipArrow/DockedGraphTooltip/index.tsx +2 -2
- package/src/GraphTooltipArrow/useGraphTooltip/index.ts +2 -2
- package/src/GraphTooltipArrow/useGraphTooltipMetaInfo/index.ts +2 -2
- package/src/ProfileFlameGraph/FlameGraphArrow/ContextMenu.tsx +2 -2
- package/src/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.tsx +2 -2
- package/src/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.tsx +2 -2
- package/src/ProfileFlameGraph/FlameGraphArrow/TooltipContext.tsx +3 -3
- package/src/ProfileFlameGraph/FlameGraphArrow/index.tsx +4 -3
- package/src/ProfileFlameGraph/FlameGraphArrow/useMappingList.ts +19 -19
- package/src/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.ts +4 -6
- package/src/ProfileFlameGraph/FlameGraphArrow/utils.ts +6 -10
- package/src/ProfileView/hooks/useProfileMetadata.ts +8 -4
- package/src/Sandwich/components/CallersSection.tsx +6 -3
- package/src/Sandwich/utils/processRowData.ts +1 -1
- package/src/SourceView/index.tsx +3 -3
- package/src/Table/index.tsx +3 -3
- package/src/Table/utils/functions.ts +9 -9
- package/src/utils.ts +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.19.113](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.112...@parca/profile@0.19.113) (2026-01-29)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @parca/profile
|
|
9
|
+
|
|
6
10
|
## [0.19.112](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.111...@parca/profile@0.19.112) (2026-01-15)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @parca/profile
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Table } from '
|
|
2
|
+
import { Table } from '@uwdata/flechette';
|
|
3
3
|
import { ProfileType } from '@parca/parser';
|
|
4
4
|
interface GraphTooltipArrowContentProps {
|
|
5
|
-
table: Table
|
|
5
|
+
table: Table;
|
|
6
6
|
profileType?: ProfileType;
|
|
7
7
|
unit?: string;
|
|
8
8
|
total: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/GraphTooltipArrow/Content.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/GraphTooltipArrow/Content.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAGxC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,UAAU,6BAA6B;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD,QAAA,MAAM,wBAAwB,GAAI,sFAS/B,6BAA6B,KAAG,KAAK,CAAC,GAAG,CAAC,OA+E5C,CAAC;AAqFF,eAAe,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/DockedGraphTooltip/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/DockedGraphTooltip/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAKxC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAO1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AAuBD,eAAO,MAAM,kBAAkB,GAAI,6EAQhC,KAAK,KAAG,GAAG,CAAC,OAuGd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltip/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltip/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAW1C,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,eAAe,GAAI,6EAQ7B,KAAK,KAAG,gBAAgB,GAAG,IA4C7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltipMetaInfo/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GraphTooltipArrow/useGraphTooltipMetaInfo/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAqBxC,UAAU,KAAK;IACb,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,wBAAwB;IAChC,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,uBAAuB,GAAI,gBAAc,KAAK,KAAG,wBA8F7D,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Table } from '
|
|
1
|
+
import { Table } from '@uwdata/flechette';
|
|
2
2
|
import { ProfileType } from '@parca/parser';
|
|
3
3
|
interface ContextMenuProps {
|
|
4
4
|
menuId: string;
|
|
5
|
-
table: Table
|
|
5
|
+
table: Table;
|
|
6
6
|
profileType?: ProfileType;
|
|
7
7
|
unit?: string;
|
|
8
8
|
total: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/ContextMenu.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/ContextMenu.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAOxC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAQ1C,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,WAAW,GAAI,kIAalB,gBAAgB,KAAG,GAAG,CAAC,OAyOzB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Table } from '
|
|
1
|
+
import { Table } from '@uwdata/flechette';
|
|
2
2
|
import { ProfileType } from '@parca/parser';
|
|
3
3
|
interface ContextMenuWrapperProps {
|
|
4
4
|
menuId: string;
|
|
5
|
-
table: Table
|
|
5
|
+
table: Table;
|
|
6
6
|
total: bigint;
|
|
7
7
|
totalUnfiltered: bigint;
|
|
8
8
|
profileType?: ProfileType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenuWrapper.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"ContextMenuWrapper.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAI1C,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACtD;AAED,QAAA,MAAM,kBAAkB,2HAwBvB,CAAC;AAIF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Table } from '
|
|
2
|
+
import { Table } from '@uwdata/flechette';
|
|
3
3
|
import 'react-contexify/dist/ReactContexify.css';
|
|
4
4
|
import { ProfileSource } from '../../ProfileSource';
|
|
5
5
|
export declare const RowHeight = 26;
|
|
@@ -9,7 +9,7 @@ export interface colorByColors {
|
|
|
9
9
|
export interface FlameNodeProps {
|
|
10
10
|
height: number;
|
|
11
11
|
totalWidth: number;
|
|
12
|
-
table: Table
|
|
12
|
+
table: Table;
|
|
13
13
|
row: number;
|
|
14
14
|
colors: colorByColors;
|
|
15
15
|
colorBy: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlameGraphNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"FlameGraphNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAKxC,OAAO,yCAAyC,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAelD,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AACF,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAC;AAEF,eAAO,MAAM,SAAS,4CA6PrB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Table } from '
|
|
2
|
+
import { Table } from '@uwdata/flechette';
|
|
3
3
|
import { ProfileType } from '@parca/parser';
|
|
4
4
|
interface TooltipState {
|
|
5
5
|
row: number | null;
|
|
@@ -7,7 +7,7 @@ interface TooltipState {
|
|
|
7
7
|
y: number;
|
|
8
8
|
}
|
|
9
9
|
interface TooltipContextValue {
|
|
10
|
-
table: Table
|
|
10
|
+
table: Table;
|
|
11
11
|
total: bigint;
|
|
12
12
|
totalUnfiltered: bigint;
|
|
13
13
|
profileType?: ProfileType;
|
|
@@ -20,7 +20,7 @@ interface TooltipContextValue {
|
|
|
20
20
|
export declare const useTooltipContext: () => TooltipContextValue;
|
|
21
21
|
interface TooltipProviderProps {
|
|
22
22
|
children: React.ReactNode;
|
|
23
|
-
table: Table
|
|
23
|
+
table: Table;
|
|
24
24
|
total: bigint;
|
|
25
25
|
totalUnfiltered: bigint;
|
|
26
26
|
profileType?: ProfileType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipContext.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/TooltipContext.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"TooltipContext.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/TooltipContext.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,iBAAiB,QAAO,mBAMpC,CAAC;AAEF,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAqC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAQN,MAAM,OAAO,CAAC;AAKf,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAQN,MAAM,OAAO,CAAC;AAKf,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAKlD,OAAO,EAAuB,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAMtE,OAAO,EACL,gBAAgB,EAMjB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAC7D,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAC9D,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EAAE,EACtB,YAAY,OAAO,EACnB,qBAAqB,WAAW,KAC/B,aAQF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,eAAe,MAAM,EAAE,EACvB,YAAY,OAAO,EACnB,qBAAqB,WAAW,KAC/B,aAQF,CAAC;AAIF,eAAO,MAAM,eAAe,kDAkR1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -12,13 +12,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import { memo, useCallback, useDeferredValue, useEffect, useMemo, useRef, useState, } from 'react';
|
|
15
|
-
import { tableFromIPC } from '
|
|
15
|
+
import { tableFromIPC } from '@uwdata/flechette';
|
|
16
16
|
import { useContextMenu } from 'react-contexify';
|
|
17
17
|
import { FlameGraphSkeleton, SandwichFlameGraphSkeleton, useParcaContext } from '@parca/components';
|
|
18
18
|
import { USER_PREFERENCES, useCurrentColorProfile, useUserPreference } from '@parca/hooks';
|
|
19
19
|
import { getColorForFeature, selectDarkMode, useAppSelector } from '@parca/store';
|
|
20
20
|
import { useProfileFilters } from '../../ProfileView/components/ProfileFilters/useProfileFilters';
|
|
21
21
|
import { useProfileViewContext } from '../../ProfileView/context/ProfileViewContext';
|
|
22
|
+
import { alignedUint8Array } from '../../utils';
|
|
22
23
|
import ContextMenuWrapper from './ContextMenuWrapper';
|
|
23
24
|
import { FlameNode, RowHeight } from './FlameGraphNodes';
|
|
24
25
|
import { MemoizedTooltip } from './MemoizedTooltip';
|
|
@@ -72,7 +73,7 @@ export const FlameGraphArrow = memo(function FlameGraphArrow({ arrow, total, fil
|
|
|
72
73
|
const isDarkMode = useAppSelector(selectDarkMode);
|
|
73
74
|
const { perf } = useParcaContext();
|
|
74
75
|
const table = useMemo(() => {
|
|
75
|
-
const result = tableFromIPC(arrow.record);
|
|
76
|
+
const result = tableFromIPC(alignedUint8Array(arrow.record), { useBigInt: true });
|
|
76
77
|
if (perf?.setMeasurement != null) {
|
|
77
78
|
perf.setMeasurement('flamegraph.node_count', result.numRows);
|
|
78
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMappingList.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/useMappingList.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"useMappingList.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/useMappingList.ts"],"names":[],"mappings":"AAeA,OAAO,EAAS,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAOhD,QAAA,MAAM,cAAc,GAAI,UAAU,MAAM,EAAE,GAAG,SAAS,KAAG,MAAM,EAsB9D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,GAAG,IAAI,KAAG,MAAM,EAyB5D,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -36,23 +36,23 @@ export const useFilenamesList = (table) => {
|
|
|
36
36
|
if (table === null) {
|
|
37
37
|
return [];
|
|
38
38
|
}
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
39
|
+
const filenamesColumn = table.getChild(FIELD_FUNCTION_FILE_NAME);
|
|
40
|
+
if (filenamesColumn === null) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
// Access dictionary directly instead of iterating all rows
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
+
const dictionary = filenamesColumn.data[0]?.dictionary;
|
|
46
|
+
if (dictionary == null) {
|
|
47
|
+
return [''];
|
|
48
|
+
}
|
|
49
|
+
const filenames = Array.from(dictionary.toArray())
|
|
50
|
+
.map(value => {
|
|
51
|
+
const fn = arrowToString(value);
|
|
52
|
+
return fn != null ? getLastItem(fn) ?? '' : '';
|
|
52
53
|
})
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
filenames.sort((a, b) => a.localeCompare(b));
|
|
54
|
+
.concat('') // Add empty string for "Everything else"
|
|
55
|
+
.sort((a, b) => a.localeCompare(b));
|
|
56
56
|
return filenames;
|
|
57
57
|
};
|
|
58
58
|
export default useMappingList;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Table } from '
|
|
1
|
+
import { Table } from '@uwdata/flechette';
|
|
2
2
|
import { ViewportState } from './useScrollViewport';
|
|
3
3
|
export interface UseVisibleNodesParams {
|
|
4
|
-
table: Table
|
|
4
|
+
table: Table;
|
|
5
5
|
viewport: ViewportState;
|
|
6
6
|
total: bigint;
|
|
7
7
|
width: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVisibleNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"useVisibleNodes.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAIxC,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AA+BlD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAI,iEAO7B,qBAAqB,KAAG,MAAM,EA4HhC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Column, Table } from '@uwdata/flechette';
|
|
2
2
|
import { type BinaryFeature, type FilenameFeature } from '@parca/store';
|
|
3
3
|
import { ProfileSource } from '../../ProfileSource';
|
|
4
4
|
import { BigIntDuo } from '../../utils';
|
|
5
|
-
export declare function nodeLabel(table: Table
|
|
5
|
+
export declare function nodeLabel(table: Table, row: number, showBinaryName: boolean): string;
|
|
6
6
|
export declare const extractFeature: (mapping: string) => BinaryFeature;
|
|
7
7
|
export declare const extractFilenameFeature: (filename: string) => FilenameFeature;
|
|
8
8
|
export declare const getTextForCumulative: (hoveringNodeCumulative: bigint, totalUnfiltered: bigint, total: bigint, unit: string) => string;
|
|
@@ -18,7 +18,7 @@ export interface CurrentPathFrame {
|
|
|
18
18
|
inlined: boolean;
|
|
19
19
|
labels?: string;
|
|
20
20
|
}
|
|
21
|
-
export declare const getCurrentPathFrameData: (table: Table
|
|
22
|
-
export declare function isCurrentPathFrameMatch(table: Table
|
|
23
|
-
export declare function getMaxDepth(depthColumn:
|
|
21
|
+
export declare const getCurrentPathFrameData: (table: Table, row: number) => CurrentPathFrame;
|
|
22
|
+
export declare function isCurrentPathFrameMatch(table: Table, row: number, b: CurrentPathFrame): boolean;
|
|
23
|
+
export declare function getMaxDepth(depthColumn: Column<number> | null): number;
|
|
24
24
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAsB,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAC,SAAS,EAAgB,MAAM,aAAa,CAAC;AAWrD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,MAAM,CAuBpF;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,aAMhD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,eAMzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,wBAAwB,MAAM,EAC9B,iBAAiB,MAAM,EACvB,OAAO,MAAM,EACb,MAAM,MAAM,KACX,MAOF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,wBAAwB,MAAM,EAC9B,MAAM,MAAM,KACX,MAMF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,KAAG,MAAM,GAAG,IAQpD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,gBAAgB,aAAa,KAAG,SAyBvE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,KAAK,EAAE,KAAK,MAAM,KAAG,gBAwBnE,CAAC;AAgBF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAW/F;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAStE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Table
|
|
1
|
+
import { Table } from '@uwdata/flechette';
|
|
2
2
|
import { FlamegraphArrow } from '@parca/client';
|
|
3
3
|
interface UseProfileMetadataProps {
|
|
4
4
|
flamegraphArrow?: FlamegraphArrow;
|
|
@@ -7,7 +7,7 @@ interface UseProfileMetadataProps {
|
|
|
7
7
|
colorBy: string;
|
|
8
8
|
}
|
|
9
9
|
export declare const useProfileMetadata: ({ flamegraphArrow, metadataMappingFiles, metadataLoading, colorBy, }: UseProfileMetadataProps) => {
|
|
10
|
-
table:
|
|
10
|
+
table: Table | null;
|
|
11
11
|
mappingsList: string[];
|
|
12
12
|
filenamesList: string[];
|
|
13
13
|
colorMappings: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProfileMetadata.d.ts","sourceRoot":"","sources":["../../../src/ProfileView/hooks/useProfileMetadata.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"useProfileMetadata.d.ts","sourceRoot":"","sources":["../../../src/ProfileView/hooks/useProfileMetadata.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,KAAK,EAAe,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAO9C,UAAU,uBAAuB;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,GAAI,sEAKhC,uBAAuB,KAAG;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAqB1B,CAAC"}
|
|
@@ -11,11 +11,15 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
import { useMemo } from 'react';
|
|
14
|
-
import { tableFromIPC } from '
|
|
14
|
+
import { tableFromIPC } from '@uwdata/flechette';
|
|
15
15
|
import useMappingList, { useFilenamesList, } from '../../ProfileFlameGraph/FlameGraphArrow/useMappingList';
|
|
16
|
+
import { alignedUint8Array } from '../../utils';
|
|
16
17
|
export const useProfileMetadata = ({ flamegraphArrow, metadataMappingFiles, metadataLoading, colorBy, }) => {
|
|
17
18
|
const table = useMemo(() => {
|
|
18
|
-
|
|
19
|
+
if (flamegraphArrow === undefined) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return tableFromIPC(alignedUint8Array(flamegraphArrow.record), { useBigInt: true });
|
|
19
23
|
}, [flamegraphArrow]);
|
|
20
24
|
const mappingsList = useMappingList(metadataMappingFiles);
|
|
21
25
|
const filenamesList = useFilenamesList(table);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallersSection.d.ts","sourceRoot":"","sources":["../../../src/Sandwich/components/CallersSection.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgB,MAAM,OAAO,CAAC;AASrC,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"CallersSection.d.ts","sourceRoot":"","sources":["../../../src/Sandwich/components/CallersSection.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgB,MAAM,OAAO,CAAC;AASrC,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,cAAc,EAAC,MAAM,uCAAuC,CAAC;AAgBrE,UAAU,mBAAmB;IAC3B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,qBAAqB,EAAE,cAAc,CAAC;IACtC,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,eAAe,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAuEnC"}
|
|
@@ -12,11 +12,12 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import { useMemo } from 'react';
|
|
15
|
-
import { tableFromIPC } from '
|
|
15
|
+
import { tableFromIPC } from '@uwdata/flechette';
|
|
16
16
|
import { Tooltip } from 'react-tooltip';
|
|
17
17
|
import { Button } from '@parca/components';
|
|
18
18
|
import { TEST_IDS, testId } from '@parca/test-utils';
|
|
19
19
|
import ProfileFlameGraph from '../../ProfileFlameGraph';
|
|
20
|
+
import { alignedUint8Array } from '../../utils';
|
|
20
21
|
const FIELD_DEPTH = 'depth';
|
|
21
22
|
function getMaxDepth(depthColumn) {
|
|
22
23
|
if (depthColumn === null)
|
|
@@ -32,7 +33,9 @@ function getMaxDepth(depthColumn) {
|
|
|
32
33
|
export function CallersSection({ callersRef, callersFlamegraphData, profileSource, curPathArrow, setCurPathArrow, isExpanded, setIsExpanded, defaultMaxFrames, }) {
|
|
33
34
|
const maxDepth = useMemo(() => {
|
|
34
35
|
if (callersFlamegraphData?.arrow != null) {
|
|
35
|
-
const table = tableFromIPC(callersFlamegraphData.arrow.record)
|
|
36
|
+
const table = tableFromIPC(alignedUint8Array(callersFlamegraphData.arrow.record), {
|
|
37
|
+
useBigInt: true,
|
|
38
|
+
});
|
|
36
39
|
const depthColumn = table.getChild(FIELD_DEPTH);
|
|
37
40
|
return getMaxDepth(depthColumn);
|
|
38
41
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Table } from '
|
|
1
|
+
import { type Table } from '@uwdata/flechette';
|
|
2
2
|
import { type colorByColors } from '../../ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes';
|
|
3
3
|
import { type DataRow } from '../../Table/utils/functions';
|
|
4
4
|
interface ProcessRowDataProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processRowData.d.ts","sourceRoot":"","sources":["../../../src/Sandwich/utils/processRowData.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"processRowData.d.ts","sourceRoot":"","sources":["../../../src/Sandwich/utils/processRowData.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,yDAAyD,CAAC;AAY3F,OAAO,EAAuB,KAAK,OAAO,EAAC,MAAM,6BAA6B,CAAC;AAE/E,UAAU,mBAAmB;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAC,EAAE,mBAAmB,GAAG,OAAO,EAAE,CA0C9F"}
|
package/dist/SourceView/index.js
CHANGED
|
@@ -12,12 +12,12 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
15
|
-
import { tableFromIPC } from '
|
|
15
|
+
import { tableFromIPC } from '@uwdata/flechette';
|
|
16
16
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
17
17
|
import { Item, Menu, useContextMenu } from 'react-contexify';
|
|
18
18
|
import { SourceSkeleton, useParcaContext, useURLState } from '@parca/components';
|
|
19
19
|
import { ExpandOnHover } from '../GraphTooltipArrow/ExpandOnHoverValue';
|
|
20
|
-
import { truncateStringReverse } from '../utils';
|
|
20
|
+
import { alignedUint8Array, truncateStringReverse } from '../utils';
|
|
21
21
|
import { Highlighter, profileAwareRenderer } from './Highlighter';
|
|
22
22
|
import useLineRange from './useSelectedLineRange';
|
|
23
23
|
const MENU_ID = 'source-view-context-menu';
|
|
@@ -39,7 +39,7 @@ export const SourceView = React.memo(function SourceView({ data, loading, total,
|
|
|
39
39
|
if (data === undefined) {
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
42
|
-
const table = tableFromIPC(data.record);
|
|
42
|
+
const table = tableFromIPC(alignedUint8Array(data.record), { useBigInt: true });
|
|
43
43
|
return {
|
|
44
44
|
numRows: table.numRows,
|
|
45
45
|
lineNumbers: table.getChild('line_number'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Table/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAErE,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAYlD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Table/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAErE,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAYlD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAU1C,OAAO,EAAC,OAAO,EAAmC,MAAM,mBAAmB,CAAC;AAE5E,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AACzD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AACjE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAC7D,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,KAAK,wCAyMhB,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
package/dist/Table/index.js
CHANGED
|
@@ -12,13 +12,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
15
|
-
import { tableFromIPC } from '
|
|
15
|
+
import { tableFromIPC } from '@uwdata/flechette';
|
|
16
16
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
17
17
|
import { useContextMenu } from 'react-contexify';
|
|
18
18
|
import { Table as TableComponent, TableSkeleton, useParcaContext, useURLState, } from '@parca/components';
|
|
19
19
|
import { useCurrentColorProfile } from '@parca/hooks';
|
|
20
20
|
import useMappingList, { useFilenamesList, } from '../ProfileFlameGraph/FlameGraphArrow/useMappingList';
|
|
21
21
|
import { useProfileViewContext } from '../ProfileView/context/ProfileViewContext';
|
|
22
|
+
import { alignedUint8Array } from '../utils';
|
|
22
23
|
import TableContextMenuWrapper from './TableContextMenuWrapper';
|
|
23
24
|
import { useColorManagement } from './hooks/useColorManagement';
|
|
24
25
|
import { useTableConfiguration } from './hooks/useTableConfiguration';
|
|
@@ -52,7 +53,7 @@ export const Table = React.memo(function Table({ data, total, filtered, profileT
|
|
|
52
53
|
if (loading || data == null) {
|
|
53
54
|
return null;
|
|
54
55
|
}
|
|
55
|
-
return tableFromIPC(data);
|
|
56
|
+
return tableFromIPC(alignedUint8Array(data), { useBigInt: true });
|
|
56
57
|
}, [data, loading]);
|
|
57
58
|
const mappingsList = useMappingList(metadataMappingFiles);
|
|
58
59
|
const filenamesList = useFilenamesList(table);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Row as RowType } from '@tanstack/table-core';
|
|
2
|
-
import {
|
|
2
|
+
import { Column } from '@uwdata/flechette';
|
|
3
3
|
import { colorByColors } from '../../ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes';
|
|
4
4
|
export interface DataRow {
|
|
5
5
|
id: number;
|
|
@@ -30,8 +30,8 @@ export interface DummyRow {
|
|
|
30
30
|
}
|
|
31
31
|
export type Row = DataRow | DummyRow;
|
|
32
32
|
export declare const addPlusSign: (num: string) => string;
|
|
33
|
-
export declare const getRowColor: (colorByColors: colorByColors, mappingFileColumn:
|
|
34
|
-
export declare const RowName: (mappingFileColumn:
|
|
33
|
+
export declare const getRowColor: (colorByColors: colorByColors, mappingFileColumn: Column<string> | null, row: number, functionFileNameColumn: Column<string> | null, colorBy: string) => string;
|
|
34
|
+
export declare const RowName: (mappingFileColumn: Column<string> | null, locationAddressColumn: Column<bigint> | null, functionNameColumn: Column<string> | null, row: number) => string;
|
|
35
35
|
export declare const getRowsCount: (rows: Array<RowType<Row>>) => number;
|
|
36
36
|
export declare function getScrollTargetIndex(rows: Array<RowType<Row>>, parentRow: RowType<Row>, newRow: RowType<Row>): number;
|
|
37
37
|
export declare function isSubRow(row: Row): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/Table/utils/functions.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,KAAK,GAAG,IAAI,OAAO,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,MAAM,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/Table/utils/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,8 +23,8 @@ export const getRowColor = (colorByColors, mappingFileColumn, row, functionFileN
|
|
|
23
23
|
console.error('mapping_file column not found');
|
|
24
24
|
return '';
|
|
25
25
|
}
|
|
26
|
-
const mappingFile = mappingFileColumn?.get(row);
|
|
27
|
-
const functionFileName = functionFileNameColumn?.get(row);
|
|
26
|
+
const mappingFile = mappingFileColumn?.get(row) ?? null;
|
|
27
|
+
const functionFileName = functionFileNameColumn?.get(row) ?? null;
|
|
28
28
|
let mapping = '';
|
|
29
29
|
let filename = '';
|
|
30
30
|
if (mappingFile != null) {
|
|
@@ -53,7 +53,7 @@ export const RowName = (mappingFileColumn, locationAddressColumn, functionNameCo
|
|
|
53
53
|
if (functionName !== null && functionName !== '') {
|
|
54
54
|
return `${mapping} ${functionName}`;
|
|
55
55
|
}
|
|
56
|
-
const address = locationAddressColumn?.get(row) ??
|
|
56
|
+
const address = locationAddressColumn?.get(row) ?? 0n;
|
|
57
57
|
return hexifyAddress(address);
|
|
58
58
|
};
|
|
59
59
|
export const getRowsCount = (rows) => {
|
package/dist/utils.d.ts
CHANGED
|
@@ -6,4 +6,10 @@ export declare const truncateString: (str: string, num: number) => string;
|
|
|
6
6
|
export declare const truncateStringReverse: (str: string, num: number) => string;
|
|
7
7
|
export type NumberDuo = [number, number];
|
|
8
8
|
export type BigIntDuo = [bigint, bigint];
|
|
9
|
+
/**
|
|
10
|
+
* Ensures the buffer is 8-byte aligned for Arrow IPC parsing with BigInt support.
|
|
11
|
+
* Arrow's BigInt64Array/BigUint64Array require 8-byte aligned memory.
|
|
12
|
+
* If not aligned, creates a copy which will be properly aligned.
|
|
13
|
+
*/
|
|
14
|
+
export declare const alignedUint8Array: (buffer: Uint8Array) => Uint8Array;
|
|
9
15
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAC,YAAY,EAA2B,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAExF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAKhD,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,YAAY,EACrB,aAAa,kBAAkB,EAC/B,UAAU,WAAW,KACpB,OAAO,CAAC,IAAI,CAiBd,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAMzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAMhE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAC,YAAY,EAA2B,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAExF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAKhD,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,YAAY,EACrB,aAAa,kBAAkB,EAC/B,UAAU,WAAW,KACpB,OAAO,CAAC,IAAI,CAiBd,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAMzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAMhE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,UAAU,KAAG,UAEtD,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -41,3 +41,11 @@ export const truncateStringReverse = (str, num) => {
|
|
|
41
41
|
}
|
|
42
42
|
return '...' + str.slice(str.length - num);
|
|
43
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Ensures the buffer is 8-byte aligned for Arrow IPC parsing with BigInt support.
|
|
46
|
+
* Arrow's BigInt64Array/BigUint64Array require 8-byte aligned memory.
|
|
47
|
+
* If not aligned, creates a copy which will be properly aligned.
|
|
48
|
+
*/
|
|
49
|
+
export const alignedUint8Array = (buffer) => {
|
|
50
|
+
return buffer.byteOffset % 8 === 0 ? buffer : new Uint8Array(buffer);
|
|
51
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parca/profile",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.113",
|
|
4
4
|
"description": "Profile viewing libraries",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@floating-ui/react": "^0.27.12",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@types/d3-selection": "^3.0.10",
|
|
27
27
|
"@types/fast-levenshtein": "^0.0.4",
|
|
28
28
|
"@types/react-beautiful-dnd": "^13.1.8",
|
|
29
|
-
"
|
|
29
|
+
"@uwdata/flechette": "^2.3.0",
|
|
30
30
|
"classnames": "^2.3.1",
|
|
31
31
|
"d3": "7.9.0",
|
|
32
32
|
"d3-array": "^3.2.4",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"access": "public",
|
|
85
85
|
"registry": "https://registry.npmjs.org/"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "cb690dea5c6bd3369fdee920fbdc5609d783f2cd"
|
|
88
88
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import React from 'react';
|
|
15
15
|
|
|
16
16
|
import {Icon} from '@iconify/react';
|
|
17
|
-
import {Table} from '
|
|
17
|
+
import {Table} from '@uwdata/flechette';
|
|
18
18
|
|
|
19
19
|
import {useParcaContext} from '@parca/components';
|
|
20
20
|
import {ProfileType} from '@parca/parser';
|
|
@@ -26,7 +26,7 @@ import {useGraphTooltip} from './useGraphTooltip';
|
|
|
26
26
|
import {useGraphTooltipMetaInfo} from './useGraphTooltipMetaInfo';
|
|
27
27
|
|
|
28
28
|
interface GraphTooltipArrowContentProps {
|
|
29
|
-
table: Table
|
|
29
|
+
table: Table;
|
|
30
30
|
profileType?: ProfileType;
|
|
31
31
|
unit?: string;
|
|
32
32
|
total: bigint;
|
|
@@ -130,7 +130,7 @@ const GraphTooltipArrowContent = ({
|
|
|
130
130
|
);
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
-
const TooltipMetaInfo = ({table, row}: {table: Table
|
|
133
|
+
const TooltipMetaInfo = ({table, row}: {table: Table; row: number}): React.JSX.Element => {
|
|
134
134
|
const {
|
|
135
135
|
labelPairs,
|
|
136
136
|
functionFilename,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
14
|
import {Icon} from '@iconify/react';
|
|
15
|
-
import {Table} from '
|
|
15
|
+
import {Table} from '@uwdata/flechette';
|
|
16
16
|
import cx from 'classnames';
|
|
17
17
|
import {useWindowSize} from 'react-use';
|
|
18
18
|
|
|
@@ -25,7 +25,7 @@ import {useGraphTooltip} from '../useGraphTooltip';
|
|
|
25
25
|
import {useGraphTooltipMetaInfo} from '../useGraphTooltipMetaInfo';
|
|
26
26
|
|
|
27
27
|
interface Props {
|
|
28
|
-
table: Table
|
|
28
|
+
table: Table;
|
|
29
29
|
total: bigint;
|
|
30
30
|
totalUnfiltered: bigint;
|
|
31
31
|
row: number | null;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
|
-
import {Table} from '
|
|
14
|
+
import {Table} from '@uwdata/flechette';
|
|
15
15
|
|
|
16
16
|
import {ProfileType} from '@parca/parser';
|
|
17
17
|
import {divide, valueFormatter} from '@parca/utilities';
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import {getTextForCumulative, nodeLabel} from '../../ProfileFlameGraph/FlameGraphArrow/utils';
|
|
26
26
|
|
|
27
27
|
interface Props {
|
|
28
|
-
table: Table
|
|
28
|
+
table: Table;
|
|
29
29
|
profileType?: ProfileType;
|
|
30
30
|
unit?: string;
|
|
31
31
|
total: bigint;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
|
-
import {Table} from '
|
|
14
|
+
import {Table} from '@uwdata/flechette';
|
|
15
15
|
|
|
16
16
|
import {QueryRequest_ReportType} from '@parca/client';
|
|
17
17
|
import {useParcaContext, useURLState} from '@parca/components';
|
|
@@ -33,7 +33,7 @@ import {useProfileViewContext} from '../../ProfileView/context/ProfileViewContex
|
|
|
33
33
|
import {useQuery} from '../../useQuery';
|
|
34
34
|
|
|
35
35
|
interface Props {
|
|
36
|
-
table: Table
|
|
36
|
+
table: Table;
|
|
37
37
|
row: number;
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
14
|
import {Icon} from '@iconify/react';
|
|
15
|
-
import {Table} from '
|
|
15
|
+
import {Table} from '@uwdata/flechette';
|
|
16
16
|
import cx from 'classnames';
|
|
17
17
|
import {Item, Menu, Separator, Submenu} from 'react-contexify';
|
|
18
18
|
import {Tooltip} from 'react-tooltip';
|
|
@@ -29,7 +29,7 @@ import {hexifyAddress, truncateString} from '../../utils';
|
|
|
29
29
|
|
|
30
30
|
interface ContextMenuProps {
|
|
31
31
|
menuId: string;
|
|
32
|
-
table: Table
|
|
32
|
+
table: Table;
|
|
33
33
|
profileType?: ProfileType;
|
|
34
34
|
unit?: string;
|
|
35
35
|
total: bigint;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import {forwardRef, useImperativeHandle, useState} from 'react';
|
|
15
15
|
|
|
16
|
-
import {Table} from '
|
|
16
|
+
import {Table} from '@uwdata/flechette';
|
|
17
17
|
|
|
18
18
|
import {ProfileType} from '@parca/parser';
|
|
19
19
|
|
|
@@ -21,7 +21,7 @@ import ContextMenu from './ContextMenu';
|
|
|
21
21
|
|
|
22
22
|
interface ContextMenuWrapperProps {
|
|
23
23
|
menuId: string;
|
|
24
|
-
table: Table
|
|
24
|
+
table: Table;
|
|
25
25
|
total: bigint;
|
|
26
26
|
totalUnfiltered: bigint;
|
|
27
27
|
profileType?: ProfileType;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import React, {useCallback, useMemo} from 'react';
|
|
15
15
|
|
|
16
|
-
import {Table} from '
|
|
16
|
+
import {Table} from '@uwdata/flechette';
|
|
17
17
|
import cx from 'classnames';
|
|
18
18
|
|
|
19
19
|
import {selectBinaries, useAppSelector} from '@parca/store';
|
|
@@ -44,7 +44,7 @@ export interface colorByColors {
|
|
|
44
44
|
export interface FlameNodeProps {
|
|
45
45
|
height: number;
|
|
46
46
|
totalWidth: number;
|
|
47
|
-
table: Table
|
|
47
|
+
table: Table;
|
|
48
48
|
row: number;
|
|
49
49
|
colors: colorByColors;
|
|
50
50
|
colorBy: string;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import React, {createContext, useCallback, useContext, useMemo, useRef} from 'react';
|
|
15
15
|
|
|
16
|
-
import {Table} from '
|
|
16
|
+
import {Table} from '@uwdata/flechette';
|
|
17
17
|
|
|
18
18
|
import {ProfileType} from '@parca/parser';
|
|
19
19
|
|
|
@@ -24,7 +24,7 @@ interface TooltipState {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
interface TooltipContextValue {
|
|
27
|
-
table: Table
|
|
27
|
+
table: Table;
|
|
28
28
|
total: bigint;
|
|
29
29
|
totalUnfiltered: bigint;
|
|
30
30
|
profileType?: ProfileType;
|
|
@@ -47,7 +47,7 @@ export const useTooltipContext = (): TooltipContextValue => {
|
|
|
47
47
|
|
|
48
48
|
interface TooltipProviderProps {
|
|
49
49
|
children: React.ReactNode;
|
|
50
|
-
table: Table
|
|
50
|
+
table: Table;
|
|
51
51
|
total: bigint;
|
|
52
52
|
totalUnfiltered: bigint;
|
|
53
53
|
profileType?: ProfileType;
|
|
@@ -21,7 +21,7 @@ import React, {
|
|
|
21
21
|
useState,
|
|
22
22
|
} from 'react';
|
|
23
23
|
|
|
24
|
-
import {Table, tableFromIPC} from '
|
|
24
|
+
import {Table, tableFromIPC} from '@uwdata/flechette';
|
|
25
25
|
import {useContextMenu} from 'react-contexify';
|
|
26
26
|
|
|
27
27
|
import {FlamegraphArrow} from '@parca/client';
|
|
@@ -34,6 +34,7 @@ import {type ColorConfig} from '@parca/utilities';
|
|
|
34
34
|
import {ProfileSource} from '../../ProfileSource';
|
|
35
35
|
import {useProfileFilters} from '../../ProfileView/components/ProfileFilters/useProfileFilters';
|
|
36
36
|
import {useProfileViewContext} from '../../ProfileView/context/ProfileViewContext';
|
|
37
|
+
import {alignedUint8Array} from '../../utils';
|
|
37
38
|
import ContextMenuWrapper, {ContextMenuWrapperRef} from './ContextMenuWrapper';
|
|
38
39
|
import {FlameNode, RowHeight, colorByColors} from './FlameGraphNodes';
|
|
39
40
|
import {MemoizedTooltip} from './MemoizedTooltip';
|
|
@@ -153,8 +154,8 @@ export const FlameGraphArrow = memo(function FlameGraphArrow({
|
|
|
153
154
|
const isDarkMode = useAppSelector(selectDarkMode);
|
|
154
155
|
const {perf} = useParcaContext();
|
|
155
156
|
|
|
156
|
-
const table: Table
|
|
157
|
-
const result = tableFromIPC(arrow.record);
|
|
157
|
+
const table: Table = useMemo(() => {
|
|
158
|
+
const result = tableFromIPC(alignedUint8Array(arrow.record), {useBigInt: true});
|
|
158
159
|
|
|
159
160
|
if (perf?.setMeasurement != null) {
|
|
160
161
|
perf.setMeasurement('flamegraph.node_count', result.numRows);
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import {useMemo} from 'react';
|
|
15
15
|
|
|
16
|
-
import {
|
|
16
|
+
import {Column, Table} from '@uwdata/flechette';
|
|
17
17
|
|
|
18
18
|
import {getLastItem} from '@parca/utilities';
|
|
19
19
|
|
|
@@ -48,26 +48,26 @@ export const useFilenamesList = (table: Table | null): string[] => {
|
|
|
48
48
|
if (table === null) {
|
|
49
49
|
return [];
|
|
50
50
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
entries.push(getLastItem(fn) ?? '');
|
|
63
|
-
}
|
|
64
|
-
return entries;
|
|
65
|
-
})
|
|
66
|
-
.flat() ?? [];
|
|
51
|
+
const filenamesColumn: Column<string> | null = table.getChild(FIELD_FUNCTION_FILE_NAME);
|
|
52
|
+
if (filenamesColumn === null) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Access dictionary directly instead of iterating all rows
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
const dictionary: Column<string> | undefined = (filenamesColumn.data[0] as any)?.dictionary;
|
|
59
|
+
if (dictionary == null) {
|
|
60
|
+
return [''];
|
|
61
|
+
}
|
|
67
62
|
|
|
68
|
-
filenames.
|
|
63
|
+
const filenames = Array.from(dictionary.toArray())
|
|
64
|
+
.map(value => {
|
|
65
|
+
const fn = arrowToString(value);
|
|
66
|
+
return fn != null ? getLastItem(fn) ?? '' : '';
|
|
67
|
+
})
|
|
68
|
+
.concat('') // Add empty string for "Everything else"
|
|
69
|
+
.sort((a, b) => a.localeCompare(b));
|
|
69
70
|
|
|
70
|
-
filenames.sort((a, b) => a.localeCompare(b));
|
|
71
71
|
return filenames;
|
|
72
72
|
};
|
|
73
73
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import {useMemo, useRef} from 'react';
|
|
15
15
|
|
|
16
|
-
import {Table} from '
|
|
16
|
+
import {Table} from '@uwdata/flechette';
|
|
17
17
|
|
|
18
18
|
import {RowHeight} from './FlameGraphNodes';
|
|
19
19
|
import {FIELD_CUMULATIVE, FIELD_DEPTH, FIELD_VALUE_OFFSET} from './index';
|
|
@@ -25,9 +25,7 @@ import {getMaxDepth} from './utils';
|
|
|
25
25
|
* Instead of scanning all rows to find depth matches, we pre-compute
|
|
26
26
|
* buckets so viewport rendering only examines depth ranges that are relevant.
|
|
27
27
|
*/
|
|
28
|
-
const useDepthBuckets =
|
|
29
|
-
table: Table<TRow> | undefined
|
|
30
|
-
): number[][] => {
|
|
28
|
+
const useDepthBuckets = (table: Table | undefined): number[][] => {
|
|
31
29
|
return useMemo(() => {
|
|
32
30
|
if (table === undefined) return [];
|
|
33
31
|
|
|
@@ -51,7 +49,7 @@ const useDepthBuckets = <TRow extends Record<string, any>>(
|
|
|
51
49
|
};
|
|
52
50
|
|
|
53
51
|
export interface UseVisibleNodesParams {
|
|
54
|
-
table: Table
|
|
52
|
+
table: Table;
|
|
55
53
|
viewport: ViewportState;
|
|
56
54
|
total: bigint;
|
|
57
55
|
width: number;
|
|
@@ -85,7 +83,7 @@ export const useVisibleNodes = ({
|
|
|
85
83
|
result: number[];
|
|
86
84
|
}>({key: '', result: []});
|
|
87
85
|
|
|
88
|
-
const renderedRangeRef = useRef<{minDepth: number; maxDepth: number; table: Table
|
|
86
|
+
const renderedRangeRef = useRef<{minDepth: number; maxDepth: number; table: Table | null}>({
|
|
89
87
|
minDepth: Infinity,
|
|
90
88
|
maxDepth: -Infinity,
|
|
91
89
|
table: null,
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import {Column, Table} from '@uwdata/flechette';
|
|
15
15
|
|
|
16
16
|
import {
|
|
17
17
|
BINARY_FEATURE_TYPES,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
FIELD_MAPPING_FILE,
|
|
35
35
|
} from './index';
|
|
36
36
|
|
|
37
|
-
export function nodeLabel(table: Table
|
|
37
|
+
export function nodeLabel(table: Table, row: number, showBinaryName: boolean): string {
|
|
38
38
|
const labelsOnly: boolean | null = table.getChild(FIELD_LABELS_ONLY)?.get(row);
|
|
39
39
|
const depth: number = table.getChild(FIELD_DEPTH)?.get(row) ?? 0;
|
|
40
40
|
if (depth === 1 && labelsOnly !== null && labelsOnly) {
|
|
@@ -147,7 +147,7 @@ export interface CurrentPathFrame {
|
|
|
147
147
|
labels?: string;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
export const getCurrentPathFrameData = (table: Table
|
|
150
|
+
export const getCurrentPathFrameData = (table: Table, row: number): CurrentPathFrame => {
|
|
151
151
|
const functionName: string | null = arrowToString(table.getChild(FIELD_FUNCTION_NAME)?.get(row));
|
|
152
152
|
const systemName: string | null = arrowToString(table.getChild(FIELD_FUNCTION_NAME)?.get(row));
|
|
153
153
|
const fileName: string | null = arrowToString(table.getChild(FIELD_MAPPING_FILE)?.get(row));
|
|
@@ -173,7 +173,7 @@ export const getCurrentPathFrameData = (table: Table<any>, row: number): Current
|
|
|
173
173
|
};
|
|
174
174
|
};
|
|
175
175
|
|
|
176
|
-
function getLabelSet(table: Table
|
|
176
|
+
function getLabelSet(table: Table, row: number): string {
|
|
177
177
|
const labelPrefix = 'labels.';
|
|
178
178
|
const labelColumnNames = table.schema.fields.filter(field => field.name.startsWith(labelPrefix));
|
|
179
179
|
|
|
@@ -187,11 +187,7 @@ function getLabelSet(table: Table<any>, row: number): string {
|
|
|
187
187
|
.join(', ');
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
export function isCurrentPathFrameMatch(
|
|
191
|
-
table: Table<any>,
|
|
192
|
-
row: number,
|
|
193
|
-
b: CurrentPathFrame
|
|
194
|
-
): boolean {
|
|
190
|
+
export function isCurrentPathFrameMatch(table: Table, row: number, b: CurrentPathFrame): boolean {
|
|
195
191
|
const a = getCurrentPathFrameData(table, row);
|
|
196
192
|
return (
|
|
197
193
|
a.functionName === b.functionName &&
|
|
@@ -204,7 +200,7 @@ export function isCurrentPathFrameMatch(
|
|
|
204
200
|
);
|
|
205
201
|
}
|
|
206
202
|
|
|
207
|
-
export function getMaxDepth(depthColumn:
|
|
203
|
+
export function getMaxDepth(depthColumn: Column<number> | null): number {
|
|
208
204
|
if (depthColumn === null) return 0;
|
|
209
205
|
|
|
210
206
|
let max = 0;
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
|
|
14
14
|
import {useMemo} from 'react';
|
|
15
15
|
|
|
16
|
-
import {Table
|
|
16
|
+
import {Table, tableFromIPC} from '@uwdata/flechette';
|
|
17
17
|
|
|
18
18
|
import {FlamegraphArrow} from '@parca/client';
|
|
19
19
|
|
|
20
20
|
import useMappingList, {
|
|
21
21
|
useFilenamesList,
|
|
22
22
|
} from '../../ProfileFlameGraph/FlameGraphArrow/useMappingList';
|
|
23
|
+
import {alignedUint8Array} from '../../utils';
|
|
23
24
|
|
|
24
25
|
interface UseProfileMetadataProps {
|
|
25
26
|
flamegraphArrow?: FlamegraphArrow;
|
|
@@ -34,14 +35,17 @@ export const useProfileMetadata = ({
|
|
|
34
35
|
metadataLoading,
|
|
35
36
|
colorBy,
|
|
36
37
|
}: UseProfileMetadataProps): {
|
|
37
|
-
table:
|
|
38
|
+
table: Table | null;
|
|
38
39
|
mappingsList: string[];
|
|
39
40
|
filenamesList: string[];
|
|
40
41
|
colorMappings: string[];
|
|
41
42
|
metadataLoading: boolean;
|
|
42
43
|
} => {
|
|
43
|
-
const table:
|
|
44
|
-
|
|
44
|
+
const table: Table | null = useMemo(() => {
|
|
45
|
+
if (flamegraphArrow === undefined) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return tableFromIPC(alignedUint8Array(flamegraphArrow.record), {useBigInt: true});
|
|
45
49
|
}, [flamegraphArrow]);
|
|
46
50
|
|
|
47
51
|
const mappingsList = useMappingList(metadataMappingFiles);
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import React, {useMemo} from 'react';
|
|
15
15
|
|
|
16
|
-
import {
|
|
16
|
+
import {Column, tableFromIPC} from '@uwdata/flechette';
|
|
17
17
|
import {Tooltip} from 'react-tooltip';
|
|
18
18
|
|
|
19
19
|
import {Button} from '@parca/components';
|
|
@@ -23,10 +23,11 @@ import ProfileFlameGraph from '../../ProfileFlameGraph';
|
|
|
23
23
|
import {type CurrentPathFrame} from '../../ProfileFlameGraph/FlameGraphArrow/utils';
|
|
24
24
|
import {type ProfileSource} from '../../ProfileSource';
|
|
25
25
|
import {FlamegraphData} from '../../ProfileView/types/visualization';
|
|
26
|
+
import {alignedUint8Array} from '../../utils';
|
|
26
27
|
|
|
27
28
|
const FIELD_DEPTH = 'depth';
|
|
28
29
|
|
|
29
|
-
function getMaxDepth(depthColumn:
|
|
30
|
+
function getMaxDepth(depthColumn: Column<number> | null): number {
|
|
30
31
|
if (depthColumn === null) return 0;
|
|
31
32
|
|
|
32
33
|
let max = 0;
|
|
@@ -60,7 +61,9 @@ export function CallersSection({
|
|
|
60
61
|
}: CallersSectionProps): JSX.Element {
|
|
61
62
|
const maxDepth = useMemo(() => {
|
|
62
63
|
if (callersFlamegraphData?.arrow != null) {
|
|
63
|
-
const table = tableFromIPC(callersFlamegraphData.arrow.record)
|
|
64
|
+
const table = tableFromIPC(alignedUint8Array(callersFlamegraphData.arrow.record), {
|
|
65
|
+
useBigInt: true,
|
|
66
|
+
});
|
|
64
67
|
const depthColumn = table.getChild(FIELD_DEPTH);
|
|
65
68
|
return getMaxDepth(depthColumn);
|
|
66
69
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
|
-
import {type Table} from '
|
|
14
|
+
import {type Table} from '@uwdata/flechette';
|
|
15
15
|
|
|
16
16
|
import {type colorByColors} from '../../ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes';
|
|
17
17
|
import {
|
package/src/SourceView/index.tsx
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import React, {useCallback, useEffect, useMemo} from 'react';
|
|
15
15
|
|
|
16
|
-
import {tableFromIPC} from '
|
|
16
|
+
import {tableFromIPC} from '@uwdata/flechette';
|
|
17
17
|
import {AnimatePresence, motion} from 'framer-motion';
|
|
18
18
|
import {Item, Menu, useContextMenu} from 'react-contexify';
|
|
19
19
|
|
|
@@ -21,7 +21,7 @@ import {Source} from '@parca/client';
|
|
|
21
21
|
import {SourceSkeleton, useParcaContext, useURLState, type ProfileData} from '@parca/components';
|
|
22
22
|
|
|
23
23
|
import {ExpandOnHover} from '../GraphTooltipArrow/ExpandOnHoverValue';
|
|
24
|
-
import {truncateStringReverse} from '../utils';
|
|
24
|
+
import {alignedUint8Array, truncateStringReverse} from '../utils';
|
|
25
25
|
import {Highlighter, profileAwareRenderer, type LineDataLookup} from './Highlighter';
|
|
26
26
|
import useLineRange from './useSelectedLineRange';
|
|
27
27
|
|
|
@@ -63,7 +63,7 @@ export const SourceView = React.memo(function SourceView({
|
|
|
63
63
|
if (data === undefined) {
|
|
64
64
|
return null;
|
|
65
65
|
}
|
|
66
|
-
const table = tableFromIPC(data.record);
|
|
66
|
+
const table = tableFromIPC(alignedUint8Array(data.record), {useBigInt: true});
|
|
67
67
|
return {
|
|
68
68
|
numRows: table.numRows,
|
|
69
69
|
lineNumbers: table.getChild('line_number'),
|
package/src/Table/index.tsx
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import React, {useCallback, useEffect, useMemo, useRef} from 'react';
|
|
15
15
|
|
|
16
16
|
import {RpcError} from '@protobuf-ts/runtime-rpc';
|
|
17
|
-
import {tableFromIPC} from '
|
|
17
|
+
import {tableFromIPC} from '@uwdata/flechette';
|
|
18
18
|
import {AnimatePresence, motion} from 'framer-motion';
|
|
19
19
|
import {useContextMenu} from 'react-contexify';
|
|
20
20
|
|
|
@@ -31,6 +31,7 @@ import useMappingList, {
|
|
|
31
31
|
useFilenamesList,
|
|
32
32
|
} from '../ProfileFlameGraph/FlameGraphArrow/useMappingList';
|
|
33
33
|
import {useProfileViewContext} from '../ProfileView/context/ProfileViewContext';
|
|
34
|
+
import {alignedUint8Array} from '../utils';
|
|
34
35
|
import TableContextMenuWrapper, {TableContextMenuWrapperRef} from './TableContextMenuWrapper';
|
|
35
36
|
import {useColorManagement} from './hooks/useColorManagement';
|
|
36
37
|
import {useTableConfiguration} from './hooks/useTableConfiguration';
|
|
@@ -93,8 +94,7 @@ export const Table = React.memo(function Table({
|
|
|
93
94
|
if (loading || data == null) {
|
|
94
95
|
return null;
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
-
return tableFromIPC(data);
|
|
97
|
+
return tableFromIPC(alignedUint8Array(data), {useBigInt: true});
|
|
98
98
|
}, [data, loading]);
|
|
99
99
|
|
|
100
100
|
const mappingsList = useMappingList(metadataMappingFiles);
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
|
|
14
14
|
import {type Row as RowType} from '@tanstack/table-core';
|
|
15
|
-
import {
|
|
15
|
+
import {Column} from '@uwdata/flechette';
|
|
16
16
|
|
|
17
17
|
import {getLastItem} from '@parca/utilities';
|
|
18
18
|
|
|
@@ -60,9 +60,9 @@ export const addPlusSign = (num: string): string => {
|
|
|
60
60
|
|
|
61
61
|
export const getRowColor = (
|
|
62
62
|
colorByColors: colorByColors,
|
|
63
|
-
mappingFileColumn:
|
|
63
|
+
mappingFileColumn: Column<string> | null,
|
|
64
64
|
row: number,
|
|
65
|
-
functionFileNameColumn:
|
|
65
|
+
functionFileNameColumn: Column<string> | null,
|
|
66
66
|
colorBy: string
|
|
67
67
|
): string => {
|
|
68
68
|
if (mappingFileColumn === null) {
|
|
@@ -70,8 +70,8 @@ export const getRowColor = (
|
|
|
70
70
|
return '';
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
const mappingFile: string | null = mappingFileColumn?.get(row);
|
|
74
|
-
const functionFileName: string | null = functionFileNameColumn?.get(row);
|
|
73
|
+
const mappingFile: string | null = mappingFileColumn?.get(row) ?? null;
|
|
74
|
+
const functionFileName: string | null = functionFileNameColumn?.get(row) ?? null;
|
|
75
75
|
let mapping = '';
|
|
76
76
|
let filename = '';
|
|
77
77
|
|
|
@@ -91,9 +91,9 @@ export const getRowColor = (
|
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
export const RowName = (
|
|
94
|
-
mappingFileColumn:
|
|
95
|
-
locationAddressColumn:
|
|
96
|
-
functionNameColumn:
|
|
94
|
+
mappingFileColumn: Column<string> | null,
|
|
95
|
+
locationAddressColumn: Column<bigint> | null,
|
|
96
|
+
functionNameColumn: Column<string> | null,
|
|
97
97
|
row: number
|
|
98
98
|
): string => {
|
|
99
99
|
if (mappingFileColumn === null) {
|
|
@@ -112,7 +112,7 @@ export const RowName = (
|
|
|
112
112
|
return `${mapping} ${functionName}`;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
const address: bigint = locationAddressColumn?.get(row) ??
|
|
115
|
+
const address: bigint = locationAddressColumn?.get(row) ?? 0n;
|
|
116
116
|
|
|
117
117
|
return hexifyAddress(address);
|
|
118
118
|
};
|
package/src/utils.ts
CHANGED
|
@@ -63,3 +63,12 @@ export const truncateStringReverse = (str: string, num: number): string => {
|
|
|
63
63
|
|
|
64
64
|
export type NumberDuo = [number, number];
|
|
65
65
|
export type BigIntDuo = [bigint, bigint];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Ensures the buffer is 8-byte aligned for Arrow IPC parsing with BigInt support.
|
|
69
|
+
* Arrow's BigInt64Array/BigUint64Array require 8-byte aligned memory.
|
|
70
|
+
* If not aligned, creates a copy which will be properly aligned.
|
|
71
|
+
*/
|
|
72
|
+
export const alignedUint8Array = (buffer: Uint8Array): Uint8Array => {
|
|
73
|
+
return buffer.byteOffset % 8 === 0 ? buffer : new Uint8Array(buffer);
|
|
74
|
+
};
|