@@ -101,8 +101,8 @@ package struct Signpost {
101
101
#if canImport(Darwin)
102
102
switch style {
103
103
case let . kdebug( code) :
104
- return kdebug_is_enabled ( UInt32 ( code) )
105
- case let . os_log( name ) :
104
+ return kdebug_is_enabled ( UInt32 ( OSSignpostType . event . rawValue & 0xfc ) | ( UInt32 ( code) << 2 ) & 0x3fc | 0x14110000 )
105
+ case . os_log:
106
106
guard kdebug_is_enabled ( UInt32 ( OSSignpostType . event. rawValue & 0xfc ) | 0x14110000 ) else {
107
107
return false
108
108
}
@@ -115,44 +115,107 @@ package struct Signpost {
115
115
116
116
// TODO
117
117
@_transparent
118
- @inline ( __always)
119
- package func traceInterval< R> (
120
- object: AnyObject ? = nil ,
118
+ package func traceInterval< T> (
119
+ object: AnyObject ? ,
121
120
_ message: StaticString ? ,
122
- closure: ( ) -> R
123
- ) -> R {
121
+ closure: ( ) -> T
122
+ ) -> T {
124
123
guard isEnabled else {
125
124
return closure ( )
126
125
}
127
- // TODO
128
- return closure ( )
126
+ let id = OSSignpostID . makeExclusiveID ( object)
127
+ switch style {
128
+ case let . kdebug( code) :
129
+ kdebug_trace ( UInt32 ( code) << 2 | ( UInt32 ( OSSignpostType . begin. rawValue & 0xfc ) | 0x14110000 ) , id. rawValue, 0 , 0 , 0 )
130
+ defer { kdebug_trace ( UInt32 ( code) << 2 | ( UInt32 ( OSSignpostType . end. rawValue & 0xfc ) | 0x14110000 ) , id. rawValue, 0 , 0 , 0 ) }
131
+ return closure ( )
132
+ case let . os_log( name) :
133
+ if let message {
134
+ os_signpost ( . begin, log: _signpostLog, name: name, signpostID: id, message, [ ] )
135
+ } else {
136
+ os_signpost ( . begin, log: _signpostLog, name: name, signpostID: id)
137
+ }
138
+ defer { os_signpost ( . end, log: _signpostLog, name: name, signpostID: id) }
139
+ return closure ( )
140
+ }
129
141
}
130
142
131
- // TODO
132
143
@_transparent
133
- @inline ( __always)
134
- package func traceInterval< R> (
144
+ package func traceInterval< T> (
135
145
object: AnyObject ? = nil ,
136
- _ message: StaticString ? ,
137
- _ arguments : @autoclosure ( ) -> [ CVarArg ] ,
138
- closure: ( ) -> R
139
- ) -> R {
146
+ _ message: StaticString ,
147
+ _ args : @autoclosure ( ) -> [ any CVarArg ] ,
148
+ closure: ( ) -> T
149
+ ) -> T {
140
150
guard isEnabled else {
141
151
return closure ( )
142
152
}
153
+ let id = OSSignpostID . makeExclusiveID ( object)
154
+ switch style {
155
+ case let . kdebug( code) :
156
+ // FIXME: _primitive
157
+ print ( code)
158
+ return closure ( )
159
+ case let . os_log( name) :
160
+ os_signpost ( . begin, log: _signpostLog, name: name, signpostID: id, message, args ( ) )
161
+ defer { os_signpost ( . end, log: _signpostLog, name: name, signpostID: id) }
162
+ return closure ( )
163
+ }
164
+ }
165
+
166
+ @_transparent
167
+ package func traceEvent(
168
+ type: OSSignpostType ,
169
+ object: AnyObject ? ,
170
+ _ message: StaticString ,
171
+ _ args: @autoclosure ( ) -> [ any CVarArg ]
172
+ ) {
173
+ guard isEnabled else {
174
+ return
175
+ }
176
+ #if canImport(Darwin)
177
+ let id = OSSignpostID . makeExclusiveID ( object)
178
+ let args = args ( )
179
+
180
+ switch style {
181
+ case let . kdebug( code) :
182
+ // FIXME: _primitive
183
+ print ( code)
184
+ return
185
+ case let . os_log( name) :
186
+ os_signpost ( type, log: _signpostLog, name: name, signpostID: id, message, args)
187
+ }
188
+ #endif
189
+ }
190
+
191
+ #if canImport(Darwin)
192
+ private func _primitive(
193
+ _ type: OSSignpostType ,
194
+ log: OSLog ,
195
+ signpostID: OSSignpostID ,
196
+ _ message: StaticString ? ,
197
+ _ arguments: [ any CVarArg ] ?
198
+ ) {
143
199
// TODO
144
- return closure ( )
145
200
}
201
+ #endif
146
202
}
147
203
148
- // TODO
149
- @_transparent
150
- @inline ( __always)
151
- package func traceRuleBody< R> ( _ type: Any . Type , body: ( ) -> R ) -> R {
152
- Signpost . bodyInvoke. traceInterval (
153
- " %{public}@.body [in %{public}@] " ,
154
- [ OGTypeID ( type) . description, Tracing . libraryName ( defining: type) ]
155
- ) {
156
- body ( )
204
+ #if canImport(Darwin)
205
+ extension OSSignpostID {
206
+ private static let continuation = OSSignpostID ( 0x0ea89ce2 )
207
+
208
+ @inline ( __always)
209
+ static func makeExclusiveID( _ object: AnyObject ? ) -> OSSignpostID {
210
+ if let object {
211
+ OSSignpostID ( log: _signpostLog, object: object)
212
+ } else {
213
+ . exclusive
214
+ }
157
215
}
158
216
}
217
+ #endif
218
+
219
+ private func withKDebugValues( _ code: UInt32 , _ args: [ ( any CVarArg ) ? ] , closure: ( ( [ UInt64 ] ) -> Void ) ) {
220
+ // TODO
221
+ }
0 commit comments