@@ -11,6 +11,7 @@ import {
1111 getEmptySourceTable ,
1212} from './data-structures' ;
1313import { computeStringIndexMarkerFieldsByDataType } from './marker-schema' ;
14+ import { type BitSet , makeBitSet , setBit , checkBit } from '../utils/bitset' ;
1415
1516import type {
1617 Profile ,
@@ -36,14 +37,14 @@ export type CompactedProfileWithTranslationMaps = {
3637} ;
3738
3839type ReferencedProfileData = {
39- referencedStacks : Uint8Array ;
40- referencedFrames : Uint8Array ;
41- referencedFuncs : Uint8Array ;
42- referencedResources : Uint8Array ;
43- referencedNativeSymbols : Uint8Array ;
44- referencedSources : Uint8Array ;
45- referencedStrings : Uint8Array ;
46- referencedLibs : Uint8Array ;
40+ referencedStacks : BitSet ;
41+ referencedFrames : BitSet ;
42+ referencedFuncs : BitSet ;
43+ referencedResources : BitSet ;
44+ referencedNativeSymbols : BitSet ;
45+ referencedSources : BitSet ;
46+ referencedStrings : BitSet ;
47+ referencedLibs : BitSet ;
4748} ;
4849
4950type TranslationMaps = {
@@ -99,14 +100,14 @@ function _gatherReferencesInProfile(
99100) : ReferencedProfileData {
100101 const { shared, threads } = profile ;
101102 const referencedSharedData : ReferencedProfileData = {
102- referencedStacks : new Uint8Array ( shared . stackTable . length ) ,
103- referencedFrames : new Uint8Array ( shared . frameTable . length ) ,
104- referencedFuncs : new Uint8Array ( shared . funcTable . length ) ,
105- referencedResources : new Uint8Array ( shared . resourceTable . length ) ,
106- referencedNativeSymbols : new Uint8Array ( shared . nativeSymbols . length ) ,
107- referencedSources : new Uint8Array ( shared . sources . length ) ,
108- referencedLibs : new Uint8Array ( profile . libs . length ) ,
109- referencedStrings : new Uint8Array ( shared . stringArray . length ) ,
103+ referencedStacks : makeBitSet ( shared . stackTable . length ) ,
104+ referencedFrames : makeBitSet ( shared . frameTable . length ) ,
105+ referencedFuncs : makeBitSet ( shared . funcTable . length ) ,
106+ referencedResources : makeBitSet ( shared . resourceTable . length ) ,
107+ referencedNativeSymbols : makeBitSet ( shared . nativeSymbols . length ) ,
108+ referencedSources : makeBitSet ( shared . sources . length ) ,
109+ referencedLibs : makeBitSet ( profile . libs . length ) ,
110+ referencedStrings : makeBitSet ( shared . stringArray . length ) ,
110111 } ;
111112
112113 // This is the "marking" phase of profile compaction. We want to mark
@@ -344,7 +345,7 @@ function _gatherReferencesInStackCol(
344345 for ( let i = 0 ; i < stackCol . length ; i ++ ) {
345346 const stack = stackCol [ i ] ;
346347 if ( stack !== null ) {
347- referencedStacks [ stack ] = 1 ;
348+ setBit ( referencedStacks , stack ) ;
348349 }
349350 }
350351}
@@ -372,7 +373,7 @@ function _gatherReferencesInMarkers(
372373) {
373374 const { referencedStacks, referencedStrings } = references ;
374375 for ( let i = 0 ; i < markers . length ; i ++ ) {
375- referencedStrings [ markers . name [ i ] ] = 1 ;
376+ setBit ( referencedStrings , markers . name [ i ] ) ;
376377
377378 const data = markers . data [ i ] ;
378379 if ( ! data ) {
@@ -382,7 +383,7 @@ function _gatherReferencesInMarkers(
382383 if ( 'cause' in data && data . cause ) {
383384 const stack = data . cause . stack ;
384385 if ( stack !== null ) {
385- referencedStacks [ stack ] = 1 ;
386+ setBit ( referencedStacks , stack ) ;
386387 }
387388 }
388389
@@ -394,7 +395,7 @@ function _gatherReferencesInMarkers(
394395 for ( const fieldKey of stringIndexMarkerFields ) {
395396 const stringIndex = ( data as any ) [ fieldKey ] ;
396397 if ( typeof stringIndex === 'number' ) {
397- referencedStrings [ stringIndex ] = 1 ;
398+ setBit ( referencedStrings , stringIndex ) ;
398399 }
399400 }
400401 }
@@ -466,15 +467,15 @@ function _gatherReferencesInStackTable(
466467) {
467468 const { referencedStacks, referencedFrames } = references ;
468469 for ( let i = stackTable . length - 1 ; i >= 0 ; i -- ) {
469- if ( referencedStacks [ i ] === 0 ) {
470+ if ( ! checkBit ( referencedStacks , i ) ) {
470471 continue ;
471472 }
472473
473474 const prefix = stackTable . prefix [ i ] ;
474475 if ( prefix !== null ) {
475- referencedStacks [ prefix ] = 1 ;
476+ setBit ( referencedStacks , prefix ) ;
476477 }
477- referencedFrames [ stackTable . frame [ i ] ] = 1 ;
478+ setBit ( referencedFrames , stackTable . frame [ i ] ) ;
478479 }
479480}
480481
@@ -487,7 +488,7 @@ function _createCompactedStackTable(
487488 translationMaps ;
488489 const newStackTable = getEmptyRawStackTable ( ) ;
489490 for ( let i = 0 ; i < stackTable . length ; i ++ ) {
490- if ( referencedStacks [ i ] === 0 ) {
491+ if ( ! checkBit ( referencedStacks , i ) ) {
491492 continue ;
492493 }
493494
@@ -512,15 +513,15 @@ function _gatherReferencesInFrameTable(
512513 const { referencedFrames, referencedFuncs, referencedNativeSymbols } =
513514 references ;
514515 for ( let i = 0 ; i < frameTable . length ; i ++ ) {
515- if ( referencedFrames [ i ] === 0 ) {
516+ if ( ! checkBit ( referencedFrames , i ) ) {
516517 continue ;
517518 }
518519
519- referencedFuncs [ frameTable . func [ i ] ] = 1 ;
520+ setBit ( referencedFuncs , frameTable . func [ i ] ) ;
520521
521522 const nativeSymbol = frameTable . nativeSymbol [ i ] ;
522523 if ( nativeSymbol !== null ) {
523- referencedNativeSymbols [ nativeSymbol ] = 1 ;
524+ setBit ( referencedNativeSymbols , nativeSymbol ) ;
524525 }
525526 }
526527}
@@ -537,7 +538,7 @@ function _createCompactedFrameTable(
537538 } = translationMaps ;
538539 const newFrameTable = getEmptyFrameTable ( ) ;
539540 for ( let i = 0 ; i < frameTable . length ; i ++ ) {
540- if ( referencedFrames [ i ] === 0 ) {
541+ if ( ! checkBit ( referencedFrames , i ) ) {
541542 continue ;
542543 }
543544
@@ -575,20 +576,20 @@ function _gatherReferencesInFuncTable(
575576 referencedResources,
576577 } = references ;
577578 for ( let i = 0 ; i < funcTable . length ; i ++ ) {
578- if ( referencedFuncs [ i ] === 0 ) {
579+ if ( ! checkBit ( referencedFuncs , i ) ) {
579580 continue ;
580581 }
581582
582- referencedStrings [ funcTable . name [ i ] ] = 1 ;
583+ setBit ( referencedStrings , funcTable . name [ i ] ) ;
583584
584585 const source = funcTable . source [ i ] ;
585586 if ( source !== null ) {
586- referencedSources [ source ] = 1 ;
587+ setBit ( referencedSources , source ) ;
587588 }
588589
589590 const resource = funcTable . resource [ i ] ;
590591 if ( resource !== - 1 ) {
591- referencedResources [ resource ] = 1 ;
592+ setBit ( referencedResources , resource ) ;
592593 }
593594 }
594595}
@@ -606,7 +607,7 @@ function _createCompactedFuncTable(
606607 } = translationMaps ;
607608 const newFuncTable = getEmptyFuncTable ( ) ;
608609 for ( let i = 0 ; i < funcTable . length ; i ++ ) {
609- if ( referencedFuncs [ i ] === 0 ) {
610+ if ( ! checkBit ( referencedFuncs , i ) ) {
610611 continue ;
611612 }
612613
@@ -637,20 +638,20 @@ function _gatherReferencesInResourceTable(
637638) {
638639 const { referencedResources, referencedStrings, referencedLibs } = references ;
639640 for ( let i = 0 ; i < resourceTable . length ; i ++ ) {
640- if ( referencedResources [ i ] === 0 ) {
641+ if ( ! checkBit ( referencedResources , i ) ) {
641642 continue ;
642643 }
643644
644- referencedStrings [ resourceTable . name [ i ] ] = 1 ;
645+ setBit ( referencedStrings , resourceTable . name [ i ] ) ;
645646
646647 const host = resourceTable . host [ i ] ;
647648 if ( host !== null ) {
648- referencedStrings [ host ] = 1 ;
649+ setBit ( referencedStrings , host ) ;
649650 }
650651
651652 const lib = resourceTable . lib [ i ] ;
652653 if ( lib !== null ) {
653- referencedLibs [ lib ] = 1 ;
654+ setBit ( referencedLibs , lib ) ;
654655 }
655656 }
656657}
@@ -667,7 +668,7 @@ function _createCompactedResourceTable(
667668 } = translationMaps ;
668669 const newResourceTable = getEmptyResourceTable ( ) ;
669670 for ( let i = 0 ; i < resourceTable . length ; i ++ ) {
670- if ( referencedResources [ i ] === 0 ) {
671+ if ( ! checkBit ( referencedResources , i ) ) {
671672 continue ;
672673 }
673674
@@ -696,12 +697,12 @@ function _gatherReferencesInNativeSymbols(
696697 const { referencedNativeSymbols, referencedStrings, referencedLibs } =
697698 references ;
698699 for ( let i = 0 ; i < nativeSymbols . length ; i ++ ) {
699- if ( referencedNativeSymbols [ i ] === 0 ) {
700+ if ( ! checkBit ( referencedNativeSymbols , i ) ) {
700701 continue ;
701702 }
702703
703- referencedStrings [ nativeSymbols . name [ i ] ] = 1 ;
704- referencedLibs [ nativeSymbols . libIndex [ i ] ] = 1 ;
704+ setBit ( referencedStrings , nativeSymbols . name [ i ] ) ;
705+ setBit ( referencedLibs , nativeSymbols . libIndex [ i ] ) ;
705706 }
706707}
707708
@@ -717,7 +718,7 @@ function _createCompactedNativeSymbols(
717718 } = translationMaps ;
718719 const newNativeSymbols = getEmptyNativeSymbolTable ( ) ;
719720 for ( let i = 0 ; i < nativeSymbols . length ; i ++ ) {
720- if ( referencedNativeSymbols [ i ] === 0 ) {
721+ if ( ! checkBit ( referencedNativeSymbols , i ) ) {
721722 continue ;
722723 }
723724
@@ -741,14 +742,15 @@ function _gatherReferencesInSources(
741742) {
742743 const { referencedSources, referencedStrings } = references ;
743744 for ( let i = 0 ; i < sources . length ; i ++ ) {
744- if ( referencedSources [ i ] === 0 ) {
745+ if ( ! checkBit ( referencedSources , i ) ) {
745746 continue ;
746747 }
747748
748- referencedStrings [ sources . filename [ i ] ] = 1 ;
749+ setBit ( referencedStrings , sources . filename [ i ] ) ;
749750
750751 const sourceMapURL = sources . sourceMapURL [ i ] ;
751752 if ( sourceMapURL !== null ) {
753+ setBit ( referencedStrings , sourceMapURL ) ;
752754 referencedStrings [ sourceMapURL ] = 1 ;
753755 }
754756 }
@@ -763,7 +765,7 @@ function _createCompactedSources(
763765 translationMaps ;
764766 const newSources = getEmptySourceTable ( ) ;
765767 for ( let i = 0 ; i < sources . length ; i ++ ) {
766- if ( referencedSources [ i ] === 0 ) {
768+ if ( ! checkBit ( referencedSources , i ) ) {
767769 continue ;
768770 }
769771
@@ -798,7 +800,7 @@ function _createCompactedStringArray(
798800 let nextIndex = 0 ;
799801 const newStringArray = [ ] ;
800802 for ( let i = 0 ; i < stringArray . length ; i ++ ) {
801- if ( referencedStrings [ i ] === 0 ) {
803+ if ( ! checkBit ( referencedStrings , i ) ) {
802804 continue ;
803805 }
804806
@@ -820,7 +822,7 @@ function _createCompactedLibs(
820822 let nextIndex = 0 ;
821823 const newLibs = [ ] ;
822824 for ( let i = 0 ; i < libs . length ; i ++ ) {
823- if ( referencedLibs [ i ] === 0 ) {
825+ if ( ! checkBit ( referencedLibs , i ) ) {
824826 continue ;
825827 }
826828
0 commit comments