Remove JNI Binding usage of layoutContext (#1377)

Summary:
X-link: https://github.com/facebook/react-native/pull/39402

Pull Request resolved: https://github.com/facebook/yoga/pull/1377

To avoid keeping a per-node mapping on native Yoga nodes to Java nodes, a per-layout context was added, to be able to pass information from the start of the layout, to measure functions, log functions, etc.

The way this was done was super invasive, and added quite a few private APIs used only by the JNI functions.

This change removes the context-using functions from the JNI bindings in favor of it managing its own context. Next diff removes all the cruft.

Reviewed By: javache

Differential Revision: D49179243

fbshipit-source-id: 7e4944bead864e6b73fd2208a47c5725c18ff2b0
This commit is contained in:
Nick Gerleman
2023-09-12 19:08:55 -07:00
committed by Facebook GitHub Bot
parent 700be8c8ad
commit b1e0140aaa
4 changed files with 88 additions and 33 deletions

View File

@@ -0,0 +1,34 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include <stack>
#include "LayoutContext.h"
namespace facebook::yoga::vanillajni {
namespace {
std::stack<PtrJNodeMapVanilla*>& getContexts() {
static thread_local std::stack<PtrJNodeMapVanilla*> contexts;
return contexts;
}
} // namespace
LayoutContext::Provider::Provider(PtrJNodeMapVanilla* data) {
getContexts().push(data);
}
LayoutContext::Provider::~Provider() {
getContexts().pop();
}
/*static*/ PtrJNodeMapVanilla* LayoutContext::getNodeMap() {
return getContexts().empty() ? nullptr : getContexts().top();
}
} // namespace facebook::yoga::vanillajni