mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Changelog: [Internal] `BatchedEventQueue::enqueueUniqueEvent` goes over event queue and deletes previous event of the same type and same target. This is useful for ScrollView for example where only the latest event is relevant. This only affects ScrollView scroll event, other events take the original code path. Reviewed By: mdvacca Differential Revision: D21648906 fbshipit-source-id: a80ad652058fd50ebb55e24a87229cdc1764b591
73 lines
2.2 KiB
C++
73 lines
2.2 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/core/StateUpdate.h>
|
|
|
|
#include "BatchedEventQueue.h"
|
|
#include "RawEvent.h"
|
|
#include "UnbatchedEventQueue.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
EventDispatcher::EventDispatcher(
|
|
EventPipe const &eventPipe,
|
|
StatePipe const &statePipe,
|
|
EventBeat::Factory const &synchonousEventBeatFactory,
|
|
EventBeat::Factory const &asynchonousEventBeatFactory,
|
|
EventBeat::SharedOwnerBox const &ownerBox)
|
|
: synchronousUnbatchedQueue_(std::make_unique<UnbatchedEventQueue>(
|
|
eventPipe,
|
|
statePipe,
|
|
synchonousEventBeatFactory(ownerBox))),
|
|
synchronousBatchedQueue_(std::make_unique<BatchedEventQueue>(
|
|
eventPipe,
|
|
statePipe,
|
|
synchonousEventBeatFactory(ownerBox))),
|
|
asynchronousUnbatchedQueue_(std::make_unique<UnbatchedEventQueue>(
|
|
eventPipe,
|
|
statePipe,
|
|
asynchonousEventBeatFactory(ownerBox))),
|
|
asynchronousBatchedQueue_(std::make_unique<BatchedEventQueue>(
|
|
eventPipe,
|
|
statePipe,
|
|
asynchonousEventBeatFactory(ownerBox))) {}
|
|
|
|
void EventDispatcher::dispatchEvent(
|
|
RawEvent const &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 const &rawEvent) const {
|
|
asynchronousBatchedQueue_->enqueueUniqueEvent(rawEvent);
|
|
}
|
|
|
|
const EventQueue &EventDispatcher::getEventQueue(EventPriority priority) const {
|
|
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
|