mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
285406103d
Summary: Changelog: [internal] Pulling out event queue processing to its separate class. We will be adding more logic there so it makes sense to separate it for simplicity and testability purposes. Alternative names that came to mind: `EventsProcessor`, `EventsDispatcher`. Reviewed By: JoshuaGross Differential Revision: D28572283 fbshipit-source-id: 1cb2459f616b9995f66da80d50c401e68002da7f
86 lines
2.8 KiB
C++
86 lines
2.8 KiB
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.
|
|
*/
|
|
|
|
#include "EventDispatcher.h"
|
|
|
|
#include <react/renderer/core/StateUpdate.h>
|
|
|
|
#include "BatchedEventQueue.h"
|
|
#include "RawEvent.h"
|
|
#include "UnbatchedEventQueue.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
EventDispatcher::EventDispatcher(
|
|
EventQueueProcessor eventProcessor,
|
|
EventBeat::Factory const &synchonousEventBeatFactory,
|
|
EventBeat::Factory const &asynchonousEventBeatFactory,
|
|
EventBeat::SharedOwnerBox const &ownerBox,
|
|
bool unbatchedQueuesOnly)
|
|
: synchronousUnbatchedQueue_(std::make_unique<UnbatchedEventQueue>(
|
|
eventProcessor,
|
|
synchonousEventBeatFactory(ownerBox))),
|
|
synchronousBatchedQueue_(std::make_unique<BatchedEventQueue>(
|
|
eventProcessor,
|
|
synchonousEventBeatFactory(ownerBox))),
|
|
asynchronousUnbatchedQueue_(std::make_unique<UnbatchedEventQueue>(
|
|
eventProcessor,
|
|
asynchonousEventBeatFactory(ownerBox))),
|
|
asynchronousBatchedQueue_(std::make_unique<BatchedEventQueue>(
|
|
eventProcessor,
|
|
asynchonousEventBeatFactory(ownerBox))),
|
|
unbatchedQueuesOnly_(unbatchedQueuesOnly) {}
|
|
|
|
void EventDispatcher::dispatchEvent(RawEvent &&rawEvent, EventPriority priority)
|
|
const {
|
|
getEventQueue(priority).enqueueEvent(std::move(rawEvent));
|
|
}
|
|
|
|
void EventDispatcher::dispatchStateUpdate(
|
|
StateUpdate &&stateUpdate,
|
|
EventPriority priority) const {
|
|
getEventQueue(priority).enqueueStateUpdate(std::move(stateUpdate));
|
|
}
|
|
|
|
void EventDispatcher::dispatchUniqueEvent(RawEvent &&rawEvent) const {
|
|
if (unbatchedQueuesOnly_) {
|
|
asynchronousUnbatchedQueue_->enqueueUniqueEvent(std::move(rawEvent));
|
|
} else {
|
|
asynchronousBatchedQueue_->enqueueUniqueEvent(std::move(rawEvent));
|
|
}
|
|
}
|
|
|
|
const EventQueue &EventDispatcher::getEventQueue(EventPriority priority) const {
|
|
if (unbatchedQueuesOnly_) {
|
|
switch (priority) {
|
|
case EventPriority::SynchronousUnbatched:
|
|
return *synchronousUnbatchedQueue_;
|
|
case EventPriority::SynchronousBatched:
|
|
return *synchronousUnbatchedQueue_;
|
|
case EventPriority::AsynchronousUnbatched:
|
|
return *asynchronousUnbatchedQueue_;
|
|
case EventPriority::AsynchronousBatched:
|
|
return *asynchronousUnbatchedQueue_;
|
|
}
|
|
} else {
|
|
switch (priority) {
|
|
case EventPriority::SynchronousUnbatched:
|
|
return *synchronousUnbatchedQueue_;
|
|
case EventPriority::SynchronousBatched:
|
|
return *synchronousBatchedQueue_;
|
|
case EventPriority::AsynchronousUnbatched:
|
|
return *asynchronousUnbatchedQueue_;
|
|
case EventPriority::AsynchronousBatched:
|
|
return *asynchronousBatchedQueue_;
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|