react-native/ReactCommon/fabric/uimanager/SchedulerEventDispatcher.h
Kevin Gozali cb19621dfe Implementation of JS reload without crashing
Summary:
On JS reload the FabricUIManager and EventDispatcher didn't get release due to a retain cycle. This breaks the cycle.

In addition, force release the Scheduler on reload so that the stale classes get cleaned up properly, avoiding crashes. Also the surface now remounts the content correctly

Reviewed By: shergin

Differential Revision: D8414916

fbshipit-source-id: 4b14031f29b3bc9987d7aa765dc0d930a7de2b1e
2018-06-15 11:02:17 -07:00

51 lines
1.2 KiB
C++

/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <fabric/core/EventDispatcher.h>
#include <fabric/core/EventPrimitives.h>
#include <fabric/uimanager/FabricUIManager.h>
#include <folly/dynamic.h>
namespace facebook {
namespace react {
class SchedulerEventDispatcher;
using SharedSchedulerEventDispatcher = std::shared_ptr<const SchedulerEventDispatcher>;
/*
* Concrete EventDispatcher.
*/
class SchedulerEventDispatcher final:
public EventDispatcher {
public:
void setUIManager(std::shared_ptr<const FabricUIManager> uiManager) const;
#pragma mark - EventDispatcher
EventTarget createEventTarget(const InstanceHandle &instanceHandle) const override;
void dispatchEvent(
const EventTarget &eventTarget,
const std::string &type,
const folly::dynamic &payload,
const EventPriority &priority
) const override;
private:
// TODO: consider using std::weak_ptr<> instead for better memory management.
mutable std::shared_ptr<const FabricUIManager> uiManager_;
};
} // namespace react
} // namespace facebook