11__all__ = ['ScorepProfile' ]
22
33import sys
4- import inspect
5- import os .path
6- import scorep .instrumenters .base_instrumenter as base_instrumenter
4+ from scorep .instrumenters .utils import get_module_name , get_file_name
5+ from scorep .instrumenters .scorep_instrumenter import ScorepInstrumenter
76
87try :
98 import threading
@@ -23,133 +22,28 @@ def _unsetprofile():
2322 threading .setprofile (None )
2423
2524
26- class ScorepProfile (base_instrumenter .BaseInstrumenter ):
27- def __init__ (self , scorep_bindings , enable_instrumenter = True ):
28- """
29- @param enable_instrumenter true if the tracing shall be initialised.
30- Please note, that it is still possible to enable the tracing later using register()
31- """
32- global global_instrumenter
33- global_instrumenter = self
34- self .tracer_registered = False
35-
36- self .scorep_bindings = scorep_bindings
37- self .globaltrace = self .globaltrace_lt
38- self .enable_instrumenter = enable_instrumenter
39-
40- def register (self ):
41- self .tracer_registered = True
42- _setprofile (self .globaltrace )
25+ class ScorepProfile (ScorepInstrumenter ):
26+ def _enable_instrumenter (self ):
27+ _setprofile (self ._globaltrace )
4328
44- def unregister (self ):
29+ def _disable_instrumenter (self ):
4530 _unsetprofile ()
46- self .tracer_registered = False
4731
48- def get_registered (self ):
49- return self .tracer_registered
50-
51- def run (self , cmd , globals = None , locals = None ):
52- if globals is None :
53- globals = {}
54- if locals is None :
55- locals = {}
56- if self .enable_instrumenter :
57- self .register ()
58- try :
59- exec (cmd , globals , locals )
60- finally :
61- self .unregister ()
62-
63- def globaltrace_lt (self , frame , why , arg ):
32+ def _globaltrace (self , frame , why , arg ):
6433 """Handler for call events.
6534
6635 If the code block being entered is to be ignored, returns `None',
6736 else returns self.localtrace.
6837 """
6938 if why == 'call' :
7039 code = frame .f_code
71- modulename = base_instrumenter . get_module_name (frame )
40+ modulename = get_module_name (frame )
7241 if not code .co_name == "_unsetprofile" and not modulename [:6 ] == "scorep" :
73- full_file_name = base_instrumenter . get_file_name (frame )
42+ full_file_name = get_file_name (frame )
7443 line_number = code .co_firstlineno
75- self .scorep_bindings .region_begin (
76- modulename , code .co_name , full_file_name , line_number )
77- return
44+ self ._scorep_bindings .region_begin (modulename , code .co_name , full_file_name , line_number )
7845 elif why == 'return' :
7946 code = frame .f_code
80- modulename = base_instrumenter . get_module_name (frame )
47+ modulename = get_module_name (frame )
8148 if not code .co_name == "_unsetprofile" and not modulename [:6 ] == "scorep" :
82- self .scorep_bindings .region_end (modulename , code .co_name )
83- else :
84- return
85-
86- def region_begin (self , module_name , function_name , file_name , line_number ):
87- self .scorep_bindings .region_begin (
88- module_name , function_name , file_name , line_number )
89-
90- def region_end (self , module_name , function_name ):
91- self .scorep_bindings .region_end (module_name , function_name )
92-
93- def rewind_begin (self , name , file_name = None , line_number = None ):
94- """
95- Begin of an Rewind region. If file_name or line_number is None, both will
96- bet determined automatically
97- @param name name of the user region
98- @param file_name file name of the user region
99- @param line_number line number of the user region
100- """
101- if file_name is None or line_number is None :
102- frame = inspect .currentframe ().f_back
103- file_name = frame .f_globals .get ('__file__' , None )
104- line_number = frame .f_lineno
105- if file_name is not None :
106- full_file_name = os .path .abspath (file_name )
107- else :
108- full_file_name = "None"
109-
110- self .scorep_bindings .rewind_begin (name , full_file_name , line_number )
111-
112- def rewind_end (self , name , value ):
113- """
114- End of an Rewind region.
115- @param name name of the user region
116- @param value True or False, whenether the region shall be rewinded or not.
117- """
118- self .scorep_bindings .rewind_end (name , value )
119-
120- def oa_region_begin (self , name , file_name = None , line_number = None ):
121- """
122- Begin of an Online Access region. If file_name or line_number is None, both will
123- bet determined automatically
124- @param name name of the user region
125- @param file_name file name of the user region
126- @param line_number line number of the user region
127- """
128- if file_name is None or line_number is None :
129- frame = inspect .currentframe ().f_back
130- file_name = frame .f_globals .get ('__file__' , None )
131- line_number = frame .f_lineno
132- if file_name is not None :
133- full_file_name = os .path .abspath (file_name )
134- else :
135- full_file_name = "None"
136-
137- self .scorep_bindings .oa_region_begin (name , full_file_name , line_number )
138-
139- def oa_region_end (self , name ):
140- self .scorep_bindings .oa_region_end (name )
141-
142- def user_enable_recording (self ):
143- self .scorep_bindings .enable_recording ()
144-
145- def user_disable_recording (self ):
146- self .scorep_bindings .disable_recording ()
147-
148- def user_parameter_int (self , name , val ):
149- self .scorep_bindings .parameter_int (name , val )
150-
151- def user_parameter_uint (self , name , val ):
152- self .scorep_bindings .parameter_string (name , val )
153-
154- def user_parameter_string (self , name , string ):
155- self .scorep_bindings .parameter_string (name , string )
49+ self ._scorep_bindings .region_end (modulename , code .co_name )
0 commit comments