Layout marker metadata

Summary:
@public

Adds marker meta data to `YGMarkerLayout`: the number of measures, and the numbers of layouts for all nodes in the tree.

Reviewed By: SidharthGuglani

Differential Revision: D13838975

fbshipit-source-id: d575c26a3d5a4f0b66834eb6bedecadc3f3ca265
This commit is contained in:
David Aurelio
2019-01-29 10:30:11 -08:00
committed by Facebook Github Bot
parent b4b009c2d8
commit cbea5d44b8
3 changed files with 53 additions and 2 deletions

View File

@@ -32,6 +32,9 @@ struct MarkerTest : public ::testing::Test {
struct EndData {
Data data;
void* cookie;
union {
YGMarkerLayoutData layout;
} markerData;
};
static struct {
@@ -43,6 +46,7 @@ struct MarkerTest : public ::testing::Test {
static void endMarker(YGMarker, YGNodeRef, YGMarkerData, void*);
static uniquePtr<YGConfig> makeConfig();
static uniquePtr<YGNode> makeNode(uniquePtr<YGConfig>&);
static uniquePtr<YGNode> makeNode(uniquePtr<YGConfig>&, uniquePtr<YGNode>&);
void SetUp() override;
};
@@ -95,6 +99,28 @@ TEST_F(MarkerTest, layout_marker) {
ASSERT_EQ(markerCookie.start.node, root.get());
}
TEST_F(MarkerTest, layout_marker_counts_single_node_layout) {
auto config = makeConfig();
auto root = makeNode(config);
YGNodeCalculateLayout(root.get(), YGUndefined, YGUndefined, YGDirectionLTR);
ASSERT_EQ(markerCookie.end.markerData.layout.layouts, 1);
ASSERT_EQ(markerCookie.end.markerData.layout.measures, 0);
}
TEST_F(MarkerTest, layout_marker_counts_multi_node_layout) {
auto config = makeConfig();
auto root = makeNode(config);
auto childA = makeNode(config, root);
auto childB = makeNode(config, root);
YGNodeCalculateLayout(root.get(), YGUndefined, YGUndefined, YGDirectionLTR);
ASSERT_EQ(markerCookie.end.markerData.layout.layouts, 3);
ASSERT_EQ(markerCookie.end.markerData.layout.measures, 4);
}
void* MarkerTest::startMarker(
YGMarker marker,
YGNodeRef node,
@@ -108,7 +134,12 @@ void MarkerTest::endMarker(
YGNodeRef node,
YGMarkerData data,
void* id) {
markerCookie.end = {{marker, node, data}, id};
markerCookie.end = {{marker, node, data}, id, {}};
switch (marker) {
case YGMarkerLayout:
markerCookie.end.markerData.layout = *marker::data<YGMarkerLayout>(data);
break;
};
}
uniquePtr<YGConfig> MarkerTest::makeConfig() {
@@ -122,6 +153,14 @@ uniquePtr<YGNode> MarkerTest::makeNode(uniquePtr<YGConfig>& config) {
return n;
}
uniquePtr<YGNode> MarkerTest::makeNode(
uniquePtr<YGConfig>& config,
uniquePtr<YGNode>& owner) {
auto n = makeNode(config);
YGNodeInsertChild(owner.get(), n.get(), YGNodeGetChildCount(owner.get()));
return n;
}
void MarkerTest::SetUp() {
markerCookie = {};
}