1010import sys
1111import tempfile
1212import argparse
13+ import itertools
1314
1415import llnl .util .tty as tty
1516import llnl .util .tty .color as color
@@ -443,12 +444,25 @@ def workspace_concretize(args):
443444
444445
445446def workspace_run_pipeline (args , pipeline ):
446- include_phase_dependencies = getattr (args , "include_phase_dependencies" , None )
447- if include_phase_dependencies :
448- with ramble .config .override ("config:include_phase_dependencies" , True ):
447+ profile_phases = getattr (args , "profile_phases" , None )
448+ if profile_phases :
449+ import line_profiler
450+
451+ profiler = line_profiler .LineProfiler ()
452+ profiler .enable ()
453+ p_phases = set (itertools .chain .from_iterable (profile_phases ))
454+ pipeline .workspace .profile_config = (profiler , p_phases )
455+ try :
456+ include_phase_dependencies = getattr (args , "include_phase_dependencies" , None )
457+ if include_phase_dependencies :
458+ with ramble .config .override ("config:include_phase_dependencies" , True ):
459+ pipeline .run ()
460+ else :
449461 pipeline .run ()
450- else :
451- pipeline .run ()
462+ finally :
463+ if profile_phases :
464+ profiler .disable ()
465+ profiler .print_stats ()
452466
453467
454468def workspace_setup_setup_parser (subparser ):
@@ -464,7 +478,14 @@ def workspace_setup_setup_parser(subparser):
464478
465479 arguments .add_common_arguments (
466480 subparser ,
467- ["phases" , "include_phase_dependencies" , "where" , "exclude_where" , "filter_tags" ],
481+ [
482+ "phases" ,
483+ "include_phase_dependencies" ,
484+ "where" ,
485+ "exclude_where" ,
486+ "filter_tags" ,
487+ "profile_phases" ,
488+ ],
468489 )
469490
470491
@@ -530,7 +551,14 @@ def workspace_analyze_setup_parser(subparser):
530551
531552 arguments .add_common_arguments (
532553 subparser ,
533- ["phases" , "include_phase_dependencies" , "where" , "exclude_where" , "filter_tags" ],
554+ [
555+ "phases" ,
556+ "include_phase_dependencies" ,
557+ "where" ,
558+ "exclude_where" ,
559+ "filter_tags" ,
560+ "profile_phases" ,
561+ ],
534562 )
535563
536564
@@ -587,7 +615,9 @@ def workspace_push_to_cache_setup_parser(subparser):
587615 "-d" , dest = "cache_path" , default = None , required = True , help = "Path to cache."
588616 )
589617
590- arguments .add_common_arguments (subparser , ["where" , "exclude_where" , "filter_tags" ])
618+ arguments .add_common_arguments (
619+ subparser , ["where" , "exclude_where" , "filter_tags" , "profile_phases" ]
620+ )
591621
592622
593623def workspace_info_setup_parser (subparser ):
@@ -981,7 +1011,8 @@ def workspace_archive_setup_parser(subparser):
9811011 )
9821012
9831013 arguments .add_common_arguments (
984- subparser , ["phases" , "include_phase_dependencies" , "where" , "exclude_where" ]
1014+ subparser ,
1015+ ["phases" , "include_phase_dependencies" , "where" , "exclude_where" , "profile_phases" ],
9851016 )
9861017
9871018
@@ -1024,7 +1055,8 @@ def workspace_mirror_setup_parser(subparser):
10241055 )
10251056
10261057 arguments .add_common_arguments (
1027- subparser , ["phases" , "include_phase_dependencies" , "where" , "exclude_where" ]
1058+ subparser ,
1059+ ["phases" , "include_phase_dependencies" , "where" , "exclude_where" , "profile_phases" ],
10281060 )
10291061
10301062
0 commit comments