Skip to content

Commit 2e8c136

Browse files
authored
Directly import C extension (#82)
Avoid using `importlib` to load the binding in __main__.py
1 parent 22e31dc commit 2e8c136

6 files changed

Lines changed: 39 additions & 50 deletions

File tree

scorep/__main__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import os
22
import sys
3-
import importlib
43

54
import scorep.instrumenter
65
import scorep.subsystem
@@ -83,15 +82,12 @@ def scorep_main(argv=None):
8382
else:
8483
scorep.subsystem.reset_pereload()
8584

86-
scorep_bindings = importlib.import_module("scorep.scorep_bindings")
87-
8885
# everything is ready
8986
sys.argv = prog_argv
9087
progname = prog_argv[0]
9188
sys.path[0] = os.path.split(progname)[0]
9289

93-
tracer = scorep.instrumenter.get_instrumenter(scorep_bindings,
94-
not no_instrumenter,
90+
tracer = scorep.instrumenter.get_instrumenter(not no_instrumenter,
9591
instrumenter_type)
9692
try:
9793
with open(progname) as fp:

scorep/instrumenter.py

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,31 @@
1-
import scorep.instrumenters.dummy
2-
import scorep.instrumenters.scorep_profile
3-
import scorep.instrumenters.scorep_trace
4-
51
import inspect
62
import os
73

84
global_instrumenter = None
95

106

11-
def get_instrumenter(bindings=None,
12-
enable_instrumenter=False,
7+
def get_instrumenter(enable_instrumenter=False,
138
instrumenter_type="dummy"):
149
"""
1510
returns an instrumenter
1611
17-
@param bindings the c/c++ scorep bindings
1812
@param enable_instrumenter True if the Instrumenter should be enabled when run is called
1913
@param instrumenter_type which python tracing interface to use.
2014
Currently available: `profile` (default), `trace` and `dummy`
2115
"""
2216
global global_instrumenter
2317
if global_instrumenter is None:
2418
if instrumenter_type == "profile":
25-
global_instrumenter = scorep.instrumenters.scorep_profile.ScorepProfile(
26-
bindings, enable_instrumenter)
19+
from scorep.instrumenters.scorep_profile import ScorepProfile
20+
global_instrumenter = ScorepProfile(enable_instrumenter)
2721
elif instrumenter_type == "trace":
28-
global_instrumenter = scorep.instrumenters.scorep_trace.ScorepTrace(
29-
bindings, enable_instrumenter)
22+
from scorep.instrumenters.scorep_trace import ScorepTrace
23+
global_instrumenter = ScorepTrace(enable_instrumenter)
3024
elif instrumenter_type == "dummy":
31-
global_instrumenter = scorep.instrumenters.dummy.ScorepDummy(
32-
enable_instrumenter)
25+
from scorep.instrumenters.dummy import ScorepDummy
26+
global_instrumenter = ScorepDummy(enable_instrumenter)
3327
else:
34-
raise RuntimeError(
35-
"instrumenter_type \"{}\" unkown".format(instrumenter_type))
28+
raise RuntimeError('instrumenter_type "{}" unkown'.format(instrumenter_type))
3629

3730
return global_instrumenter
3831

@@ -69,8 +62,7 @@ def __init__(self, region_name=None):
6962
self.region_name = region_name
7063

7164
def __enter__(self):
72-
self.tracer_registered = scorep.instrumenter.get_instrumenter(
73-
).get_registered()
65+
self.tracer_registered = get_instrumenter().get_registered()
7466
if not self.tracer_registered:
7567
if self.region_name:
7668
self.module_name = "user_instrumenter"
@@ -82,18 +74,18 @@ def __enter__(self):
8274
else:
8375
full_file_name = "None"
8476

85-
scorep.instrumenter.get_instrumenter().region_begin(
77+
get_instrumenter().region_begin(
8678
self.module_name, self.region_name, full_file_name,
8779
line_number)
8880

89-
scorep.instrumenter.get_instrumenter().register()
81+
get_instrumenter().register()
9082

9183
def __exit__(self, exc_type, exc_value, traceback):
9284
if not self.tracer_registered:
93-
scorep.instrumenter.get_instrumenter().unregister()
85+
get_instrumenter().unregister()
9486

9587
if self.region_name is not None:
96-
scorep.instrumenter.get_instrumenter().region_end(
88+
get_instrumenter().region_end(
9789
self.module_name, self.region_name)
9890

9991

@@ -111,10 +103,9 @@ def __init__(self, region_name=None):
111103
self.region_name = region_name
112104

113105
def __enter__(self):
114-
self.tracer_registered = scorep.instrumenter.get_instrumenter(
115-
).get_registered()
106+
self.tracer_registered = get_instrumenter().get_registered()
116107
if self.tracer_registered:
117-
scorep.instrumenter.get_instrumenter().unregister()
108+
get_instrumenter().unregister()
118109

119110
if self.region_name is not None:
120111
self.module_name = "user_instrumenter"
@@ -126,14 +117,14 @@ def __enter__(self):
126117
else:
127118
full_file_name = "None"
128119

129-
scorep.instrumenter.get_instrumenter().region_begin(
120+
get_instrumenter().region_begin(
130121
self.module_name, self.region_name, full_file_name,
131122
line_number)
132123

133124
def __exit__(self, exc_type, exc_value, traceback):
134125
if self.tracer_registered:
135126
if self.region_name is not None:
136-
scorep.instrumenter.get_instrumenter().region_end(
127+
get_instrumenter().region_end(
137128
self.module_name, self.region_name)
138129

139-
scorep.instrumenter.get_instrumenter().register()
130+
get_instrumenter().register()

scorep/instrumenters/dummy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
class ScorepDummy(base_instrumenter.BaseInstrumenter):
7-
def __init__(self, scorep_bindings=None, enable_instrumenter=True):
7+
def __init__(self, enable_instrumenter=True):
88
pass
99

1010
def register(self):

scorep/instrumenters/scorep_instrumenter.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
import inspect
33
import os
44
from scorep.instrumenters import base_instrumenter
5+
from scorep import scorep_bindings
56

67

78
class ScorepInstrumenter(base_instrumenter.BaseInstrumenter):
89
"""Base class for all instrumenters using Score-P"""
910

10-
def __init__(self, scorep_bindings, enable_instrumenter=True):
11+
def __init__(self, enable_instrumenter=True):
1112
"""
1213
@param enable_instrumenter true if the tracing shall be initialised.
1314
Please note, that it is still possible to enable the tracing later using register()
1415
"""
15-
self._scorep_bindings = scorep_bindings
1616
self._tracer_registered = False
1717
self._enabled = enable_instrumenter
1818

@@ -58,12 +58,12 @@ def run(self, cmd, globals=None, locals=None):
5858

5959
def region_begin(self, module_name, function_name, file_name, line_number):
6060
"""Record a region begin event"""
61-
self._scorep_bindings.region_begin(
61+
scorep_bindings.region_begin(
6262
module_name, function_name, file_name, line_number)
6363

6464
def region_end(self, module_name, function_name):
6565
"""Record a region end event"""
66-
self._scorep_bindings.region_end(module_name, function_name)
66+
scorep_bindings.region_end(module_name, function_name)
6767

6868
def rewind_begin(self, name, file_name=None, line_number=None):
6969
"""
@@ -82,15 +82,15 @@ def rewind_begin(self, name, file_name=None, line_number=None):
8282
else:
8383
full_file_name = "None"
8484

85-
self._scorep_bindings.rewind_begin(name, full_file_name, line_number)
85+
scorep_bindings.rewind_begin(name, full_file_name, line_number)
8686

8787
def rewind_end(self, name, value):
8888
"""
8989
End of an Rewind region.
9090
@param name name of the user region
9191
@param value True or False, whenether the region shall be rewinded or not.
9292
"""
93-
self._scorep_bindings.rewind_end(name, value)
93+
scorep_bindings.rewind_end(name, value)
9494

9595
def oa_region_begin(self, name, file_name=None, line_number=None):
9696
"""
@@ -109,28 +109,28 @@ def oa_region_begin(self, name, file_name=None, line_number=None):
109109
else:
110110
full_file_name = "None"
111111

112-
self._scorep_bindings.oa_region_begin(name, full_file_name, line_number)
112+
scorep_bindings.oa_region_begin(name, full_file_name, line_number)
113113

114114
def oa_region_end(self, name):
115115
"""End an Online Access region."""
116-
self._scorep_bindings.oa_region_end(name)
116+
scorep_bindings.oa_region_end(name)
117117

118118
def user_enable_recording(self):
119119
"""Enable writing of trace events in ScoreP"""
120-
self._scorep_bindings.enable_recording()
120+
scorep_bindings.enable_recording()
121121

122122
def user_disable_recording(self):
123123
"""Disable writing of trace events in ScoreP"""
124-
self._scorep_bindings.disable_recording()
124+
scorep_bindings.disable_recording()
125125

126126
def user_parameter_int(self, name, val):
127127
"""Record a parameter of type integer"""
128-
self._scorep_bindings.parameter_int(name, val)
128+
scorep_bindings.parameter_int(name, val)
129129

130130
def user_parameter_uint(self, name, val):
131131
"""Record a parameter of type unsigned integer"""
132-
self._scorep_bindings.parameter_string(name, val)
132+
scorep_bindings.parameter_string(name, val)
133133

134134
def user_parameter_string(self, name, string):
135135
"""Record a parameter of type string"""
136-
self._scorep_bindings.parameter_string(name, string)
136+
scorep_bindings.parameter_string(name, string)

scorep/instrumenters/scorep_profile.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import sys
44
from scorep.instrumenters.utils import get_module_name, get_file_name
55
from scorep.instrumenters.scorep_instrumenter import ScorepInstrumenter
6+
from scorep import scorep_bindings
67

78
try:
89
import threading
@@ -41,9 +42,9 @@ def _globaltrace(self, frame, why, arg):
4142
if not code.co_name == "_unsetprofile" and not modulename[:6] == "scorep":
4243
full_file_name = get_file_name(frame)
4344
line_number = code.co_firstlineno
44-
self._scorep_bindings.region_begin(modulename, code.co_name, full_file_name, line_number)
45+
scorep_bindings.region_begin(modulename, code.co_name, full_file_name, line_number)
4546
elif why == 'return':
4647
code = frame.f_code
4748
modulename = get_module_name(frame)
4849
if not code.co_name == "_unsetprofile" and not modulename[:6] == "scorep":
49-
self._scorep_bindings.region_end(modulename, code.co_name)
50+
scorep_bindings.region_end(modulename, code.co_name)

scorep/instrumenters/scorep_trace.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import sys
44
from scorep.instrumenters.utils import get_module_name, get_file_name
55
from scorep.instrumenters.scorep_instrumenter import ScorepInstrumenter
6+
from scorep import scorep_bindings
67

78
try:
89
import threading
@@ -39,13 +40,13 @@ def _globaltrace(self, frame, why, arg):
3940
if not code.co_name == "_unsettrace" and not modulename[:6] == "scorep":
4041
full_file_name = get_file_name(frame)
4142
line_number = code.co_firstlineno
42-
self._scorep_bindings.region_begin(modulename, code.co_name, full_file_name, line_number)
43+
scorep_bindings.region_begin(modulename, code.co_name, full_file_name, line_number)
4344
return self._localtrace
4445
return None
4546

4647
def _localtrace(self, frame, why, arg):
4748
if why == 'return':
4849
code = frame.f_code
4950
modulename = get_module_name(frame)
50-
self._scorep_bindings.region_end(modulename, code.co_name)
51+
scorep_bindings.region_end(modulename, code.co_name)
5152
return self._localtrace

0 commit comments

Comments
 (0)