@@ -675,50 +675,60 @@ export class Workunit extends StateObject<UWorkunitState, IWorkunitState> implem
675675 Measure : "label"
676676 }
677677 } ;
678- const data : IScope [ ] = [ ] ;
679- for ( const scope of scopes ) {
680- const props = { } ;
681- const formattedProps = { } ;
682- if ( scope && scope . Id && scope . Properties && scope . Properties . Property ) {
683- for ( const key in scope . Properties . Property ) {
684- const scopeProperty = scope . Properties . Property [ key ] ;
685- if ( scopeProperty . Measure === "ns" ) {
678+ const activityMap = new Map < number , string > ( ) ;
679+ for ( const activity of meta . Activities ?. Activity ?? [ ] ) {
680+ activityMap . set ( activity . Kind , activity . Name ) ;
681+ }
682+ const data : IScope [ ] = new Array ( scopes . length ) ;
683+ for ( let i = 0 ; i < scopes . length ; i ++ ) {
684+ const scope = scopes [ i ] ;
685+ const props : { [ key : string ] : any } = { } ;
686+ const formattedProps : { [ key : string ] : any } = { } ;
687+ if ( scope . Id && scope . Properties ?. Property ) {
688+ for ( const scopeProperty of scope . Properties . Property ) {
689+ const measure = scopeProperty . Measure ;
690+ const name = scopeProperty . Name ;
691+ const rawValue = scopeProperty . RawValue ;
692+ if ( measure === "ns" ) {
686693 scopeProperty . Measure = "s" ;
687694 }
688- if ( scopeProperty . Name === "Kind" ) {
689- const rawValue = parseInt ( scopeProperty . RawValue , 10 ) ;
690- scopeProperty . Formatted = meta . Activities . Activity . filter ( a => a . Kind === rawValue ) [ 0 ] . Name ?? scopeProperty . RawValue ;
695+ if ( name === "Kind" ) {
696+ const rawValueInt = parseInt ( rawValue , 10 ) ;
697+ scopeProperty . Formatted = activityMap . get ( rawValueInt ) ?? rawValue ;
691698 }
692- columns [ scopeProperty . Name ] = { ...scopeProperty } ;
693- safeDelete ( columns , scopeProperty . Name , "RawValue" ) ;
694- safeDelete ( columns , scopeProperty . Name , "Formatted" ) ;
699+ columns [ name ] = {
700+ Name : scopeProperty . Name ,
701+ Measure : scopeProperty . Measure ,
702+ Creator : scopeProperty . Creator ,
703+ CreatorType : scopeProperty . CreatorType
704+ } ;
695705 switch ( scopeProperty . Measure ) {
696706 case "bool" :
697- props [ scopeProperty . Name ] = ! ! + scopeProperty . RawValue ;
707+ props [ name ] = ! ! + rawValue ;
698708 break ;
699709 case "sz" :
700- props [ scopeProperty . Name ] = + scopeProperty . RawValue ;
710+ props [ name ] = + rawValue ;
701711 break ;
702712 case "s" :
703- props [ scopeProperty . Name ] = + scopeProperty . RawValue / 1000000000 ;
713+ props [ name ] = + rawValue / 1000000000 ;
704714 break ;
705715 case "ns" :
706- props [ scopeProperty . Name ] = + scopeProperty . RawValue ;
716+ props [ name ] = + rawValue ;
707717 break ;
708718 case "ts" :
709- props [ scopeProperty . Name ] = new Date ( + scopeProperty . RawValue / 1000 ) . toISOString ( ) ;
719+ props [ name ] = new Date ( + rawValue / 1000 ) . toISOString ( ) ;
710720 break ;
711721 case "cnt" :
712- props [ scopeProperty . Name ] = + scopeProperty . RawValue ;
722+ props [ name ] = + rawValue ;
713723 break ;
714724 case "cost" :
715- props [ scopeProperty . Name ] = + scopeProperty . RawValue / 1000000 ;
725+ props [ name ] = + rawValue / 1000000 ;
716726 break ;
717727 case "node" :
718- props [ scopeProperty . Name ] = + scopeProperty . RawValue ;
728+ props [ name ] = + rawValue ;
719729 break ;
720730 case "skw" :
721- props [ scopeProperty . Name ] = + scopeProperty . RawValue ;
731+ props [ name ] = + rawValue ;
722732 break ;
723733 case "cpu" :
724734 case "ppm" :
@@ -729,11 +739,10 @@ export class Workunit extends StateObject<UWorkunitState, IWorkunitState> implem
729739 case "id" :
730740 case "fname" :
731741 default :
732- props [ scopeProperty . Name ] = scopeProperty . RawValue ;
742+ props [ name ] = rawValue ;
733743 }
734- formattedProps [ scopeProperty . Name ] = formatNum ( scopeProperty . Formatted ?? props [ scopeProperty . Name ] ) ;
744+ formattedProps [ name ] = formatNum ( scopeProperty . Formatted ?? props [ name ] ) ;
735745 }
736- // Other properties ---
737746 }
738747 const normalizedScope : IScope = {
739748 id : scope . Id ,
@@ -748,37 +757,47 @@ export class Workunit extends StateObject<UWorkunitState, IWorkunitState> implem
748757 __StdDevsSource : "" ,
749758 ...props
750759 } ;
751- if ( normalizedScope [ DEFINITION_LIST ] ) {
760+ const definitionList = normalizedScope [ DEFINITION_LIST ] ;
761+ if ( definitionList ) {
752762 try {
753- const definitionList = JSON . parse ( normalizedScope [ DEFINITION_LIST ] . split ( "\\" ) . join ( "\\\\" ) ) ;
754- normalizedScope [ DEFINITION_LIST ] = [ ] ;
755- definitionList . forEach ( ( definition , idx ) => {
756- const matches = definition . match ( definitionRegex ) ;
763+ const parsedList = JSON . parse ( definitionList . split ( "\\" ) . join ( "\\\\" ) ) ;
764+ const processedDefinitions : Array < { filePath : string , line : number , col : number } > = [ ] ;
765+
766+ for ( let k = 0 ; k < parsedList . length ; k ++ ) {
767+ const matches = parsedList [ k ] . match ( definitionRegex ) ;
757768 if ( matches ) {
758- const filePath = ( matches [ 1 ] ?? "" ) + matches [ 2 ] + matches [ 3 ] ;
759- const line = parseInt ( matches [ 5 ] ) ;
760- const col = parseInt ( matches [ 6 ] ) ;
761- normalizedScope [ DEFINITION_LIST ] . push ( { filePath, line, col } ) ;
769+ processedDefinitions . push ( {
770+ filePath : ( matches [ 1 ] ?? "" ) + matches [ 2 ] + matches [ 3 ] ,
771+ line : parseInt ( matches [ 5 ] , 10 ) ,
772+ col : parseInt ( matches [ 6 ] , 10 )
773+ } ) ;
762774 }
763- } ) ;
775+ }
776+ normalizedScope [ DEFINITION_LIST ] = processedDefinitions ;
764777 } catch ( e ) {
765- logger . error ( `Unexpected "DefinitionList": ${ normalizedScope [ DEFINITION_LIST ] } ` ) ;
778+ logger . error ( `Unexpected "DefinitionList": ${ definitionList } ` ) ;
766779 }
767780 }
781+
768782 const dedup : DedupProperties = { } ;
783+ let maxStdDevs = 0 ;
784+ let maxStdDevsSource = "" ;
769785 for ( const key in normalizedScope ) {
770- if ( key . indexOf ( "__" ) !== 0 ) {
786+ if ( ! key . startsWith ( "__" ) ) {
771787 const row = formatValues ( normalizedScope , key , dedup ) ;
772788 if ( row ) {
773789 normalizedScope . __groupedProps [ row . Key ] = row ;
774- if ( ! isNaN ( row . StdDevs ) && normalizedScope . __StdDevs < row . StdDevs ) {
775- normalizedScope . __StdDevs = row . StdDevs ;
776- normalizedScope . __StdDevsSource = row . Key ;
790+ if ( ! isNaN ( row . StdDevs ) && row . StdDevs > maxStdDevs ) {
791+ maxStdDevs = row . StdDevs ;
792+ maxStdDevsSource = row . Key ;
777793 }
778794 }
779795 }
780796 }
781- data . push ( normalizedScope ) ;
797+ normalizedScope . __StdDevs = maxStdDevs ;
798+ normalizedScope . __StdDevsSource = maxStdDevsSource ;
799+
800+ data [ i ] = normalizedScope ;
782801 }
783802 return {
784803 meta,
0 commit comments