From 82c06ac28054bb3b75f286e1ae69641f69ee9b63 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Sun, 4 Sep 2022 08:02:21 -0700 Subject: [PATCH] React Scheduler Summary: Introduces a Scheduler implementation using ReactDispatcher. The scheduler is/will be used by the FlipperConnectionManager as to serialise socket operations in it. Reviewed By: antonk52 Differential Revision: D39053301 fbshipit-source-id: 5bc2d68a753ec4be3e28533b4c29e2d6ff6d8ba0 --- .../FlipperReactScheduler.h | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 react-native/react-native-flipper/windows/ReactNativeFlipper/FlipperReactScheduler.h diff --git a/react-native/react-native-flipper/windows/ReactNativeFlipper/FlipperReactScheduler.h b/react-native/react-native-flipper/windows/ReactNativeFlipper/FlipperReactScheduler.h new file mode 100644 index 000000000..66dc54978 --- /dev/null +++ b/react-native/react-native-flipper/windows/ReactNativeFlipper/FlipperReactScheduler.h @@ -0,0 +1,45 @@ +/* + * 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 +#include +#include +#include "../../../../xplat/Flipper/FlipperScheduler.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace facebook { +namespace flipper { + +class FlipperReactScheduler : public Scheduler { + FlipperReactScheduler() + : dispatcher_(ReactDispatcher::CreateSerialDispatcher()) {} + virtual ~FlipperReactScheduler() {} + + virtual void schedule(facebook::flipper::Func&& t) override { + dispatcher_.Post([t]() { t(); }); + } + virtual void scheduleAfter(facebook::flipper::Func&& t, unsigned int ms) + override { + dispatcher_.Post([t, ms]() { + std::this_thread::sleep_for(std::chrono::microseconds(ms)); + t(); + }); + } + + virtual bool isRunningInOwnThread() override { + return true; + } + + private: + ReactDispatcher dispatcher_; +}; + +} // namespace flipper +} // namespace facebook