From efd27efd70ba298db618973a1d2d5f89e1b74d34 Mon Sep 17 00:00:00 2001 From: Joe Vilches Date: Fri, 2 Feb 2024 15:44:23 -0800 Subject: [PATCH] Ability to capture trees as JSON files (#1565) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1565 This adds a `captureTree` method intended to be injected in somewhere where you would like a JSON representation of a yoga tree. Right now it is very simple and just calls on `nodeToString` to serialize a node into JSON, and then saves that into a file in the given path. Some buck file changes needed to be done as well to use this in other files. Reviewed By: NickGerleman Differential Revision: D52972995 fbshipit-source-id: f4e09a815edef92ab959cfc76bacccbce225d940 --- capture/CaptureTree.cpp | 22 ++++++++++++++++++++++ capture/CaptureTree.h | 18 ++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 capture/CaptureTree.cpp create mode 100644 capture/CaptureTree.h diff --git a/capture/CaptureTree.cpp b/capture/CaptureTree.cpp new file mode 100644 index 00000000..54d681a1 --- /dev/null +++ b/capture/CaptureTree.cpp @@ -0,0 +1,22 @@ +/* + * 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 + +#include +#include + +namespace facebook::yoga { + +void captureTree(YGNodeRef node, const std::filesystem::path& path) { + std::string str; + nodeToString(str, node, YGPrintOptionsStyle | YGPrintOptionsChildren); + std::ofstream file(path); + file << str; +} + +} // namespace facebook::yoga diff --git a/capture/CaptureTree.h b/capture/CaptureTree.h new file mode 100644 index 00000000..5d809859 --- /dev/null +++ b/capture/CaptureTree.h @@ -0,0 +1,18 @@ +/* + * 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 + +#include + +namespace facebook::yoga { + +void captureTree(YGNodeRef node, const std::filesystem::path& path); + +} // namespace facebook::yoga