|
10 | 10 |
|
11 | 11 | using SR=MS.Internal.PresentationCore.SR; |
12 | 12 | using MS.Internal; |
| 13 | +using MS.Internal.KnownBoxes; |
13 | 14 |
|
14 | 15 | namespace System.Windows |
15 | 16 | { |
@@ -177,27 +178,28 @@ private void InvokeHandlersImpl(object source, RoutedEventArgs args, bool reRais |
177 | 178 |
|
178 | 179 | // Invoke listeners |
179 | 180 |
|
180 | | - if( TraceRoutedEvent.IsEnabled ) |
| 181 | + var traceRoutedEventIsEnabled = TraceRoutedEvent.IsEnabled; |
| 182 | + if ( traceRoutedEventIsEnabled ) |
181 | 183 | { |
| 184 | + _traceArguments ??= new object[3]; |
| 185 | + _traceArguments[0] = _routeItemList[i].Target; |
| 186 | + _traceArguments[1] = args; |
| 187 | + _traceArguments[2] = BooleanBoxes.Box(args.Handled); |
182 | 188 | TraceRoutedEvent.Trace( |
183 | 189 | TraceEventType.Start, |
184 | | - TraceRoutedEvent.InvokeHandlers, |
185 | | - _routeItemList[i].Target, |
186 | | - args, |
187 | | - args.Handled ); |
188 | | - |
| 190 | + TraceRoutedEvent.InvokeHandlers, |
| 191 | + _traceArguments); |
189 | 192 | } |
190 | 193 |
|
191 | 194 | _routeItemList[i].InvokeHandler(args); |
192 | 195 |
|
193 | | - if( TraceRoutedEvent.IsEnabled ) |
| 196 | + if( traceRoutedEventIsEnabled ) |
194 | 197 | { |
| 198 | + _traceArguments[2] = BooleanBoxes.Box(args.Handled); |
195 | 199 | TraceRoutedEvent.Trace( |
196 | 200 | TraceEventType.Stop, |
197 | | - TraceRoutedEvent.InvokeHandlers, |
198 | | - _routeItemList[i].Target, |
199 | | - args, |
200 | | - args.Handled ); |
| 201 | + TraceRoutedEvent.InvokeHandlers, |
| 202 | + _traceArguments); |
201 | 203 | } |
202 | 204 |
|
203 | 205 |
|
@@ -248,27 +250,29 @@ private void InvokeHandlersImpl(object source, RoutedEventArgs args, bool reRais |
248 | 250 | } |
249 | 251 |
|
250 | 252 |
|
251 | | - if( TraceRoutedEvent.IsEnabled ) |
| 253 | + var traceRoutedEventIsEnabled = TraceRoutedEvent.IsEnabled; |
| 254 | + if ( traceRoutedEventIsEnabled ) |
252 | 255 | { |
| 256 | + _traceArguments ??= new object[3]; |
| 257 | + _traceArguments[0] = _routeItemList[i].Target; |
| 258 | + _traceArguments[1] = args; |
| 259 | + _traceArguments[2] = BooleanBoxes.Box(args.Handled); |
253 | 260 | TraceRoutedEvent.Trace( |
254 | 261 | TraceEventType.Start, |
255 | | - TraceRoutedEvent.InvokeHandlers, |
256 | | - _routeItemList[i].Target, |
257 | | - args, |
258 | | - args.Handled ); |
| 262 | + TraceRoutedEvent.InvokeHandlers, |
| 263 | + _traceArguments); |
259 | 264 | } |
260 | 265 |
|
261 | 266 | // Invoke listeners |
262 | 267 | _routeItemList[i].InvokeHandler(args); |
263 | 268 |
|
264 | | - if( TraceRoutedEvent.IsEnabled ) |
| 269 | + if (traceRoutedEventIsEnabled) |
265 | 270 | { |
| 271 | + _traceArguments[2] = BooleanBoxes.Box(args.Handled); |
266 | 272 | TraceRoutedEvent.Trace( |
267 | 273 | TraceEventType.Stop, |
268 | | - TraceRoutedEvent.InvokeHandlers, |
269 | | - _routeItemList[i].Target, |
270 | | - args, |
271 | | - args.Handled ); |
| 274 | + TraceRoutedEvent.InvokeHandlers, |
| 275 | + _traceArguments); |
272 | 276 | } |
273 | 277 |
|
274 | 278 | } |
@@ -536,6 +540,9 @@ internal void Clear() |
536 | 540 | // Stores Source Items for separated trees |
537 | 541 | private FrugalStructList<SourceItem> _sourceItemList; |
538 | 542 |
|
| 543 | + // Stores arguments that are passed to TraceRoutedEvent.Trace (to reduce allocations) |
| 544 | + private object[] _traceArguments; |
| 545 | + |
539 | 546 | #endregion Data |
540 | 547 | } |
541 | 548 | } |
|
0 commit comments