Skip to content

Commit d205267

Browse files
christophpurrermeta-codesync[bot]
authored andcommitted
Compile out RuntimeScheduler_Legacy under RCT_REMOVE_LEGACY_ARCH (#57116)
Summary: Pull Request resolved: #57116 ## Changelog: [General][Breaking] Compile out RuntimeScheduler_Legacy under RCT_REMOVE_LEGACY_ARCH Guard the legacy RuntimeScheduler implementation behind the `RCT_REMOVE_LEGACY_ARCH` macro instead of deleting it. `RuntimeScheduler_Legacy.h`/`.cpp` remain in the tree, but their contents — along with the feature-flag-based selection between the legacy and modern schedulers in `RuntimeScheduler.cpp`, `NativeMutationObserver.cpp`, and `Task.h` — are wrapped in `#ifndef RCT_REMOVE_LEGACY_ARCH`. When the macro is defined, the legacy code is compiled out and `RuntimeScheduler` unconditionally instantiates `RuntimeScheduler_Modern`; when it is not defined, behavior is unchanged. The C++ API snapshots are updated to drop the `RuntimeScheduler_Legacy` symbols from the new-arch surface, and the parameterized scheduler test (`RuntimeSchedulerTest`) only runs the modern configuration when the legacy arch is compiled out. Reviewed By: rubennorte Differential Revision: D107777881 fbshipit-source-id: 2b50711ab3af182edc45a87fd232d96a0f879837
1 parent 4adca58 commit d205267

9 files changed

Lines changed: 30 additions & 73 deletions

File tree

packages/react-native/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,11 @@ void NativeMutationObserver::notifyMutationObserversIfNecessary() {
143143

144144
if (dispatchNotification) {
145145
TraceSection s("NativeMutationObserver::notifyObservers");
146+
#ifndef RCT_REMOVE_LEGACY_ARCH
146147
if (ReactNativeFeatureFlags::enableBridgelessArchitecture()) {
148+
#endif
147149
runtime_->queueMicrotask(notifyMutationObservers_.value());
150+
#ifndef RCT_REMOVE_LEGACY_ARCH
148151
} else {
149152
jsInvoker_->invokeAsync([&](jsi::Runtime& runtime) {
150153
// It's possible that the last observer was disconnected before we could
@@ -154,6 +157,7 @@ void NativeMutationObserver::notifyMutationObserversIfNecessary() {
154157
}
155158
});
156159
}
160+
#endif
157161
}
158162
}
159163

packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@
66
*/
77

88
#include "RuntimeScheduler.h"
9-
#include "RuntimeScheduler_Legacy.h"
109
#include "RuntimeScheduler_Modern.h"
10+
#ifndef RCT_REMOVE_LEGACY_ARCH
11+
#include "RuntimeScheduler_Legacy.h"
12+
#endif
1113

1214
#include <cxxreact/ErrorUtils.h>
1315
#include <cxxreact/TraceSection.h>
16+
#ifndef RCT_REMOVE_LEGACY_ARCH
1417
#include <react/featureflags/ReactNativeFeatureFlags.h>
18+
#endif
1519
#include <utility>
1620

1721
namespace facebook::react {
@@ -23,13 +27,17 @@ std::unique_ptr<RuntimeSchedulerBase> getRuntimeSchedulerImplementation(
2327
RuntimeExecutor runtimeExecutor,
2428
std::function<HighResTimeStamp()> now,
2529
RuntimeSchedulerTaskErrorHandler onTaskError) {
30+
#ifndef RCT_REMOVE_LEGACY_ARCH
2631
if (ReactNativeFeatureFlags::enableBridgelessArchitecture()) {
32+
#endif
2733
return std::make_unique<RuntimeScheduler_Modern>(
2834
std::move(runtimeExecutor), std::move(now), std::move(onTaskError));
35+
#ifndef RCT_REMOVE_LEGACY_ARCH
2936
} else {
3037
return std::make_unique<RuntimeScheduler_Legacy>(
3138
std::move(runtimeExecutor), std::move(now), std::move(onTaskError));
3239
}
40+
#endif
3341
}
3442

3543
} // namespace

packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
*/
77

88
#include "RuntimeScheduler_Legacy.h"
9+
10+
#ifndef RCT_REMOVE_LEGACY_ARCH
11+
912
#include "SchedulerPriorityUtils.h"
1013

1114
#include <ReactCommon/RuntimeExecutorSyncUIThreadUtils.h>
@@ -282,3 +285,5 @@ void RuntimeScheduler_Legacy::executeTask(
282285
}
283286

284287
} // namespace facebook::react
288+
289+
#endif // RCT_REMOVE_LEGACY_ARCH

packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#pragma once
99

10+
#ifndef RCT_REMOVE_LEGACY_ARCH
11+
1012
#include <ReactCommon/RuntimeExecutor.h>
1113
#include <react/renderer/consistency/ShadowTreeRevisionConsistencyManager.h>
1214
#include <react/renderer/runtimescheduler/RuntimeScheduler.h>
@@ -172,3 +174,5 @@ class RuntimeScheduler_Legacy final : public RuntimeSchedulerBase {
172174
};
173175

174176
} // namespace facebook::react
177+
178+
#endif // RCT_REMOVE_LEGACY_ARCH

packages/react-native/ReactCommon/react/renderer/runtimescheduler/Task.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
namespace facebook::react {
1919

20+
#ifndef RCT_REMOVE_LEGACY_ARCH
2021
class RuntimeScheduler_Legacy;
22+
#endif
2123
class RuntimeScheduler_Modern;
2224
class TaskPriorityComparer;
2325

@@ -29,7 +31,9 @@ struct Task final : public jsi::NativeState {
2931
Task(SchedulerPriority priority, RawCallback &&callback, HighResTimeStamp expirationTime);
3032

3133
private:
34+
#ifndef RCT_REMOVE_LEGACY_ARCH
3235
friend RuntimeScheduler_Legacy;
36+
#endif
3337
friend RuntimeScheduler_Modern;
3438
friend TaskPriorityComparer;
3539

packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,10 @@ TEST_P(RuntimeSchedulerTest, reportsLongTasksWithYielding) {
14311431
INSTANTIATE_TEST_SUITE_P(
14321432
UseModernRuntimeScheduler,
14331433
RuntimeSchedulerTest,
1434+
#ifdef RCT_REMOVE_LEGACY_ARCH
1435+
testing::Values(true));
1436+
#else
14341437
testing::Values(false, true));
1438+
#endif
14351439

14361440
} // namespace facebook::react

scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4264,30 +4264,6 @@ class facebook::react::RuntimeSchedulerIntersectionObserverDelegate {
42644264
public virtual ~RuntimeSchedulerIntersectionObserverDelegate() = default;
42654265
}
42664266

4267-
class facebook::react::RuntimeScheduler_Legacy : public facebook::react::RuntimeSchedulerBase {
4268-
public RuntimeScheduler_Legacy(const facebook::react::RuntimeScheduler_Legacy&) = delete;
4269-
public RuntimeScheduler_Legacy(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);
4270-
public RuntimeScheduler_Legacy(facebook::react::RuntimeScheduler_Legacy&&) = delete;
4271-
public facebook::react::RuntimeScheduler_Legacy& operator=(const facebook::react::RuntimeScheduler_Legacy&) = delete;
4272-
public facebook::react::RuntimeScheduler_Legacy& operator=(facebook::react::RuntimeScheduler_Legacy&&) = delete;
4273-
public virtual bool getShouldYield() noexcept override;
4274-
public virtual facebook::react::HighResTimeStamp now() const noexcept override;
4275-
public virtual facebook::react::SchedulerPriority getCurrentPriorityLevel() const noexcept override;
4276-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::jsi::Function&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
4277-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::react::RawCallback&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
4278-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::jsi::Function&& callback) noexcept override;
4279-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::react::RawCallback&& callback) noexcept override;
4280-
public virtual void callExpiredTasks(facebook::jsi::Runtime& runtime) override;
4281-
public virtual void cancelTask(facebook::react::Task& task) noexcept override;
4282-
public virtual void executeNowOnTheSameThread(facebook::react::RawCallback&& callback) override;
4283-
public virtual void scheduleRenderingUpdate(facebook::react::SurfaceId surfaceId, facebook::react::RuntimeSchedulerRenderingUpdate&& renderingUpdate) override;
4284-
public virtual void scheduleWork(facebook::react::RawCallback&& callback) noexcept override;
4285-
public virtual void setEventTimingDelegate(facebook::react::RuntimeSchedulerEventTimingDelegate* eventTimingDelegate) override;
4286-
public virtual void setIntersectionObserverDelegate(facebook::react::RuntimeSchedulerIntersectionObserverDelegate* intersectionObserverDelegate) override;
4287-
public virtual void setPerformanceEntryReporter(facebook::react::PerformanceEntryReporter* performanceEntryReporter) override;
4288-
public virtual void setShadowTreeRevisionConsistencyManager(facebook::react::ShadowTreeRevisionConsistencyManager* shadowTreeRevisionConsistencyManager) override;
4289-
}
4290-
42914267
class facebook::react::RuntimeScheduler_Modern : public facebook::react::RuntimeSchedulerBase {
42924268
public RuntimeScheduler_Modern(const facebook::react::RuntimeScheduler_Modern&) = delete;
42934269
public RuntimeScheduler_Modern(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);

scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6495,30 +6495,6 @@ class facebook::react::RuntimeSchedulerIntersectionObserverDelegate {
64956495
public virtual ~RuntimeSchedulerIntersectionObserverDelegate() = default;
64966496
}
64976497

6498-
class facebook::react::RuntimeScheduler_Legacy : public facebook::react::RuntimeSchedulerBase {
6499-
public RuntimeScheduler_Legacy(const facebook::react::RuntimeScheduler_Legacy&) = delete;
6500-
public RuntimeScheduler_Legacy(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);
6501-
public RuntimeScheduler_Legacy(facebook::react::RuntimeScheduler_Legacy&&) = delete;
6502-
public facebook::react::RuntimeScheduler_Legacy& operator=(const facebook::react::RuntimeScheduler_Legacy&) = delete;
6503-
public facebook::react::RuntimeScheduler_Legacy& operator=(facebook::react::RuntimeScheduler_Legacy&&) = delete;
6504-
public virtual bool getShouldYield() noexcept override;
6505-
public virtual facebook::react::HighResTimeStamp now() const noexcept override;
6506-
public virtual facebook::react::SchedulerPriority getCurrentPriorityLevel() const noexcept override;
6507-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::jsi::Function&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
6508-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::react::RawCallback&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
6509-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::jsi::Function&& callback) noexcept override;
6510-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::react::RawCallback&& callback) noexcept override;
6511-
public virtual void callExpiredTasks(facebook::jsi::Runtime& runtime) override;
6512-
public virtual void cancelTask(facebook::react::Task& task) noexcept override;
6513-
public virtual void executeNowOnTheSameThread(facebook::react::RawCallback&& callback) override;
6514-
public virtual void scheduleRenderingUpdate(facebook::react::SurfaceId surfaceId, facebook::react::RuntimeSchedulerRenderingUpdate&& renderingUpdate) override;
6515-
public virtual void scheduleWork(facebook::react::RawCallback&& callback) noexcept override;
6516-
public virtual void setEventTimingDelegate(facebook::react::RuntimeSchedulerEventTimingDelegate* eventTimingDelegate) override;
6517-
public virtual void setIntersectionObserverDelegate(facebook::react::RuntimeSchedulerIntersectionObserverDelegate* intersectionObserverDelegate) override;
6518-
public virtual void setPerformanceEntryReporter(facebook::react::PerformanceEntryReporter* performanceEntryReporter) override;
6519-
public virtual void setShadowTreeRevisionConsistencyManager(facebook::react::ShadowTreeRevisionConsistencyManager* shadowTreeRevisionConsistencyManager) override;
6520-
}
6521-
65226498
class facebook::react::RuntimeScheduler_Modern : public facebook::react::RuntimeSchedulerBase {
65236499
public RuntimeScheduler_Modern(const facebook::react::RuntimeScheduler_Modern&) = delete;
65246500
public RuntimeScheduler_Modern(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);

scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2871,30 +2871,6 @@ class facebook::react::RuntimeSchedulerIntersectionObserverDelegate {
28712871
public virtual ~RuntimeSchedulerIntersectionObserverDelegate() = default;
28722872
}
28732873

2874-
class facebook::react::RuntimeScheduler_Legacy : public facebook::react::RuntimeSchedulerBase {
2875-
public RuntimeScheduler_Legacy(const facebook::react::RuntimeScheduler_Legacy&) = delete;
2876-
public RuntimeScheduler_Legacy(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);
2877-
public RuntimeScheduler_Legacy(facebook::react::RuntimeScheduler_Legacy&&) = delete;
2878-
public facebook::react::RuntimeScheduler_Legacy& operator=(const facebook::react::RuntimeScheduler_Legacy&) = delete;
2879-
public facebook::react::RuntimeScheduler_Legacy& operator=(facebook::react::RuntimeScheduler_Legacy&&) = delete;
2880-
public virtual bool getShouldYield() noexcept override;
2881-
public virtual facebook::react::HighResTimeStamp now() const noexcept override;
2882-
public virtual facebook::react::SchedulerPriority getCurrentPriorityLevel() const noexcept override;
2883-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::jsi::Function&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
2884-
public virtual std::shared_ptr<facebook::react::Task> scheduleIdleTask(facebook::react::RawCallback&& callback, facebook::react::HighResDuration timeout = timeoutForSchedulerPriority(facebook::react::SchedulerPriority::IdlePriority)) noexcept override;
2885-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::jsi::Function&& callback) noexcept override;
2886-
public virtual std::shared_ptr<facebook::react::Task> scheduleTask(facebook::react::SchedulerPriority priority, facebook::react::RawCallback&& callback) noexcept override;
2887-
public virtual void callExpiredTasks(facebook::jsi::Runtime& runtime) override;
2888-
public virtual void cancelTask(facebook::react::Task& task) noexcept override;
2889-
public virtual void executeNowOnTheSameThread(facebook::react::RawCallback&& callback) override;
2890-
public virtual void scheduleRenderingUpdate(facebook::react::SurfaceId surfaceId, facebook::react::RuntimeSchedulerRenderingUpdate&& renderingUpdate) override;
2891-
public virtual void scheduleWork(facebook::react::RawCallback&& callback) noexcept override;
2892-
public virtual void setEventTimingDelegate(facebook::react::RuntimeSchedulerEventTimingDelegate* eventTimingDelegate) override;
2893-
public virtual void setIntersectionObserverDelegate(facebook::react::RuntimeSchedulerIntersectionObserverDelegate* intersectionObserverDelegate) override;
2894-
public virtual void setPerformanceEntryReporter(facebook::react::PerformanceEntryReporter* performanceEntryReporter) override;
2895-
public virtual void setShadowTreeRevisionConsistencyManager(facebook::react::ShadowTreeRevisionConsistencyManager* shadowTreeRevisionConsistencyManager) override;
2896-
}
2897-
28982874
class facebook::react::RuntimeScheduler_Modern : public facebook::react::RuntimeSchedulerBase {
28992875
public RuntimeScheduler_Modern(const facebook::react::RuntimeScheduler_Modern&) = delete;
29002876
public RuntimeScheduler_Modern(facebook::react::RuntimeExecutor runtimeExecutor, std::function<facebook::react::HighResTimeStamp()> now, facebook::react::RuntimeSchedulerTaskErrorHandler onTaskError);

0 commit comments

Comments
 (0)