mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/35525 [Changelog][Internal] Adds ability to invoke an async JS callback from a C++ native module, as a task with priority. This will allow native modules to schedule less important calls to JS thread with lower priority. One example use case is feeding collected perf metrics back to JS. Reviewed By: javache Differential Revision: D41492849 fbshipit-source-id: 12f738557972dc23398d9bb9a7a01125c79da070
56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <ReactCommon/SchedulerPriority.h>
|
|
#include <jsi/jsi.h>
|
|
#include <react/renderer/runtimescheduler/RuntimeSchedulerClock.h>
|
|
|
|
#include <optional>
|
|
#include <variant>
|
|
|
|
namespace facebook::react {
|
|
|
|
class RuntimeScheduler;
|
|
class TaskPriorityComparer;
|
|
|
|
using RawCallback = std::function<void(jsi::Runtime &)>;
|
|
|
|
struct Task final {
|
|
Task(
|
|
SchedulerPriority priority,
|
|
jsi::Function callback,
|
|
std::chrono::steady_clock::time_point expirationTime);
|
|
|
|
Task(
|
|
SchedulerPriority priority,
|
|
RawCallback callback,
|
|
std::chrono::steady_clock::time_point expirationTime);
|
|
|
|
private:
|
|
friend RuntimeScheduler;
|
|
friend TaskPriorityComparer;
|
|
|
|
SchedulerPriority priority;
|
|
std::optional<std::variant<jsi::Function, RawCallback>> callback;
|
|
RuntimeSchedulerClock::time_point expirationTime;
|
|
|
|
jsi::Value execute(jsi::Runtime &runtime, bool didUserCallbackTimeout);
|
|
};
|
|
|
|
class TaskPriorityComparer {
|
|
public:
|
|
inline bool operator()(
|
|
std::shared_ptr<Task> const &lhs,
|
|
std::shared_ptr<Task> const &rhs) {
|
|
return lhs->expirationTime > rhs->expirationTime;
|
|
}
|
|
};
|
|
|
|
} // namespace facebook::react
|