Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -494,13 +494,13 @@ internal unsafe bool HandleSuspended(ref RuntimeAsyncAwaitState state)
return false;
}

internal void InstrumentedHandleSuspended(AsyncInstrumentation.Flags flags, ref RuntimeAsyncAwaitState state, Continuation? newContinuation = null)
internal void InstrumentedHandleSuspended(AsyncInstrumentation.Flags flags, ref RuntimeAsyncAwaitState state)
{
if (AsyncInstrumentation.IsEnabled.AsyncDebugger(flags))
{
Continuation? nextContinuation = t_runtimeAsyncAwaitState.SentinelContinuation!.Next;

AsyncDebugger.HandleSuspended(nextContinuation, newContinuation);
AsyncDebugger.HandleSuspended(nextContinuation);

if (!HandleSuspended(ref state))
{
Expand Down Expand Up @@ -665,7 +665,7 @@ private unsafe void InstrumentedDispatchContinuations(AsyncInstrumentation.Flags
{
newContinuation.Next = nextContinuation;
RuntimeAsyncInstrumentationHelpers.SuspendRuntimeAsyncContext(flags, curContinuation, newContinuation);
InstrumentedHandleSuspended(flags, ref awaitState, newContinuation);
InstrumentedHandleSuspended(flags, ref awaitState);

awaitState.Pop();
refDispatcherInfo = asyncDispatcherInfo.Next;
Expand Down Expand Up @@ -723,8 +723,7 @@ private unsafe void InstrumentedDispatchContinuations(AsyncInstrumentation.Flags

if (QueueContinuationFollowUpActionIfNecessary(asyncDispatcherInfo.NextContinuation))
{
Comment thread
rcj1 marked this conversation as resolved.
RuntimeAsyncInstrumentationHelpers.SuspendRuntimeAsyncContext(ref asyncDispatcherInfo, flags, curContinuation);

RuntimeAsyncInstrumentationHelpers.SuspendRuntimeAsyncContext(flags);
awaitState.Pop();
refDispatcherInfo = asyncDispatcherInfo.Next;
return;
Expand Down Expand Up @@ -1171,13 +1170,13 @@ public static void ResumeRuntimeAsyncContext(Task task, ref AsyncDispatcherInfo
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void SuspendRuntimeAsyncContext(ref AsyncDispatcherInfo info, AsyncInstrumentation.Flags flags, Continuation curContinuation)
public static void SuspendRuntimeAsyncContext(AsyncInstrumentation.Flags flags)
{
if (AsyncInstrumentation.IsEnabled.SuspendAsyncContext(flags))
{
if (AsyncInstrumentation.IsEnabled.AsyncDebugger(flags))
{
AsyncDebugger.SuspendAsyncContext(ref info, curContinuation);
AsyncDebugger.SuspendAsyncContext();
}
}
}
Expand Down Expand Up @@ -1266,19 +1265,14 @@ public static void ResumeAsyncContext(int id)
TplEventSource.Log.TraceSynchronousWorkBegin(id, CausalitySynchronousWork.Execution);
}

public static void SuspendAsyncContext(ref AsyncDispatcherInfo info, Continuation curContinuation)
public static void SuspendAsyncContext(Continuation curContinuation, Continuation newContinuation)
{
if (info.NextContinuation != null)
{
Task.TryAddRuntimeAsyncContinuationChainTimestamps(info.NextContinuation, curContinuation);
}

Task.ReplaceOrAddRuntimeAsyncContinuationTimestamp(curContinuation, newContinuation);
TplEventSource.Log.TraceSynchronousWorkEnd(CausalitySynchronousWork.Execution);
}

public static void SuspendAsyncContext(Continuation curContinuation, Continuation newContinuation)
public static void SuspendAsyncContext()
{
Task.ReplaceOrAddRuntimeAsyncContinuationTimestamp(curContinuation, newContinuation);
TplEventSource.Log.TraceSynchronousWorkEnd(CausalitySynchronousWork.Execution);
}

Expand Down Expand Up @@ -1320,18 +1314,11 @@ public static void CompleteAsyncMethod(Continuation curContinuation)
Task.RemoveRuntimeAsyncContinuationTimestamp(curContinuation);
}

public static void HandleSuspended(Continuation? nextContinuation, Continuation? newContinuation)
public static void HandleSuspended(Continuation? nextContinuation)
{
if (nextContinuation != null)
{
if (newContinuation != null)
{
Task.TryAddRuntimeAsyncContinuationChainTimestamps(nextContinuation, newContinuation);
}
else
{
Task.TryAddRuntimeAsyncContinuationChainTimestamps(nextContinuation);
}
Task.TryAddRuntimeAsyncContinuationChainTimestamps(nextContinuation);
}
Comment on lines +1317 to 1322
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,21 +264,6 @@ internal static void TryAddRuntimeAsyncContinuationChainTimestamps(Continuation
}
}

internal static void TryAddRuntimeAsyncContinuationChainTimestamps(Continuation continuationChain, Continuation timestampSource)
{
var continuationTimestamps = GetOrCreateRuntimeAsyncContinuationTimestamps();
lock (continuationTimestamps)
{
long timestamp = continuationTimestamps.TryGetValue(timestampSource, out long timestampVal) ? timestampVal : Stopwatch.GetTimestamp();
Continuation? nc = continuationChain;
while (nc != null)
{
continuationTimestamps.TryAdd(nc, timestamp);
nc = nc.Next;
}
}
}

internal static void RemoveRuntimeAsyncContinuationTimestamp(Continuation continuation)
{
var continuationTimestamps = s_runtimeAsyncContinuationTimestamps;
Expand Down