diff --git a/src/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/System.Private.CoreLib/System.Private.CoreLib.csproj index ef55b658d950..b4575c3c6a37 100644 --- a/src/System.Private.CoreLib/System.Private.CoreLib.csproj +++ b/src/System.Private.CoreLib/System.Private.CoreLib.csproj @@ -121,7 +121,6 @@ - @@ -279,7 +278,6 @@ - @@ -367,6 +365,7 @@ + @@ -428,6 +427,9 @@ true Windows_NT + + true + Silverlight diff --git a/src/System.Private.CoreLib/src/Internal/Threading/Tasks/AsyncCausalitySupport.cs b/src/System.Private.CoreLib/shared/Internal/Threading/Tasks/AsyncCausalitySupport.cs similarity index 72% rename from src/System.Private.CoreLib/src/Internal/Threading/Tasks/AsyncCausalitySupport.cs rename to src/System.Private.CoreLib/shared/Internal/Threading/Tasks/AsyncCausalitySupport.cs index df34a64eff3f..35f4dfe18c4b 100644 --- a/src/System.Private.CoreLib/src/Internal/Threading/Tasks/AsyncCausalitySupport.cs +++ b/src/System.Private.CoreLib/shared/Internal/Threading/Tasks/AsyncCausalitySupport.cs @@ -2,13 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; -using System.Diagnostics; using System.Threading.Tasks; -using System.Collections.Generic; using System.Runtime.CompilerServices; -using AsyncCausalityStatus = System.Threading.Tasks.AsyncCausalityStatus; -using CausalityTraceLevel = System.Threading.Tasks.CausalityTraceLevel; namespace Internal.Threading.Tasks { @@ -57,18 +52,6 @@ public static void TraceOperationCompletedError(Task task) { AsyncCausalityTracer.TraceOperationCompletion(CausalityTraceLevel.Required, task.Id, AsyncCausalityStatus.Error); } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static void TraceSynchronousWorkStart(Task task) - { - AsyncCausalityTracer.TraceSynchronousWorkStart(CausalityTraceLevel.Required, task.Id, CausalitySynchronousWork.Execution); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static void TraceSynchronousWorkCompletion() - { - AsyncCausalityTracer.TraceSynchronousWorkCompletion(CausalityTraceLevel.Required, CausalitySynchronousWork.Execution); - } } } diff --git a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems index b7369c1ddcb7..60e1145966d8 100644 --- a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems +++ b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems @@ -22,6 +22,7 @@ + @@ -970,6 +971,9 @@ + + + diff --git a/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs index aa9d521840f2..51887e2611bc 100644 --- a/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs +++ b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs @@ -578,7 +578,7 @@ private void MoveNext(Thread threadPoolThread) bool loggingOn = AsyncCausalitySupport.LoggingOn; if (loggingOn) { - AsyncCausalitySupport.TraceSynchronousWorkStart(this); + AsyncCausalityTracer.TraceSynchronousWorkStart(CausalityTraceLevel.Required, this.Id, CausalitySynchronousWork.Execution); } ExecutionContext context = Context; @@ -619,7 +619,7 @@ private void MoveNext(Thread threadPoolThread) if (loggingOn) { - AsyncCausalitySupport.TraceSynchronousWorkCompletion(); + AsyncCausalityTracer.TraceSynchronousWorkCompletion(CausalityTraceLevel.Required, CausalitySynchronousWork.Execution); } } diff --git a/src/System.Private.CoreLib/shared/System/Threading/Tasks/AsyncCausalityTracer.Noop.cs b/src/System.Private.CoreLib/shared/System/Threading/Tasks/AsyncCausalityTracer.Noop.cs new file mode 100644 index 000000000000..c3f787b36b77 --- /dev/null +++ b/src/System.Private.CoreLib/shared/System/Threading/Tasks/AsyncCausalityTracer.Noop.cs @@ -0,0 +1,77 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; + +namespace System.Threading.Tasks +{ + internal enum CausalityTraceLevel + { + Required = 0, + Important = 1, + Verbose = 2, + } + + internal enum AsyncCausalityStatus + { + Started = 0, + Completed = 1, + Canceled = 2, + Error = 3, + } + + internal enum CausalityRelation + { + AssignDelegate = 0, + Join = 1, + Choice = 2, + Cancel = 3, + Error = 4, + } + + internal enum CausalitySynchronousWork + { + CompletionNotification = 0, + ProgressNotification = 1, + Execution = 2, + } + + // + // Empty implementation of AsyncCausality events + // + internal static class AsyncCausalityTracer + { + public static bool LoggingOn => false; + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void EnableToETW(bool enabled) + { + } + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void TraceOperationCreation(CausalityTraceLevel traceLevel, int taskId, string operationName, ulong relatedContext) + { + } + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void TraceOperationCompletion(CausalityTraceLevel traceLevel, int taskId, AsyncCausalityStatus status) + { + } + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void TraceOperationRelation(CausalityTraceLevel traceLevel, int taskId, CausalityRelation relation) + { + } + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void TraceSynchronousWorkStart(CausalityTraceLevel traceLevel, int taskId, CausalitySynchronousWork work) + { + } + + [Conditional("NOOP_ASYNCCASUALITYTRACER")] + public static void TraceSynchronousWorkCompletion(CausalityTraceLevel traceLevel, CausalitySynchronousWork work) + { + } + } +} diff --git a/src/System.Private.CoreLib/src/System/Threading/Tasks/AsyncCausalityTracer.cs b/src/System.Private.CoreLib/src/System/Threading/Tasks/AsyncCausalityTracer.cs index b942ecbc28ff..a06b3b8a074e 100644 --- a/src/System.Private.CoreLib/src/System/Threading/Tasks/AsyncCausalityTracer.cs +++ b/src/System.Private.CoreLib/src/System/Threading/Tasks/AsyncCausalityTracer.cs @@ -2,107 +2,67 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -// - -using System; using System.Security; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -#if FEATURE_COMINTEROP using System.Runtime.InteropServices.WindowsRuntime; using WFD = Windows.Foundation.Diagnostics; -#endif namespace System.Threading.Tasks { internal enum CausalityTraceLevel { -#if FEATURE_COMINTEROP Required = WFD.CausalityTraceLevel.Required, Important = WFD.CausalityTraceLevel.Important, Verbose = WFD.CausalityTraceLevel.Verbose -#else - Required, - Important, - Verbose -#endif } internal enum AsyncCausalityStatus { -#if FEATURE_COMINTEROP Canceled = WFD.AsyncCausalityStatus.Canceled, Completed = WFD.AsyncCausalityStatus.Completed, Error = WFD.AsyncCausalityStatus.Error, Started = WFD.AsyncCausalityStatus.Started -#else - Started, - Completed, - Canceled, - Error -#endif } internal enum CausalityRelation { -#if FEATURE_COMINTEROP AssignDelegate = WFD.CausalityRelation.AssignDelegate, Join = WFD.CausalityRelation.Join, Choice = WFD.CausalityRelation.Choice, Cancel = WFD.CausalityRelation.Cancel, Error = WFD.CausalityRelation.Error -#else - AssignDelegate, - Join, - Choice, - Cancel, - Error -#endif } internal enum CausalitySynchronousWork { -#if FEATURE_COMINTEROP CompletionNotification = WFD.CausalitySynchronousWork.CompletionNotification, ProgressNotification = WFD.CausalitySynchronousWork.ProgressNotification, Execution = WFD.CausalitySynchronousWork.Execution -#else - CompletionNotification, - ProgressNotification, - Execution -#endif } internal static class AsyncCausalityTracer { internal static void EnableToETW(bool enabled) { -#if FEATURE_COMINTEROP if (enabled) f_LoggingOn |= Loggers.ETW; else f_LoggingOn &= ~Loggers.ETW; -#endif } internal static bool LoggingOn { get { -#if FEATURE_COMINTEROP return f_LoggingOn != 0; -#else - return false; -#endif } } -#if FEATURE_COMINTEROP //s_PlatformId = {4B0171A6-F3D0-41A0-9B33-02550652B995} private static readonly Guid s_PlatformId = new Guid(0x4B0171A6, 0xF3D0, 0x41A0, 0x9B, 0x33, 0x02, 0x55, 0x06, 0x52, 0xB9, 0x95); @@ -164,7 +124,6 @@ private static void TracingStatusChangedHandler(object sender, WFD.TracingStatus else f_LoggingOn &= ~Loggers.CausalityTracer; } -#endif // // The TraceXXX methods should be called only if LoggingOn property returned true @@ -172,7 +131,6 @@ private static void TracingStatusChangedHandler(object sender, WFD.TracingStatus [MethodImplAttribute(MethodImplOptions.NoInlining)] // Tracking is slow path. Disable inlining for it. internal static void TraceOperationCreation(CausalityTraceLevel traceLevel, int taskId, string operationName, ulong relatedContext) { -#if FEATURE_COMINTEROP try { if ((f_LoggingOn & Loggers.ETW) != 0) @@ -185,13 +143,11 @@ internal static void TraceOperationCreation(CausalityTraceLevel traceLevel, int //view function comment LogAndDisable(ex); } -#endif } [MethodImplAttribute(MethodImplOptions.NoInlining)] internal static void TraceOperationCompletion(CausalityTraceLevel traceLevel, int taskId, AsyncCausalityStatus status) { -#if FEATURE_COMINTEROP try { if ((f_LoggingOn & Loggers.ETW) != 0) @@ -204,13 +160,11 @@ internal static void TraceOperationCompletion(CausalityTraceLevel traceLevel, in //view function comment LogAndDisable(ex); } -#endif } [MethodImplAttribute(MethodImplOptions.NoInlining)] internal static void TraceOperationRelation(CausalityTraceLevel traceLevel, int taskId, CausalityRelation relation) { -#if FEATURE_COMINTEROP try { if ((f_LoggingOn & Loggers.ETW) != 0) @@ -223,13 +177,11 @@ internal static void TraceOperationRelation(CausalityTraceLevel traceLevel, int //view function comment LogAndDisable(ex); } -#endif } [MethodImplAttribute(MethodImplOptions.NoInlining)] internal static void TraceSynchronousWorkStart(CausalityTraceLevel traceLevel, int taskId, CausalitySynchronousWork work) { -#if FEATURE_COMINTEROP try { if ((f_LoggingOn & Loggers.ETW) != 0) @@ -242,13 +194,11 @@ internal static void TraceSynchronousWorkStart(CausalityTraceLevel traceLevel, i //view function comment LogAndDisable(ex); } -#endif } [MethodImplAttribute(MethodImplOptions.NoInlining)] internal static void TraceSynchronousWorkCompletion(CausalityTraceLevel traceLevel, CausalitySynchronousWork work) { -#if FEATURE_COMINTEROP try { if ((f_LoggingOn & Loggers.ETW) != 0) @@ -261,10 +211,8 @@ internal static void TraceSynchronousWorkCompletion(CausalityTraceLevel traceLev //view function comment LogAndDisable(ex); } -#endif } -#if FEATURE_COMINTEROP //fix for 796185: leaking internal exceptions to customers, //we should catch and log exceptions but never propagate them. private static void LogAndDisable(Exception ex) @@ -272,7 +220,6 @@ private static void LogAndDisable(Exception ex) f_LoggingOn = 0; Debugger.Log(0, "AsyncCausalityTracer", ex.ToString()); } -#endif private static ulong GetOperationId(uint taskId) {