mirror of
https://github.com/status-im/react-native.git
synced 2025-02-07 07:03:59 +00:00
Summary: To dispatch events synchonously on the main thread we still have to block the Message Queue. We actually dispatch events on the Message Queue while the main thread is waiting. Reviewed By: mdvacca Differential Revision: D9799853 fbshipit-source-id: 8033be36f27371ad2f1dc7210d564fbca1174910
38 lines
918 B
C++
38 lines
918 B
C++
// Copyright (c) Facebook, Inc. and its 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 <CoreFoundation/CoreFoundation.h>
|
|
#include <CoreFoundation/CFRunLoop.h>
|
|
#include <cxxreact/MessageQueueThread.h>
|
|
#include <fabric/events/EventBeat.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
/*
|
|
* Event beat associated with main run loop cycle.
|
|
* The callback is always called on the main thread.
|
|
*/
|
|
class MainRunLoopEventBeat final:
|
|
public EventBeat {
|
|
|
|
public:
|
|
MainRunLoopEventBeat(std::shared_ptr<MessageQueueThread> messageQueueThread);
|
|
~MainRunLoopEventBeat();
|
|
|
|
void induce() const override;
|
|
|
|
private:
|
|
void blockMessageQueueAndThenBeat() const;
|
|
|
|
std::shared_ptr<MessageQueueThread> messageQueueThread_;
|
|
CFRunLoopObserverRef mainRunLoopObserver_;
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|