22import scorep .instrumenters .scorep_profile
33import scorep .instrumenters .scorep_trace
44
5+ import inspect
6+ import os
7+
58global_instrumenter = None
69
710
@@ -55,24 +58,42 @@ class enable():
5558 """
5659 Context manager to enable tracing in a certain region:
5760 ```
58- with enable():
61+ with enable(region_name=None ):
5962 do stuff
6063 ```
6164 This overides --no-instrumenter (--nopython leagacy)
65+ @param region_name: if a region name is given, the region the contextmanager is active will be marked in the trace or profile
6266 """
6367
64- def __init__ (self ):
65- pass
68+ def __init__ (self , region_name = None ):
69+ self . region_name = region_name
6670
6771 def __enter__ (self ):
6872 self .tracer_registered = scorep .instrumenter .get_instrumenter ().get_registered ()
6973 if not self .tracer_registered :
74+ if self .region_name :
75+ self .module_name = "user_instrumenter"
76+ frame = inspect .currentframe ().f_back
77+ file_name = frame .f_globals .get ('__file__' , None )
78+ line_number = frame .f_lineno
79+ if file_name is not None :
80+ full_file_name = os .path .abspath (file_name )
81+ else :
82+ full_file_name = "None"
83+
84+ scorep .instrumenter .get_instrumenter ().region_begin (
85+ self .module_name , self .region_name , full_file_name , line_number )
86+
7087 scorep .instrumenter .get_instrumenter ().register ()
7188
7289 def __exit__ (self , exc_type , exc_value , traceback ):
7390 if not self .tracer_registered :
7491 scorep .instrumenter .get_instrumenter ().unregister ()
7592
93+ if self .region_name is not None :
94+ scorep .instrumenter .get_instrumenter ().region_end (
95+ self .module_name , self .region_name )
96+
7697
7798class disable ():
7899 """
@@ -82,16 +103,34 @@ class disable():
82103 do stuff
83104 ```
84105 This overides --no-instrumenter (--nopython leagacy)
106+ @param region_name: if a region name is given, the region the contextmanager is active will be marked in the trace or profile
85107 """
86108
87- def __init__ (self ):
88- pass
109+ def __init__ (self , region_name = None ):
110+ self . region_name = region_name
89111
90112 def __enter__ (self ):
91113 self .tracer_registered = scorep .instrumenter .get_instrumenter ().get_registered ()
92114 if self .tracer_registered :
93115 scorep .instrumenter .get_instrumenter ().unregister ()
94116
117+ if self .region_name is not None :
118+ self .module_name = "user_instrumenter"
119+ frame = inspect .currentframe ().f_back
120+ file_name = frame .f_globals .get ('__file__' , None )
121+ line_number = frame .f_lineno
122+ if file_name is not None :
123+ full_file_name = os .path .abspath (file_name )
124+ else :
125+ full_file_name = "None"
126+
127+ scorep .instrumenter .get_instrumenter ().region_begin (
128+ self .module_name , self .region_name , full_file_name , line_number )
129+
95130 def __exit__ (self , exc_type , exc_value , traceback ):
96131 if self .tracer_registered :
132+ if self .region_name is not None :
133+ scorep .instrumenter .get_instrumenter ().region_end (
134+ self .module_name , self .region_name )
135+
97136 scorep .instrumenter .get_instrumenter ().register ()
0 commit comments