Skip to content

Commit 57d056e

Browse files
authored
Merge pull request #82457 from al45tair/external-executor-test-support
[Concurrency] Add functions to allow testing of external executors.
2 parents d9b220c + 26878c9 commit 57d056e

File tree

8 files changed

+65
-7
lines changed

8 files changed

+65
-7
lines changed

include/swift/ABI/Task.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ class alignas(2 * alignof(void*)) Job :
154154
return Flags.getPriority();
155155
}
156156

157+
void setPriority(JobPriority priority) {
158+
Flags.setPriority(priority);
159+
}
160+
157161
uint32_t getJobId() const {
158162
return Id;
159163
}

stdlib/public/Concurrency/ExecutorBridge.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ uint8_t swift_job_getPriority(Job *job) {
5454
return (uint8_t)(job->getPriority());
5555
}
5656

57+
extern "C" SWIFT_CC(swift)
58+
void swift_job_setPriority(Job *job, uint8_t priority) {
59+
job->setPriority(JobPriority(priority));
60+
}
61+
5762
extern "C" SWIFT_CC(swift)
5863
uint8_t swift_job_getKind(Job *job) {
5964
return (uint8_t)(job->Flags.getKind());

stdlib/public/Concurrency/ExecutorBridge.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ internal func _jobDeallocate(_ job: Builtin.Job,
7777
@_silgen_name("swift_job_getPriority")
7878
internal func _jobGetPriority(_ job: Builtin.Job) -> UInt8
7979

80+
@available(StdlibDeploymentTarget 6.2, *)
81+
@_silgen_name("swift_job_setPriority")
82+
internal func _jobSetPriority(_ job: Builtin.Job, _ priority: UInt8)
83+
8084
@available(StdlibDeploymentTarget 6.2, *)
8185
@_silgen_name("swift_job_getKind")
8286
internal func _jobGetKind(_ job: Builtin.Job) -> UInt8

stdlib/public/Concurrency/PartialAsyncTask.swift

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,23 @@ public struct ExecutorJob: Sendable, ~Copyable {
298298
self.context = job.context
299299
}
300300

301-
public var priority: JobPriority {
302-
let raw: UInt8
303-
if #available(StdlibDeploymentTarget 6.2, *) {
304-
raw = _jobGetPriority(self.context)
305-
} else {
306-
fatalError("we shouldn't get here; if we have, availability is broken")
301+
internal(set) public var priority: JobPriority {
302+
get {
303+
let raw: UInt8
304+
if #available(StdlibDeploymentTarget 6.2, *) {
305+
raw = _jobGetPriority(self.context)
306+
} else {
307+
fatalError("we shouldn't get here; if we have, availability is broken")
308+
}
309+
return JobPriority(rawValue: raw)
310+
}
311+
set {
312+
if #available(StdlibDeploymentTarget 6.2, *) {
313+
_jobSetPriority(self.context, newValue.rawValue)
314+
} else {
315+
fatalError("we shouldn't get here; if we have, availability is broken")
316+
}
307317
}
308-
return JobPriority(rawValue: raw)
309318
}
310319

311320
/// Execute a closure, passing it the bounds of the executor private data
@@ -540,6 +549,16 @@ public struct JobPriority: Sendable {
540549

541550
/// The raw priority value.
542551
public var rawValue: RawValue
552+
553+
/// Construct from a raw value
554+
public init(rawValue: RawValue) {
555+
self.rawValue = rawValue
556+
}
557+
558+
/// Construct from a TaskPriority
559+
public init(_ p: TaskPriority) {
560+
self.rawValue = p.rawValue
561+
}
543562
}
544563

545564
@available(SwiftStdlib 5.9, *)
@@ -909,3 +928,17 @@ public func _unsafeInheritExecutor_withUnsafeThrowingContinuation<T>(
909928
public func _abiEnableAwaitContinuation() {
910929
fatalError("never use this function")
911930
}
931+
932+
@available(StdlibDeploymentTarget 6.2, *)
933+
@_silgen_name("_swift_createJobForTestingOnly")
934+
public func _swift_createJobForTestingOnly(
935+
priority: TaskPriority = TaskPriority.medium,
936+
_ body: @escaping () -> ()
937+
) -> ExecutorJob {
938+
let flags: Int = Int(priority.rawValue)
939+
let (task, _) = Builtin.createAsyncTask(flags, body)
940+
var job = ExecutorJob(unsafe unsafeBitCast(Builtin.convertTaskToJob(task),
941+
to: UnownedJob.self))
942+
job.priority = JobPriority(priority)
943+
return job
944+
}

test/abi/Inputs/macOS/arm64/concurrency/baseline

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ _$ss11JobPriorityV2eeoiySbAB_ABtFZ
471471
_$ss11JobPriorityV2geoiySbAB_ABtFZ
472472
_$ss11JobPriorityV2leoiySbAB_ABtFZ
473473
_$ss11JobPriorityV2neoiySbAB_ABtFZ
474+
_$ss11JobPriorityV8rawValueABs5UInt8V_tcfC
474475
_$ss11JobPriorityV8rawValues5UInt8VvM
475476
_$ss11JobPriorityV8rawValues5UInt8Vvg
476477
_$ss11JobPriorityV8rawValues5UInt8VvpMV
@@ -480,6 +481,7 @@ _$ss11JobPriorityVMn
480481
_$ss11JobPriorityVN
481482
_$ss11JobPriorityVSLsMc
482483
_$ss11JobPriorityVSQsMc
484+
_$ss11JobPriorityVyABScPcfC
483485
_$ss12MainExecutorMp
484486
_$ss12MainExecutorPScfTb
485487
_$ss12MainExecutorPs07RunLoopB0Tb
@@ -1180,6 +1182,7 @@ __swift_concurrency_debug_non_future_adapter
11801182
__swift_concurrency_debug_supportsPriorityEscalation
11811183
__swift_concurrency_debug_task_future_wait_resume_adapter
11821184
__swift_concurrency_debug_task_wait_throwing_resume_adapter
1185+
__swift_createJobForTestingOnly
11831186
_swift_asyncLet_begin
11841187
_swift_asyncLet_consume
11851188
_swift_asyncLet_consume_throwing

test/abi/Inputs/macOS/arm64/concurrency/baseline-asserts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ _$ss11JobPriorityV2eeoiySbAB_ABtFZ
471471
_$ss11JobPriorityV2geoiySbAB_ABtFZ
472472
_$ss11JobPriorityV2leoiySbAB_ABtFZ
473473
_$ss11JobPriorityV2neoiySbAB_ABtFZ
474+
_$ss11JobPriorityV8rawValueABs5UInt8V_tcfC
474475
_$ss11JobPriorityV8rawValues5UInt8VvM
475476
_$ss11JobPriorityV8rawValues5UInt8Vvg
476477
_$ss11JobPriorityV8rawValues5UInt8VvpMV
@@ -480,6 +481,7 @@ _$ss11JobPriorityVMn
480481
_$ss11JobPriorityVN
481482
_$ss11JobPriorityVSLsMc
482483
_$ss11JobPriorityVSQsMc
484+
_$ss11JobPriorityVyABScPcfC
483485
_$ss12MainExecutorMp
484486
_$ss12MainExecutorPScfTb
485487
_$ss12MainExecutorPs07RunLoopB0Tb
@@ -1180,6 +1182,7 @@ __swift_concurrency_debug_non_future_adapter
11801182
__swift_concurrency_debug_supportsPriorityEscalation
11811183
__swift_concurrency_debug_task_future_wait_resume_adapter
11821184
__swift_concurrency_debug_task_wait_throwing_resume_adapter
1185+
__swift_createJobForTestingOnly
11831186
_swift_asyncLet_begin
11841187
_swift_asyncLet_consume
11851188
_swift_asyncLet_consume_throwing

test/abi/Inputs/macOS/x86_64/concurrency/baseline

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ _$ss11JobPriorityV2eeoiySbAB_ABtFZ
471471
_$ss11JobPriorityV2geoiySbAB_ABtFZ
472472
_$ss11JobPriorityV2leoiySbAB_ABtFZ
473473
_$ss11JobPriorityV2neoiySbAB_ABtFZ
474+
_$ss11JobPriorityV8rawValueABs5UInt8V_tcfC
474475
_$ss11JobPriorityV8rawValues5UInt8VvM
475476
_$ss11JobPriorityV8rawValues5UInt8Vvg
476477
_$ss11JobPriorityV8rawValues5UInt8VvpMV
@@ -480,6 +481,7 @@ _$ss11JobPriorityVMn
480481
_$ss11JobPriorityVN
481482
_$ss11JobPriorityVSLsMc
482483
_$ss11JobPriorityVSQsMc
484+
_$ss11JobPriorityVyABScPcfC
483485
_$ss12MainExecutorMp
484486
_$ss12MainExecutorPScfTb
485487
_$ss12MainExecutorPs07RunLoopB0Tb
@@ -1180,6 +1182,7 @@ __swift_concurrency_debug_non_future_adapter
11801182
__swift_concurrency_debug_supportsPriorityEscalation
11811183
__swift_concurrency_debug_task_future_wait_resume_adapter
11821184
__swift_concurrency_debug_task_wait_throwing_resume_adapter
1185+
__swift_createJobForTestingOnly
11831186
_swift_asyncLet_begin
11841187
_swift_asyncLet_consume
11851188
_swift_asyncLet_consume_throwing

test/abi/Inputs/macOS/x86_64/concurrency/baseline-asserts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ _$ss11JobPriorityV2eeoiySbAB_ABtFZ
471471
_$ss11JobPriorityV2geoiySbAB_ABtFZ
472472
_$ss11JobPriorityV2leoiySbAB_ABtFZ
473473
_$ss11JobPriorityV2neoiySbAB_ABtFZ
474+
_$ss11JobPriorityV8rawValueABs5UInt8V_tcfC
474475
_$ss11JobPriorityV8rawValues5UInt8VvM
475476
_$ss11JobPriorityV8rawValues5UInt8Vvg
476477
_$ss11JobPriorityV8rawValues5UInt8VvpMV
@@ -480,6 +481,7 @@ _$ss11JobPriorityVMn
480481
_$ss11JobPriorityVN
481482
_$ss11JobPriorityVSLsMc
482483
_$ss11JobPriorityVSQsMc
484+
_$ss11JobPriorityVyABScPcfC
483485
_$ss12MainExecutorMp
484486
_$ss12MainExecutorPScfTb
485487
_$ss12MainExecutorPs07RunLoopB0Tb
@@ -1180,6 +1182,7 @@ __swift_concurrency_debug_non_future_adapter
11801182
__swift_concurrency_debug_supportsPriorityEscalation
11811183
__swift_concurrency_debug_task_future_wait_resume_adapter
11821184
__swift_concurrency_debug_task_wait_throwing_resume_adapter
1185+
__swift_createJobForTestingOnly
11831186
_swift_asyncLet_begin
11841187
_swift_asyncLet_consume
11851188
_swift_asyncLet_consume_throwing

0 commit comments

Comments
 (0)