Skip to content

Commit 3e359c7

Browse files
authored
Add parallelism debug logging (#3493)
1 parent 48d3dae commit 3e359c7

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

TUnit.Engine/Scheduling/TestScheduler.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,26 +227,45 @@ private async Task ExecuteTestWithParallelLimitAsync(
227227
AbstractExecutableTest test,
228228
CancellationToken cancellationToken)
229229
{
230+
var taskStartTime = DateTime.UtcNow;
231+
await _logger.LogDebugAsync($"[TASK START] Test '{test.TestId}' task started at {taskStartTime:HH:mm:ss.fff}").ConfigureAwait(false);
232+
230233
// Check if test has parallel limit constraint
231234
if (test.Context.ParallelLimiter != null)
232235
{
233236
var limiterType = test.Context.ParallelLimiter.GetType().Name;
234237
var semaphore = _parallelLimitLockProvider.GetLock(test.Context.ParallelLimiter);
235238

236-
await _logger.LogDebugAsync($"Test '{test.TestId}': Waiting for ParallelLimiter '{limiterType}' (available: {semaphore.CurrentCount}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
239+
var waitStartTime = DateTime.UtcNow;
240+
var availableBeforeWait = semaphore.CurrentCount;
241+
await _logger.LogDebugAsync($"[SEMAPHORE WAIT START] Test '{test.TestId}' waiting for ParallelLimiter '{limiterType}' at {waitStartTime:HH:mm:ss.fff} (available: {availableBeforeWait}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
237242

238243
await semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
239244

240-
await _logger.LogDebugAsync($"Test '{test.TestId}': Acquired ParallelLimiter '{limiterType}' (remaining: {semaphore.CurrentCount}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
245+
var acquiredTime = DateTime.UtcNow;
246+
var waitDuration = (acquiredTime - waitStartTime).TotalMilliseconds;
247+
var remainingAfterAcquire = semaphore.CurrentCount;
248+
await _logger.LogDebugAsync($"[SEMAPHORE ACQUIRED] Test '{test.TestId}' acquired ParallelLimiter '{limiterType}' at {acquiredTime:HH:mm:ss.fff} after {waitDuration:F0}ms wait (remaining: {remainingAfterAcquire}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
241249

242250
try
243251
{
252+
var execStartTime = DateTime.UtcNow;
253+
await _logger.LogDebugAsync($"[TEST EXECUTION START] Test '{test.TestId}' starting execution at {execStartTime:HH:mm:ss.fff}").ConfigureAwait(false);
254+
244255
await _testRunner.ExecuteTestAsync(test, cancellationToken).ConfigureAwait(false);
256+
257+
var execEndTime = DateTime.UtcNow;
258+
var execDuration = (execEndTime - execStartTime).TotalMilliseconds;
259+
await _logger.LogDebugAsync($"[TEST EXECUTION END] Test '{test.TestId}' completed execution at {execEndTime:HH:mm:ss.fff} (duration: {execDuration:F0}ms)").ConfigureAwait(false);
245260
}
246261
finally
247262
{
263+
var availableBeforeRelease = semaphore.CurrentCount;
248264
semaphore.Release();
249-
await _logger.LogDebugAsync($"Test '{test.TestId}': Released ParallelLimiter '{limiterType}' (available: {semaphore.CurrentCount}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
265+
var availableAfterRelease = semaphore.CurrentCount;
266+
var releaseTime = DateTime.UtcNow;
267+
var totalDuration = (releaseTime - taskStartTime).TotalMilliseconds;
268+
await _logger.LogDebugAsync($"[SEMAPHORE RELEASED] Test '{test.TestId}' released ParallelLimiter '{limiterType}' at {releaseTime:HH:mm:ss.fff} (total task duration: {totalDuration:F0}ms, available: {availableBeforeRelease}/{test.Context.ParallelLimiter.Limit}{availableAfterRelease}/{test.Context.ParallelLimiter.Limit})").ConfigureAwait(false);
250269
}
251270
}
252271
else

0 commit comments

Comments
 (0)