14
14
for i in range (100 )
15
15
]
16
16
17
+
17
18
class IWideInheritance (* ifaces ):
18
19
"""
19
20
Inherits from 100 unrelated interfaces.
20
21
"""
21
22
23
+
22
24
class WideInheritance (object ):
23
25
pass
26
+
27
+
24
28
classImplements (WideInheritance , IWideInheritance )
25
29
30
+
26
31
def make_deep_inheritance ():
27
32
children = []
28
33
base = Interface
@@ -32,10 +37,14 @@ def make_deep_inheritance():
32
37
children .append (child )
33
38
return children
34
39
40
+
35
41
deep_ifaces = make_deep_inheritance ()
36
42
43
+
37
44
class DeepestInheritance (object ):
38
45
pass
46
+
47
+
39
48
classImplements (DeepestInheritance , deep_ifaces [- 1 ])
40
49
41
50
@@ -58,6 +67,7 @@ def make_implementer(iface):
58
67
classImplements (c , iface )
59
68
return c
60
69
70
+
61
71
implementers = [
62
72
make_implementer (iface )
63
73
for iface in ifaces
@@ -70,6 +80,7 @@ def make_implementer(iface):
70
80
71
81
INNER = 100
72
82
83
+
73
84
def bench_in (loops , o ):
74
85
t0 = pyperf .perf_counter ()
75
86
for _ in range (loops ):
@@ -78,6 +89,7 @@ def bench_in(loops, o):
78
89
79
90
return pyperf .perf_counter () - t0
80
91
92
+
81
93
def bench_sort (loops , objs ):
82
94
import random
83
95
rand = random .Random (8675309 )
@@ -92,6 +104,7 @@ def bench_sort(loops, objs):
92
104
93
105
return pyperf .perf_counter () - t0
94
106
107
+
95
108
def bench_query_adapter (loops , components , objs = providers ):
96
109
components_queryAdapter = components .queryAdapter
97
110
# One time through to prime the caches
@@ -111,16 +124,16 @@ def bench_getattr(loops, name, get=getattr):
111
124
t0 = pyperf .perf_counter ()
112
125
for _ in range (loops ):
113
126
for _ in range (INNER ):
114
- get (Interface , name ) # 1
115
- get (Interface , name ) # 2
116
- get (Interface , name ) # 3
117
- get (Interface , name ) # 4
118
- get (Interface , name ) # 5
119
- get (Interface , name ) # 6
120
- get (Interface , name ) # 7
121
- get (Interface , name ) # 8
122
- get (Interface , name ) # 9
123
- get (Interface , name ) # 10
127
+ get (Interface , name ) # 1
128
+ get (Interface , name ) # 2
129
+ get (Interface , name ) # 3
130
+ get (Interface , name ) # 4
131
+ get (Interface , name ) # 5
132
+ get (Interface , name ) # 6
133
+ get (Interface , name ) # 7
134
+ get (Interface , name ) # 8
135
+ get (Interface , name ) # 9
136
+ get (Interface , name ) # 10
124
137
return pyperf .perf_counter () - t0
125
138
126
139
@@ -168,6 +181,7 @@ def bench_iface_call_w_conform_return_non_none_not_provided(loops):
168
181
iface (inst )
169
182
return pyperf .perf_counter () - t0
170
183
184
+
171
185
def _bench_iface_call_simple (loops , inst ):
172
186
t0 = pyperf .perf_counter ()
173
187
for _ in range (loops ):
@@ -224,28 +238,28 @@ def bench_iface_call_no_conform_provided_deep(loops):
224
238
)
225
239
226
240
runner .bench_time_func (
227
- 'read __module__' , # stored in C, accessed through __getattribute__
241
+ 'read __module__' , # stored in C, accessed through __getattribute__
228
242
bench_getattr ,
229
243
'__module__' ,
230
244
inner_loops = INNER * 10
231
245
)
232
246
233
247
runner .bench_time_func (
234
- 'read __name__' , # stored in C, accessed through PyMemberDef
248
+ 'read __name__' , # stored in C, accessed through PyMemberDef
235
249
bench_getattr ,
236
250
'__name__' ,
237
251
inner_loops = INNER * 10
238
252
)
239
253
240
254
runner .bench_time_func (
241
- 'read __doc__' , # stored in Python instance dictionary directly
255
+ 'read __doc__' , # stored in Python instance dictionary directly
242
256
bench_getattr ,
243
257
'__doc__' ,
244
258
inner_loops = INNER * 10
245
259
)
246
260
247
261
runner .bench_time_func (
248
- 'read providedBy' , # from the class, wrapped into a method object.
262
+ 'read providedBy' , # from the class, wrapped into a method object.
249
263
bench_getattr ,
250
264
'providedBy' ,
251
265
inner_loops = INNER * 10
@@ -258,17 +272,20 @@ def bench_iface_call_no_conform_provided_deep(loops):
258
272
inner_loops = 1
259
273
)
260
274
275
+
261
276
def populate_components ():
262
277
def factory (o ):
263
278
return 42
264
279
265
280
pop_components = Components ()
266
281
for iface in ifaces :
267
282
for other_iface in ifaces :
268
- pop_components .registerAdapter (factory , (iface ,), other_iface , event = False )
283
+ pop_components .registerAdapter (
284
+ factory , (iface ,), other_iface , event = False )
269
285
270
286
return pop_components
271
287
288
+
272
289
runner .bench_time_func (
273
290
'query adapter (all trivial registrations)' ,
274
291
bench_query_adapter ,
0 commit comments