File tree Expand file tree Collapse file tree 6 files changed +154
-0
lines changed Expand file tree Collapse file tree 6 files changed +154
-0
lines changed Original file line number Diff line number Diff line change @@ -64,6 +64,10 @@ set(SWIFT_BENCH_MODULES
64
64
single-source/NSStringConversion
65
65
single-source/NopDeinit
66
66
single-source/ObjectAllocation
67
+ single-source/ObserverClosure
68
+ single-source/ObserverForwarderStruct
69
+ single-source/ObserverPartiallyAppliedMethod
70
+ single-source/ObserverUnappliedMethod
67
71
single-source/OpenClose
68
72
single-source/Phonebook
69
73
single-source/PolymorphicCalls
Original file line number Diff line number Diff line change
1
+
2
+ class Observer {
3
+ @inline ( never)
4
+ func receive( _ value: Int ) {
5
+ }
6
+ }
7
+
8
+ class Signal {
9
+ var observers : [ ( Int ) -> ( ) ] = [ ]
10
+
11
+ func subscribe( _ observer: @escaping ( Int ) -> ( ) ) {
12
+ observers. append ( observer)
13
+ }
14
+
15
+ func send( _ value: Int ) {
16
+ for observer in observers {
17
+ observer ( value)
18
+ }
19
+ }
20
+ }
21
+
22
+ public func run_ObserverClosure( _ iterations: Int ) {
23
+ let signal = Signal ( )
24
+ let observer = Observer ( )
25
+ for _ in 0 ..< 10_000 * iterations {
26
+ signal. subscribe { i in observer. receive ( i) }
27
+ }
28
+ signal. send ( 1 )
29
+ }
Original file line number Diff line number Diff line change
1
+
2
+ class Observer {
3
+ @inline ( never)
4
+ func receive( _ value: Int ) {
5
+ }
6
+ }
7
+
8
+ protocol Sink {
9
+ func receive( _ value: Int )
10
+ }
11
+
12
+ struct Forwarder : Sink {
13
+ let object : Observer
14
+
15
+ func receive( _ value: Int ) {
16
+ object. receive ( value)
17
+ }
18
+ }
19
+
20
+ class Signal {
21
+ var observers : [ Sink ] = [ ]
22
+
23
+ func subscribe( _ sink: Sink ) {
24
+ observers. append ( sink)
25
+ }
26
+
27
+ func send( _ value: Int ) {
28
+ for observer in observers {
29
+ observer. receive ( value)
30
+ }
31
+ }
32
+ }
33
+
34
+ public func run_ObserverForwarderStruct( _ iterations: Int ) {
35
+ let signal = Signal ( )
36
+ let observer = Observer ( )
37
+ for _ in 0 ..< 10_000 * iterations {
38
+ signal. subscribe ( Forwarder ( object: observer) )
39
+ }
40
+ signal. send ( 1 )
41
+ }
Original file line number Diff line number Diff line change
1
+
2
+ class Observer {
3
+ @inline ( never)
4
+ func receive( _ value: Int ) {
5
+ }
6
+ }
7
+
8
+ class Signal {
9
+ var observers : [ ( Int ) -> ( ) ] = [ ]
10
+
11
+ func subscribe( _ observer: @escaping ( Int ) -> ( ) ) {
12
+ observers. append ( observer)
13
+ }
14
+
15
+ func send( _ value: Int ) {
16
+ for observer in observers {
17
+ observer ( value)
18
+ }
19
+ }
20
+ }
21
+
22
+ public func run_ObserverPartiallyAppliedMethod( _ iterations: Int ) {
23
+ let signal = Signal ( )
24
+ let observer = Observer ( )
25
+ for _ in 0 ..< 10_000 * iterations {
26
+ signal. subscribe ( observer. receive)
27
+ }
28
+ signal. send ( 1 )
29
+ }
Original file line number Diff line number Diff line change
1
+
2
+ class Observer {
3
+ @inline ( never)
4
+ func receive( _ value: Int ) {
5
+ }
6
+ }
7
+
8
+ protocol Sink {
9
+ func receive( _ value: Int )
10
+ }
11
+
12
+ struct Forwarder < Object> : Sink {
13
+ let object : Object
14
+ let method : ( Object ) -> ( Int ) -> ( )
15
+
16
+ func receive( _ value: Int ) {
17
+ method ( object) ( value)
18
+ }
19
+ }
20
+
21
+ class Signal {
22
+ var observers : [ Sink ] = [ ]
23
+
24
+ func subscribe( _ sink: Sink ) {
25
+ observers. append ( sink)
26
+ }
27
+
28
+ func send( _ value: Int ) {
29
+ for observer in observers {
30
+ observer. receive ( value)
31
+ }
32
+ }
33
+ }
34
+
35
+ public func run_ObserverUnappliedMethod( _ iterations: Int ) {
36
+ let signal = Signal ( )
37
+ let observer = Observer ( )
38
+ for _ in 0 ..< 10_000 * iterations {
39
+ let forwarder = Forwarder ( object: observer, method: Observer . receive)
40
+ signal. subscribe ( forwarder)
41
+ }
42
+ signal. send ( 1 )
43
+ }
Original file line number Diff line number Diff line change @@ -68,6 +68,10 @@ import ObjectAllocation
68
68
import ObjectiveCBridging
69
69
import ObjectiveCBridgingStubs
70
70
import ObjectiveCNoBridgingStubs
71
+ import ObserverClosure
72
+ import ObserverForwarderStruct
73
+ import ObserverPartiallyAppliedMethod
74
+ import ObserverUnappliedMethod
71
75
import OpenClose
72
76
import Phonebook
73
77
import PolymorphicCalls
@@ -197,6 +201,10 @@ precommitTests = [
197
201
" ObjectiveCBridgeToNSDictionary " : run_ObjectiveCBridgeToNSDictionary,
198
202
" ObjectiveCBridgeToNSSet " : run_ObjectiveCBridgeToNSSet,
199
203
" ObjectiveCBridgeToNSString " : run_ObjectiveCBridgeToNSString,
204
+ " ObserverClosure " : run_ObserverClosure,
205
+ " ObserverForwarderStruct " : run_ObserverForwarderStruct,
206
+ " ObserverPartiallyAppliedMethod " : run_ObserverPartiallyAppliedMethod,
207
+ " ObserverUnappliedMethod " : run_ObserverUnappliedMethod,
200
208
" OpenClose " : run_OpenClose,
201
209
" Phonebook " : run_Phonebook,
202
210
" PolymorphicCalls " : run_PolymorphicCalls,
You can’t perform that action at this time.
0 commit comments