Files
react-native/ReactCommon/react/renderer/core/BatchedEventQueue.cpp
T
Samuel Susla 1bafd0086f Remove v1 event coalescing
Summary:
Changelog: [internal]

Old event coalescing isn't used anymore and there haven't been any problems with the new one.

Reviewed By: shergin

Differential Revision: D25701311

fbshipit-source-id: 359f0361edffa22130cfa8322038acdbe26fd599
2021-01-04 04:12:30 -08:00

57 lines
1.5 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 "BatchedEventQueue.h"
namespace facebook {
namespace react {
BatchedEventQueue::BatchedEventQueue(
EventPipe eventPipe,
StatePipe statePipe,
std::unique_ptr<EventBeat> eventBeat)
: EventQueue(eventPipe, statePipe, std::move(eventBeat)) {}
void BatchedEventQueue::onEnqueue() const {
EventQueue::onEnqueue();
eventBeat_->request();
}
void BatchedEventQueue::enqueueUniqueEvent(RawEvent const &rawEvent) const {
{
std::lock_guard<std::mutex> lock(queueMutex_);
auto repeatedEvent = eventQueue_.rend();
for (auto it = eventQueue_.rbegin(); it != eventQueue_.rend(); ++it) {
if (it->type == rawEvent.type &&
it->eventTarget == rawEvent.eventTarget) {
repeatedEvent = it;
break;
} else if (it->eventTarget == rawEvent.eventTarget) {
// It is necessary to maintain order of different event types
// for the same target. If the same target has event types A1, B1
// in the event queue and event A2 occurs. A1 has to stay in the
// queue.
break;
}
}
if (repeatedEvent == eventQueue_.rend()) {
eventQueue_.push_back(rawEvent);
} else {
*repeatedEvent = std::move(rawEvent);
}
}
onEnqueue();
}
} // namespace react
} // namespace facebook