Files
react-native/ReactCommon/react/nativemodule/core/ReactCommon/LongLivedObject.cpp
T
Kevin Gozali 5be44456f2 TurboModule Android: compile TurboModule C++ Core into ReactAndroid
Summary:
This is to prepare for enabling TurboModule on Android. This commit compiles in all the core files (C++) into the ReactAndroid NDK build step. This doesn't yet enable TurboModule by default, just compiling in the infra, just like for iOS.

New shared libs:
* libreact_nativemodule_core.so: The TurboModule Android core
* libreact_nativemodule_manager.so: The TurboModule manager/delegate

To be compatible with `<ReactCommon/` .h include prefix, the files had to move to local `ReactCommon` subdirs.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D23805717

fbshipit-source-id: b41c392a592dd095ae003f7b2a689f4add2c37a9
2020-09-20 14:23:43 -07:00

53 lines
1.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 "LongLivedObject.h"
namespace facebook {
namespace react {
// LongLivedObjectCollection
LongLivedObjectCollection &LongLivedObjectCollection::get() {
static LongLivedObjectCollection instance;
return instance;
}
LongLivedObjectCollection::LongLivedObjectCollection() {}
void LongLivedObjectCollection::add(std::shared_ptr<LongLivedObject> so) const {
std::lock_guard<std::mutex> lock(collectionMutex_);
collection_.insert(so);
}
void LongLivedObjectCollection::remove(const LongLivedObject *o) const {
std::lock_guard<std::mutex> lock(collectionMutex_);
auto p = collection_.begin();
for (; p != collection_.end(); p++) {
if (p->get() == o) {
break;
}
}
if (p != collection_.end()) {
collection_.erase(p);
}
}
void LongLivedObjectCollection::clear() const {
std::lock_guard<std::mutex> lock(collectionMutex_);
collection_.clear();
}
// LongLivedObject
LongLivedObject::LongLivedObject() {}
void LongLivedObject::allowRelease() {
LongLivedObjectCollection::get().remove(this);
}
} // namespace react
} // namespace facebook