Skip to content

Commit 4c0f88b

Browse files
committed
Move isDistributedRemote out of ActiveActorStatus since it does not need
to be modified in the atomic - it is set once and never changed again
1 parent 7b9d4e6 commit 4c0f88b

File tree

4 files changed

+12
-28
lines changed

4 files changed

+12
-28
lines changed

include/swift/Concurrency/Actor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ enum : uint32_t {
5252
/// The actor is ready for deallocation once it stops running
5353
Zombie_ReadyForDeallocation = 0x3,
5454

55-
// Bit 3
56-
DistributedRemote = 0x8,
55+
// Bit 3 is free
56+
5757
// Bit 4
5858
IsPriorityEscalated = 0x10,
5959

include/swift/Reflection/ReflectionContext.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ class ReflectionContext
203203
StoredPointer FirstJob;
204204

205205
uint8_t State;
206-
bool IsDistributedRemote;
207206
bool IsPriorityEscalated;
207+
bool IsDistributedRemote;
208208
uint8_t MaxPriority;
209209

210210
bool HasThreadPort;
@@ -1737,13 +1737,12 @@ class ReflectionContext
17371737

17381738
uint32_t Flags = ActorObj->Status.Flags[0];
17391739
Info.State = Flags & concurrency::ActorFlagConstants::ActorStateMask;
1740-
Info.IsDistributedRemote =
1741-
Flags & concurrency::ActorFlagConstants::DistributedRemote;
17421740
Info.IsPriorityEscalated =
17431741
Flags & concurrency::ActorFlagConstants::IsPriorityEscalated;
17441742
Info.MaxPriority =
17451743
(Flags & concurrency::ActorFlagConstants::PriorityMask) >>
17461744
concurrency::ActorFlagConstants::PriorityShift;
1745+
Info.IsDistributedRemote = ActorObj->IsDistributedRemote;
17471746

17481747
// Don't read FirstJob when idle.
17491748
if (Info.State != concurrency::ActorFlagConstants::Idle) {

include/swift/Reflection/RuntimeInternals.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ struct DefaultActorImpl {
176176
HeapObject<Runtime> HeapObject;
177177
Job<Runtime> JobStorage;
178178
ActiveActorStatus Status;
179+
bool IsDistributedRemote;
179180
};
180181

181182
template <typename Runtime>

stdlib/public/Concurrency/Actor.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -589,20 +589,6 @@ class alignas(sizeof(void *) * 2) ActiveActorStatus {
589589
: Flags(), FirstJob(JobRef()) {}
590590
#endif
591591

592-
bool isDistributedRemote() const {
593-
return Flags & concurrency::ActorFlagConstants::DistributedRemote;
594-
}
595-
ActiveActorStatus withDistributedRemote() const {
596-
#if SWIFT_CONCURRENCY_ENABLE_PRIORITY_ESCALATION
597-
return ActiveActorStatus(
598-
Flags | concurrency::ActorFlagConstants::DistributedRemote, DrainLock,
599-
FirstJob);
600-
#else
601-
return ActiveActorStatus(
602-
Flags | concurrency::ActorFlagConstants::DistributedRemote, FirstJob);
603-
#endif
604-
}
605-
606592
bool isIdle() const {
607593
bool isIdle = (getActorState() == concurrency::ActorFlagConstants::Idle);
608594
if (isIdle) {
@@ -775,8 +761,8 @@ class alignas(sizeof(void *) * 2) ActiveActorStatus {
775761
}
776762
concurrency::trace::actor_state_changed(
777763
actor, getFirstJob().getRawJob(), getFirstJob().needsPreprocessing(),
778-
traceState, isDistributedRemote(), isMaxPriorityEscalated(),
779-
static_cast<uint8_t>(getMaxPriority()));
764+
traceState, swift_distributed_actor_is_remote((DefaultActor *) actor),
765+
isMaxPriorityEscalated(), static_cast<uint8_t>(getMaxPriority()));
780766
}
781767
};
782768

@@ -843,15 +829,14 @@ class DefaultActorImpl : public HeapObject {
843829
// enforce alignment. This is space that is available for us to use in
844830
// the future
845831
alignas(sizeof(ActiveActorStatus)) char StatusStorage[sizeof(ActiveActorStatus)];
832+
#endif
833+
// TODO(rokhinip): Make this a flagset
834+
bool isDistributedRemoteActor;
846835

847836
public:
848837
/// Properly construct an actor, except for the heap header.
849838
void initialize(bool isDistributedRemote = false) {
850-
ActiveActorStatus status = ActiveActorStatus();
851-
if (isDistributedRemote) {
852-
status = status.withDistributedRemote();
853-
}
854-
_status().store(status, std::memory_order_relaxed);
839+
this->isDistributedRemoteActor = isDistributedRemote;
855840

856841
SWIFT_TASK_DEBUG_LOG("Creating default actor %p", this);
857842
concurrency::trace::actor_create(this);
@@ -1774,6 +1759,5 @@ bool swift::swift_distributed_actor_is_remote(DefaultActor *_actor) {
17741759
}
17751760

17761761
bool DefaultActorImpl::isDistributedRemote() {
1777-
auto state = _status().load(std::memory_order_relaxed);
1778-
return state.isDistributedRemote();
1762+
return this->isDistributedRemoteActor;
17791763
}

0 commit comments

Comments
 (0)