@@ -107,8 +107,6 @@ FutureFragment::Status AsyncTask::waitFuture(AsyncTask *waitingTask,
107107 auto queueHead = fragment->waitQueue .load (std::memory_order_acquire);
108108 bool contextIntialized = false ;
109109 while (true ) {
110- concurrency::trace::task_wait (
111- waitingTask, this , static_cast <uintptr_t >(queueHead.getStatus ()));
112110 switch (queueHead.getStatus ()) {
113111 case Status::Error:
114112 case Status::Success:
@@ -123,6 +121,8 @@ FutureFragment::Status AsyncTask::waitFuture(AsyncTask *waitingTask,
123121 SWIFT_TASK_DEBUG_LOG (" task %p waiting on task %p, going to sleep" ,
124122 waitingTask, this );
125123 _swift_tsan_release (static_cast <Job *>(waitingTask));
124+ concurrency::trace::task_wait (
125+ waitingTask, this , static_cast <uintptr_t >(queueHead.getStatus ()));
126126 // Task is not complete. We'll need to add ourselves to the queue.
127127 break ;
128128 }
@@ -233,6 +233,8 @@ void AsyncTask::completeFuture(AsyncContext *context) {
233233
234234 _swift_tsan_acquire (static_cast <Job *>(waitingTask));
235235
236+ concurrency::trace::task_resume (waitingTask);
237+
236238 // Enqueue the waiter on the global executor.
237239 // TODO: allow waiters to fill in a suggested executor
238240 waitingTask->flagAsAndEnqueueOnExecutor (ExecutorRef::generic ());
@@ -470,23 +472,27 @@ const void
470472 reinterpret_cast <void *>(task_future_wait_resume_adapter);
471473
472474const void *AsyncTask::getResumeFunctionForLogging () {
475+ const void *result = reinterpret_cast <const void *>(ResumeTask);
476+
473477 if (ResumeTask == non_future_adapter) {
474478 auto asyncContextPrefix = reinterpret_cast <AsyncContextPrefix *>(
475479 reinterpret_cast <char *>(ResumeContext) - sizeof (AsyncContextPrefix));
476- return reinterpret_cast <const void *>(asyncContextPrefix->asyncEntryPoint );
480+ result =
481+ reinterpret_cast <const void *>(asyncContextPrefix->asyncEntryPoint );
477482 } else if (ResumeTask == future_adapter) {
478483 auto asyncContextPrefix = reinterpret_cast <FutureAsyncContextPrefix *>(
479484 reinterpret_cast <char *>(ResumeContext) -
480485 sizeof (FutureAsyncContextPrefix));
481- return reinterpret_cast <const void *>(asyncContextPrefix->asyncEntryPoint );
486+ result =
487+ reinterpret_cast <const void *>(asyncContextPrefix->asyncEntryPoint );
482488 } else if (ResumeTask == task_wait_throwing_resume_adapter) {
483489 auto context = static_cast <TaskFutureWaitAsyncContext *>(ResumeContext);
484- return reinterpret_cast <const void *>(context->ResumeParent );
490+ result = reinterpret_cast <const void *>(context->ResumeParent );
485491 } else if (ResumeTask == task_future_wait_resume_adapter) {
486- return reinterpret_cast <const void *>(ResumeContext->ResumeParent );
492+ result = reinterpret_cast <const void *>(ResumeContext->ResumeParent );
487493 }
488494
489- return reinterpret_cast < const void *>(ResumeTask );
495+ return __ptrauth_swift_runtime_function_entry_strip (result );
490496}
491497
492498JobPriority swift::swift_task_currentPriority (AsyncTask *task)
@@ -653,7 +659,7 @@ static AsyncTaskAndContext swift_task_create_commonImpl(
653659 basePriority = JobPriority::Default;
654660 }
655661
656- SWIFT_TASK_DEBUG_LOG (" Task's base priority = %#x " , basePriority);
662+ SWIFT_TASK_DEBUG_LOG (" Task's base priority = %#zx " , basePriority);
657663
658664 // Figure out the size of the header.
659665 size_t headerSize = sizeof (AsyncTask);
@@ -788,7 +794,9 @@ static AsyncTaskAndContext swift_task_create_commonImpl(
788794 futureAsyncContextPrefix->indirectResult = futureFragment->getStoragePtr ();
789795 }
790796
791- SWIFT_TASK_DEBUG_LOG (" creating task %p with parent %p at base pri %zu" , task, parent, basePriority);
797+ SWIFT_TASK_DEBUG_LOG (" creating task %p ID %" PRIu64
798+ " with parent %p at base pri %zu" ,
799+ task, task->getTaskId (), parent, basePriority);
792800
793801 // Initialize the task-local allocator.
794802 initialContext->ResumeParent = reinterpret_cast <TaskContinuationFunction *>(
@@ -1059,6 +1067,8 @@ static AsyncTask *swift_continuation_initImpl(ContinuationAsyncContext *context,
10591067 task->ResumeContext = context;
10601068 task->ResumeTask = context->ResumeParent ;
10611069
1070+ concurrency::trace::task_continuation_init (task, context);
1071+
10621072 return task;
10631073}
10641074
@@ -1071,6 +1081,8 @@ static void swift_continuation_awaitImpl(ContinuationAsyncContext *context) {
10711081 assert (task->ResumeTask == context->ResumeParent );
10721082#endif
10731083
1084+ concurrency::trace::task_continuation_await (context);
1085+
10741086 auto &sync = context->AwaitSynchronization ;
10751087
10761088 auto oldStatus = sync.load (std::memory_order_acquire);
@@ -1157,12 +1169,14 @@ static void resumeTaskAfterContinuation(AsyncTask *task,
11571169SWIFT_CC (swift)
11581170static void swift_continuation_resumeImpl(AsyncTask *task) {
11591171 auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1172+ concurrency::trace::task_continuation_resume (context, false );
11601173 resumeTaskAfterContinuation (task, context);
11611174}
11621175
11631176SWIFT_CC (swift)
11641177static void swift_continuation_throwingResumeImpl(AsyncTask *task) {
11651178 auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1179+ concurrency::trace::task_continuation_resume (context, false );
11661180 resumeTaskAfterContinuation (task, context);
11671181}
11681182
@@ -1171,6 +1185,7 @@ SWIFT_CC(swift)
11711185static void swift_continuation_throwingResumeWithErrorImpl(AsyncTask *task,
11721186 /* +1 */ SwiftError *error) {
11731187 auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1188+ concurrency::trace::task_continuation_resume (context, true );
11741189 context->ErrorResult = error;
11751190 resumeTaskAfterContinuation (task, context);
11761191}
0 commit comments