Skip to content

Commit 2e6f105

Browse files
javachefacebook-github-bot
authored andcommitted
Pass EventDispatcher listeners by value (facebook#45077)
Summary: Pull Request resolved: facebook#45077 Changelog: [Internal] Reviewed By: sammy-SC Differential Revision: D58791938 fbshipit-source-id: 079fbfad4dd309a41c360e1bdb93e56f8793e6b3
1 parent a2cb343 commit 2e6f105

File tree

6 files changed

+14
-10
lines changed

6 files changed

+14
-10
lines changed

packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,13 @@ void EventDispatcher::dispatchUniqueEvent(RawEvent&& rawEvent) const {
5959
if (eventListeners_.willDispatchEvent(rawEvent)) {
6060
return;
6161
}
62+
6263
eventQueue_.enqueueUniqueEvent(std::move(rawEvent));
6364
}
6465

6566
void EventDispatcher::addListener(
66-
const std::shared_ptr<const EventListener>& listener) const {
67-
eventListeners_.addListener(listener);
67+
std::shared_ptr<const EventListener> listener) const {
68+
eventListeners_.addListener(std::move(listener));
6869
}
6970

7071
/*

packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class EventDispatcher {
6464
/*
6565
* Adds provided event listener to the event dispatcher.
6666
*/
67-
void addListener(const std::shared_ptr<const EventListener>& listener) const;
67+
void addListener(std::shared_ptr<const EventListener> listener) const;
6868

6969
/*
7070
* Removes provided event listener to the event dispatcher.

packages/react-native/ReactCommon/react/renderer/core/EventListener.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@ bool EventListenerContainer::willDispatchEvent(const RawEvent& event) {
1616

1717
bool handled = false;
1818
for (const auto& listener : eventListeners_) {
19-
handled = handled || listener->operator()(event);
19+
handled = (*listener)(event);
20+
if (handled) {
21+
break;
22+
}
2023
}
2124
return handled;
2225
}
2326

2427
void EventListenerContainer::addListener(
25-
const std::shared_ptr<const EventListener>& listener) {
28+
std::shared_ptr<const EventListener> listener) {
2629
std::unique_lock lock(mutex_);
2730

28-
eventListeners_.push_back(listener);
31+
eventListeners_.push_back(std::move(listener));
2932
}
3033

3134
void EventListenerContainer::removeListener(

packages/react-native/ReactCommon/react/renderer/core/EventListener.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class EventListenerContainer {
3030
*/
3131
bool willDispatchEvent(const RawEvent& event);
3232

33-
void addListener(const std::shared_ptr<const EventListener>& listener);
33+
void addListener(std::shared_ptr<const EventListener> listener);
3434
void removeListener(const std::shared_ptr<const EventListener>& listener);
3535

3636
private:

packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,9 @@ std::shared_ptr<UIManager> Scheduler::getUIManager() const {
364364
}
365365

366366
void Scheduler::addEventListener(
367-
const std::shared_ptr<const EventListener>& listener) {
367+
std::shared_ptr<const EventListener> listener) {
368368
if (eventDispatcher_->has_value()) {
369-
eventDispatcher_->value().addListener(listener);
369+
eventDispatcher_->value().addListener(std::move(listener));
370370
}
371371
}
372372

packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class Scheduler final : public UIManagerDelegate {
109109
void reportMount(SurfaceId surfaceId) const;
110110

111111
#pragma mark - Event listeners
112-
void addEventListener(const std::shared_ptr<const EventListener>& listener);
112+
void addEventListener(std::shared_ptr<const EventListener> listener);
113113
void removeEventListener(
114114
const std::shared_ptr<const EventListener>& listener);
115115

0 commit comments

Comments
 (0)