Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
/ corefx Public archive

Commit

Permalink
Move AsyncCausality to shared partition (dotnet/coreclr#22062)
Browse files Browse the repository at this point in the history
* Move AsyncCausality to shared partition

* Set FeatureAsyncCausalityTracer property

Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
  • Loading branch information
marek-safar authored and stephentoub committed Jan 18, 2019
1 parent 19d609f commit 88a9124
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// 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.Threading.Tasks;
using System.Runtime.CompilerServices;

namespace Internal.Threading.Tasks
{
//
// An internal contract that exposes just enough async debugger support needed by the AsTask() extension methods in the WindowsRuntimeSystemExtensions class.
//
public static class AsyncCausalitySupport
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void AddToActiveTasks(Task task)
{
if (Task.s_asyncDebuggingEnabled)
Task.AddToActiveTasks(task);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void RemoveFromActiveTasks(Task task)
{
if (Task.s_asyncDebuggingEnabled)
Task.RemoveFromActiveTasks(task.Id);
}

public static bool LoggingOn
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
return AsyncCausalityTracer.LoggingOn;
}
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void TraceOperationCreation(Task task, string operationName)
{
AsyncCausalityTracer.TraceOperationCreation(CausalityTraceLevel.Required, task.Id, operationName, 0);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void TraceOperationCompletedSuccess(Task task)
{
AsyncCausalityTracer.TraceOperationCompletion(CausalityTraceLevel.Required, task.Id, AsyncCausalityStatus.Completed);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void TraceOperationCompletedError(Task task)
{
AsyncCausalityTracer.TraceOperationCompletion(CausalityTraceLevel.Required, task.Id, AsyncCausalityStatus.Error);
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Internal\IO\File.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Internal\Padding.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Internal\Runtime\CompilerServices\Unsafe.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Internal\Threading\Tasks\AsyncCausalitySupport.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\SafeHandles\CriticalHandleMinusOneIsInvalid.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\SafeHandles\CriticalHandleZeroOrMinusOneIsInvalid.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\SafeHandles\SafeHandleMinusOneIsInvalid.cs" />
Expand Down Expand Up @@ -973,6 +974,9 @@
<Compile Include="$(MSBuildThisFileDirectory)System\Security\SafeBSTRHandle.cs" />
<Compile Include="$(MSBuildThisFileDirectory)System\Security\SecureString.Windows.cs" />
</ItemGroup>
<ItemGroup Condition="'$(FeatureAsyncCausalityTracer)' != 'true'">
<Compile Include="$(MSBuildThisFileDirectory)System\Threading\Tasks\AsyncCausalityTracer.Noop.cs" />
</ItemGroup>
<ItemGroup Condition="$(TargetsWindows) and '$(EnableWinRT)' != 'true'">
<Compile Include="$(MSBuildThisFileDirectory)Internal\Win32\RegistryKey.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Advapi32\Interop.RegCloseKey.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -619,7 +619,7 @@ private void MoveNext(Thread threadPoolThread)

if (loggingOn)
{
AsyncCausalitySupport.TraceSynchronousWorkCompletion();
AsyncCausalityTracer.TraceSynchronousWorkCompletion(CausalityTraceLevel.Required, CausalitySynchronousWork.Execution);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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)
{
}
}
}

0 comments on commit 88a9124

Please sign in to comment.