pass cachedLayout and cachedMeasure measures to plugin

Summary: Passing whether layout cache or measure cache was used or not

Reviewed By: davidaurelio

Differential Revision: D15920937

fbshipit-source-id: a6728e7af07ea228a285f824fbdfddc8130c5990
This commit is contained in:
Sidharth Guglani
2019-06-24 08:29:59 -07:00
committed by Facebook Github Bot
parent 2dc5a16d1f
commit 39996512fc
3 changed files with 52 additions and 2 deletions

View File

@@ -0,0 +1,34 @@
/**
* 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.
*/
package com.facebook.yoga;
public enum YogaLayoutType {
LAYOUT(0),
MEASURE(1),
CACHED_LAYOUT(2),
CACHED_MEASURE(3);
private final int mIntValue;
YogaLayoutType(int intValue) {
mIntValue = intValue;
}
public int intValue() {
return mIntValue;
}
public static YogaLayoutType fromInt(int value) {
switch (value) {
case 0: return LAYOUT;
case 1: return MEASURE;
case 2: return CACHED_LAYOUT;
case 3: return CACHED_MEASURE;
default: throw new IllegalArgumentException("Unknown enum value: " + value);
}
}
}

View File

@@ -3928,7 +3928,16 @@ bool YGLayoutNodeInternal(
layout->generationCount = gCurrentGenerationCount;
#ifdef YG_ENABLE_EVENTS
Event::publish<Event::NodeLayout>(node, {performLayout, layoutContext});
LayoutType layoutType;
if (performLayout) {
layoutType = !needToVisitNode && cachedResults == &layout->cachedLayout
? LayoutType::kCachedLayout
: LayoutType::kLayout;
} else {
layoutType = cachedResults != nullptr ? LayoutType::kCachedMeasure
: LayoutType::kMeasure;
}
Event::publish<Event::NodeLayout>(node, {layoutType, layoutContext});
#endif
return (needToVisitNode || cachedResults == nullptr);

View File

@@ -17,6 +17,13 @@ struct YGNode;
namespace facebook {
namespace yoga {
enum LayoutType : int {
kLayout = 0,
kMeasure = 1,
kCachedLayout = 2,
kCachedMeasure = 3
};
struct Event {
enum Type {
NodeAllocation,
@@ -99,7 +106,7 @@ struct Event::TypedData<Event::NodeMeasure> {
template <>
struct Event::TypedData<Event::NodeLayout> {
bool performLayout;
LayoutType layoutType;
void* layoutContext;
};