Remove Yoga-internal.h (#1452)

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

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

This removes the last remnant from `Yoga-interna.h`, `YGNodeDellocate()`. The API is renamed to `YGNodeFinalize` to give it the explicit purpose of freeing the node from a garbage collector, and made public with that documented contract.

With that, every top-level header is now a public API, and Yoga's JNI bindings do not need to rely on private headers anymore.

Changelog: [Internal]

Reviewed By: joevilches

Differential Revision: D51014340

fbshipit-source-id: 553f04b62c78b76f9102cd6197146650955aeec5
This commit is contained in:
Nick Gerleman
2023-11-07 21:27:59 -08:00
committed by Facebook GitHub Bot
parent 9eb8a62739
commit 12a8d16b62
8 changed files with 19 additions and 38 deletions

View File

@@ -41,7 +41,7 @@ Pod::Spec.new do |spec|
spec.source_files = 'yoga/**/*.{h,cpp}'
spec.header_mappings_dir = 'yoga'
public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h'
public_header_files = 'yoga/*.h'
spec.public_header_files = public_header_files
all_header_files = 'yoga/**/*.h'

View File

@@ -31,7 +31,7 @@ public class YogaNative {
// YGNode related
static native long jni_YGNodeNewJNI();
static native long jni_YGNodeNewWithConfigJNI(long configPointer);
static native void jni_YGNodeDeallocateJNI(long nativePointer);
static native void jni_YGNodeFinalizeJNI(long nativePointer);
static native void jni_YGNodeResetJNI(long nativePointer);
static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index);
static native void jni_YGNodeSwapChildJNI(long nativePointer, long childPointer, int index);

View File

@@ -29,7 +29,7 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase {
if (mNativePointer != 0) {
long nativePointer = mNativePointer;
mNativePointer = 0;
YogaNative.jni_YGNodeDeallocateJNI(nativePointer);
YogaNative.jni_YGNodeFinalizeJNI(nativePointer);
}
}
}

View File

@@ -6,6 +6,7 @@
*/
#include "YGJNIVanilla.h"
#include <bit>
#include <cstring>
#include <iostream>
#include <memory>
@@ -16,9 +17,6 @@
#include "common.h"
#include "jni.h"
#include <yoga/Yoga-internal.h>
#include <yoga/bits/BitCast.h>
using namespace facebook;
using namespace facebook::yoga;
using namespace facebook::yoga::vanillajni;
@@ -190,12 +188,12 @@ static void jni_YGConfigSetLoggerJNI(
}
static void
jni_YGNodeDeallocateJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {
jni_YGNodeFinalizeJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {
if (nativePointer == 0) {
return;
}
const YGNodeRef node = _jlong2YGNodeRef(nativePointer);
YGNodeDeallocate(node);
YGNodeFinalize(node);
}
static void
@@ -637,9 +635,8 @@ static YGSize YGJNIMeasureFunc(
uint32_t wBits = 0xFFFFFFFF & (measureResult >> 32);
uint32_t hBits = 0xFFFFFFFF & measureResult;
const float measuredWidth = yoga::bit_cast<float>(wBits);
const float measuredHeight = yoga::bit_cast<float>(hBits);
float measuredWidth = std::bit_cast<float>(wBits);
float measuredHeight = std::bit_cast<float>(hBits);
return YGSize{measuredWidth, measuredHeight};
} else {
@@ -751,7 +748,7 @@ static JNINativeMethod methods[] = {
(void*)jni_YGConfigSetLoggerJNI},
{"jni_YGNodeNewJNI", "()J", (void*)jni_YGNodeNewJNI},
{"jni_YGNodeNewWithConfigJNI", "(J)J", (void*)jni_YGNodeNewWithConfigJNI},
{"jni_YGNodeDeallocateJNI", "(J)V", (void*)jni_YGNodeDeallocateJNI},
{"jni_YGNodeFinalizeJNI", "(J)V", (void*)jni_YGNodeFinalizeJNI},
{"jni_YGNodeResetJNI", "(J)V", (void*)jni_YGNodeResetJNI},
{"jni_YGNodeInsertChildJNI", "(JJI)V", (void*)jni_YGNodeInsertChildJNI},
{"jni_YGNodeSwapChildJNI", "(JJI)V", (void*)jni_YGNodeSwapChildJNI},

View File

@@ -6,7 +6,6 @@
*/
#include <gtest/gtest.h>
#include <yoga/Yoga-internal.h>
#include <yoga/Yoga.h>
TEST(YogaTest, rounding_value) {

View File

@@ -1,22 +0,0 @@
/*
* 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.
*/
#pragma once
#include <algorithm>
#include <cmath>
#include <vector>
#include <yoga/Yoga.h>
YG_EXTERN_C_BEGIN
// Deallocates a Yoga Node. Unlike YGNodeFree, does not remove the node from
// its parent or children.
YG_EXPORT void YGNodeDeallocate(YGNodeRef node);
YG_EXTERN_C_END

View File

@@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
#include <yoga/Yoga-internal.h>
#include <yoga/Yoga.h>
#include <yoga/algorithm/Cache.h>
@@ -136,10 +135,12 @@ void YGNodeFree(const YGNodeRef nodeRef) {
}
node->clearChildren();
YGNodeDeallocate(node);
Event::publish<Event::NodeDeallocation>(node, {YGNodeGetConfig(node)});
delete resolveRef(node);
}
void YGNodeDeallocate(const YGNodeRef node) {
void YGNodeFinalize(const YGNodeRef node) {
Event::publish<Event::NodeDeallocation>(node, {YGNodeGetConfig(node)});
delete resolveRef(node);
}

View File

@@ -59,6 +59,12 @@ YG_EXPORT void YGNodeFreeRecursiveWithCleanupFunc(
YGNodeRef node,
YGNodeCleanupFunc cleanup);
YG_EXPORT void YGNodeFreeRecursive(YGNodeRef node);
// Frees the Yoga node without disconnecting it from its owner or children.
// Allows garbage collecting Yoga nodes in parallel when the entire tree is
// unrechable.
YG_EXPORT void YGNodeFinalize(YGNodeRef node);
YG_EXPORT void YGNodeReset(YGNodeRef node);
YG_EXPORT void YGNodeInsertChild(YGNodeRef node, YGNodeRef child, size_t index);