mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Changelog: [Internal] Order of events dispatched to JS matter. If we remove duplicate events, we shouldn't change order of types. So If we have order of events A -> B -> C and inserting a new event A for the same target, we shouldn't delete the first A, as there might be logic that depends on event B being preceded by A. What we can do though, is delete previous event of the same type and target in queue if we would be adding subsequent event. So when we have events A -> B -> C and we are about to add event C to the queue which goes to the same target, we can delete the first C before inserting the new one. Reviewed By: shergin Differential Revision: D22135931 fbshipit-source-id: 1dadd1688516330be07c4251f446f77ca08eaa87
39 lines
848 B
C++
39 lines
848 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.
|
|
*/
|
|
|
|
#include "BatchedEventQueue.h"
|
|
#include <algorithm>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
void BatchedEventQueue::onEnqueue() const {
|
|
EventQueue::onEnqueue();
|
|
|
|
eventBeat_->request();
|
|
}
|
|
|
|
void BatchedEventQueue::enqueueUniqueEvent(const RawEvent &rawEvent) const {
|
|
{
|
|
std::lock_guard<std::mutex> lock(queueMutex_);
|
|
if (!eventQueue_.empty()) {
|
|
auto const position = eventQueue_.back();
|
|
if (position.type == rawEvent.type &&
|
|
position.eventTarget == rawEvent.eventTarget) {
|
|
eventQueue_.pop_back();
|
|
}
|
|
}
|
|
|
|
eventQueue_.push_back(rawEvent);
|
|
}
|
|
|
|
onEnqueue();
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|