1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using TaskTraceCallbacks = Internal.Runtime.Augments.TaskTraceCallbacks; 6 7 namespace Internal.Threading.Tasks.Tracing 8 { 9 /// <summary> 10 /// Helper class for reporting <see cref="System.Threading.Tasks.Task"/>-related events. 11 /// Calls are forwarded to an instance of <see cref="TaskTraceCallbacks"/>, if one has been 12 /// provided. 13 /// </summary> 14 public static class TaskTrace 15 { 16 private static TaskTraceCallbacks s_callbacks; 17 18 public static bool Enabled 19 { 20 get 21 { 22 TaskTraceCallbacks callbacks = s_callbacks; 23 if (callbacks == null) 24 return false; 25 if (!callbacks.Enabled) 26 return false; 27 return true; 28 } 29 } 30 Initialize(TaskTraceCallbacks callbacks)31 public static void Initialize(TaskTraceCallbacks callbacks) 32 { 33 s_callbacks = callbacks; 34 } 35 TaskWaitBegin_Asynchronous( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID)36 public static void TaskWaitBegin_Asynchronous( 37 int OriginatingTaskSchedulerID, 38 int OriginatingTaskID, 39 int TaskID) 40 { 41 TaskTraceCallbacks callbacks = s_callbacks; 42 if (callbacks == null) 43 return; 44 callbacks.TaskWaitBegin_Asynchronous(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID); 45 } 46 TaskWaitBegin_Synchronous( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID)47 public static void TaskWaitBegin_Synchronous( 48 int OriginatingTaskSchedulerID, 49 int OriginatingTaskID, 50 int TaskID) 51 { 52 TaskTraceCallbacks callbacks = s_callbacks; 53 if (callbacks == null) 54 return; 55 callbacks.TaskWaitBegin_Synchronous(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID); 56 } 57 TaskWaitEnd( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID)58 public static void TaskWaitEnd( 59 int OriginatingTaskSchedulerID, 60 int OriginatingTaskID, 61 int TaskID) 62 { 63 TaskTraceCallbacks callbacks = s_callbacks; 64 if (callbacks == null) 65 return; 66 callbacks.TaskWaitEnd(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID); 67 } 68 TaskScheduled( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID, int CreatingTaskID, int TaskCreationOptions)69 public static void TaskScheduled( 70 int OriginatingTaskSchedulerID, 71 int OriginatingTaskID, 72 int TaskID, 73 int CreatingTaskID, 74 int TaskCreationOptions) 75 { 76 TaskTraceCallbacks callbacks = s_callbacks; 77 if (callbacks == null) 78 return; 79 callbacks.TaskScheduled(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID, CreatingTaskID, TaskCreationOptions); 80 } 81 TaskStarted( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID)82 public static void TaskStarted( 83 int OriginatingTaskSchedulerID, 84 int OriginatingTaskID, 85 int TaskID) 86 { 87 TaskTraceCallbacks callbacks = s_callbacks; 88 if (callbacks == null) 89 return; 90 callbacks.TaskStarted(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID); 91 } 92 TaskCompleted( int OriginatingTaskSchedulerID, int OriginatingTaskID, int TaskID, bool IsExceptional)93 public static void TaskCompleted( 94 int OriginatingTaskSchedulerID, 95 int OriginatingTaskID, 96 int TaskID, 97 bool IsExceptional) 98 { 99 TaskTraceCallbacks callbacks = s_callbacks; 100 if (callbacks == null) 101 return; 102 callbacks.TaskCompleted(OriginatingTaskSchedulerID, OriginatingTaskID, TaskID, IsExceptional); 103 } 104 } 105 }