Remove isTextNode optimization
Reviewed By: astreet Differential Revision: D4146785 fbshipit-source-id: e20d780fbd5759b8f38b809e8cadf29cedee82a8
This commit is contained in:
parent
47d9cb4dac
commit
81e4139edc
|
@ -89,7 +89,6 @@ typedef struct CSSNode {
|
|||
CSSLayout layout;
|
||||
uint32_t lineIndex;
|
||||
bool hasNewLayout;
|
||||
bool isTextNode;
|
||||
CSSNodeRef parent;
|
||||
CSSNodeListRef children;
|
||||
bool isDirty;
|
||||
|
@ -382,7 +381,6 @@ void CSSNodeStyleSetFlex(const CSSNodeRef node, const float flex) {
|
|||
|
||||
CSS_NODE_PROPERTY_IMPL(void *, Context, context, context);
|
||||
CSS_NODE_PROPERTY_IMPL(CSSPrintFunc, PrintFunc, printFunc, print);
|
||||
CSS_NODE_PROPERTY_IMPL(bool, IsTextnode, isTextNode, isTextNode);
|
||||
CSS_NODE_PROPERTY_IMPL(bool, HasNewLayout, hasNewLayout, hasNewLayout);
|
||||
|
||||
CSS_NODE_STYLE_PROPERTY_IMPL(CSSDirection, Direction, direction, direction);
|
||||
|
@ -2104,8 +2102,7 @@ static inline bool newMeasureSizeIsStricterAndStillValid(CSSMeasureMode sizeMode
|
|||
lastSize > size && lastComputedSize <= size;
|
||||
}
|
||||
|
||||
bool CSSNodeCanUseCachedMeasurement(const bool isTextNode,
|
||||
const CSSMeasureMode widthMode,
|
||||
bool CSSNodeCanUseCachedMeasurement(const CSSMeasureMode widthMode,
|
||||
const float width,
|
||||
const CSSMeasureMode heightMode,
|
||||
const float height,
|
||||
|
@ -2134,7 +2131,7 @@ bool CSSNodeCanUseCachedMeasurement(const bool isTextNode,
|
|||
newMeasureSizeIsStricterAndStillValid(
|
||||
widthMode, width - marginRow, lastWidthMode, lastWidth, lastComputedWidth);
|
||||
|
||||
const bool heightIsCompatible = isTextNode || hasSameHeightSpec ||
|
||||
const bool heightIsCompatible = hasSameHeightSpec ||
|
||||
newSizeIsExactAndMatchesOldMeasuredSize(heightMode,
|
||||
height - marginColumn,
|
||||
lastComputedHeight) ||
|
||||
|
@ -2203,8 +2200,7 @@ bool layoutNodeInternal(const CSSNodeRef node,
|
|||
const float marginAxisColumn = getMarginAxis(node, CSSFlexDirectionColumn);
|
||||
|
||||
// First, try to use the layout cache.
|
||||
if (CSSNodeCanUseCachedMeasurement(node->isTextNode,
|
||||
widthMeasureMode,
|
||||
if (CSSNodeCanUseCachedMeasurement(widthMeasureMode,
|
||||
availableWidth,
|
||||
heightMeasureMode,
|
||||
availableHeight,
|
||||
|
@ -2220,8 +2216,7 @@ bool layoutNodeInternal(const CSSNodeRef node,
|
|||
} else {
|
||||
// Try to use the measurement cache.
|
||||
for (uint32_t i = 0; i < layout->nextCachedMeasurementsIndex; i++) {
|
||||
if (CSSNodeCanUseCachedMeasurement(node->isTextNode,
|
||||
widthMeasureMode,
|
||||
if (CSSNodeCanUseCachedMeasurement(widthMeasureMode,
|
||||
availableWidth,
|
||||
heightMeasureMode,
|
||||
availableHeight,
|
||||
|
|
|
@ -161,8 +161,7 @@ WIN_EXPORT void CSSNodePrint(const CSSNodeRef node, const CSSPrintOptions option
|
|||
|
||||
WIN_EXPORT bool CSSValueIsUndefined(const float value);
|
||||
|
||||
WIN_EXPORT bool CSSNodeCanUseCachedMeasurement(const bool isTextNode,
|
||||
const CSSMeasureMode widthMode,
|
||||
WIN_EXPORT bool CSSNodeCanUseCachedMeasurement(const CSSMeasureMode widthMode,
|
||||
const float width,
|
||||
const CSSMeasureMode heightMode,
|
||||
const float height,
|
||||
|
@ -195,7 +194,6 @@ WIN_EXPORT bool CSSNodeCanUseCachedMeasurement(const bool isTextNode,
|
|||
CSS_NODE_PROPERTY(void *, Context, context);
|
||||
CSS_NODE_PROPERTY(CSSMeasureFunc, MeasureFunc, measureFunc);
|
||||
CSS_NODE_PROPERTY(CSSPrintFunc, PrintFunc, printFunc);
|
||||
CSS_NODE_PROPERTY(bool, IsTextnode, isTextNode);
|
||||
CSS_NODE_PROPERTY(bool, HasNewLayout, hasNewLayout);
|
||||
|
||||
CSS_NODE_STYLE_PROPERTY(CSSDirection, Direction, direction);
|
||||
|
|
|
@ -140,18 +140,6 @@ public class CSSNode implements CSSNodeAPI<CSSNode> {
|
|||
return mChildren == null ? -1 : mChildren.indexOf(child);
|
||||
}
|
||||
|
||||
private native void jni_CSSNodeSetIsTextNode(long nativePointer, boolean isTextNode);
|
||||
@Override
|
||||
public void setIsTextNode(boolean isTextNode) {
|
||||
jni_CSSNodeSetIsTextNode(mNativePointer, isTextNode);
|
||||
}
|
||||
|
||||
private native boolean jni_CSSNodeGetIsTextNode(long nativePointer);
|
||||
@Override
|
||||
public boolean isTextNode() {
|
||||
return jni_CSSNodeGetIsTextNode(mNativePointer);
|
||||
}
|
||||
|
||||
private native void jni_CSSNodeCalculateLayout(long nativePointer);
|
||||
@Override
|
||||
public void calculateLayout(CSSLayoutContext layoutContext) {
|
||||
|
|
|
@ -31,8 +31,6 @@ public interface CSSNodeAPI<CSSNodeType extends CSSNodeAPI> {
|
|||
int indexOf(CSSNodeType child);
|
||||
void setMeasureFunction(MeasureFunction measureFunction);
|
||||
boolean isMeasureDefined();
|
||||
void setIsTextNode(boolean isTextNode);
|
||||
boolean isTextNode();
|
||||
void calculateLayout(CSSLayoutContext layoutContext);
|
||||
boolean isDirty();
|
||||
boolean hasNewLayout();
|
||||
|
|
|
@ -58,7 +58,6 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
|
|||
private @Nullable CSSNodeDEPRECATED mParent;
|
||||
private @Nullable MeasureFunction mMeasureFunction = null;
|
||||
private LayoutState mLayoutState = LayoutState.DIRTY;
|
||||
private boolean mIsTextNode = false;
|
||||
private Object mData;
|
||||
|
||||
@Override
|
||||
|
@ -124,16 +123,6 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
|
|||
return mMeasureFunction != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsTextNode(boolean isTextNode) {
|
||||
mIsTextNode = isTextNode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTextNode() {
|
||||
return mIsTextNode;
|
||||
}
|
||||
|
||||
long measure(float width, CSSMeasureMode widthMode, float height, CSSMeasureMode heightMode) {
|
||||
if (!isMeasureDefined()) {
|
||||
throw new RuntimeException("Measure function isn't defined!");
|
||||
|
|
|
@ -240,7 +240,6 @@ public class LayoutEngine {
|
|||
}
|
||||
|
||||
/*package*/ static boolean canUseCachedMeasurement(
|
||||
boolean isTextNode,
|
||||
float availableWidth,
|
||||
float availableHeight,
|
||||
float marginRow,
|
||||
|
@ -281,38 +280,6 @@ public class LayoutEngine {
|
|||
return true;
|
||||
}
|
||||
|
||||
// We know this to be text so we can apply some more specialized heuristics.
|
||||
if (isTextNode) {
|
||||
if (isWidthSame) {
|
||||
if (heightMeasureMode == CSSMeasureMode.UNDEFINED) {
|
||||
// Width is the same and height is not restricted. Re-use cahced value.
|
||||
return true;
|
||||
}
|
||||
|
||||
if (heightMeasureMode == CSSMeasureMode.AT_MOST &&
|
||||
cachedLayout.computedHeight < (availableHeight - marginColumn)) {
|
||||
// Width is the same and height restriction is greater than the cached height. Re-use cached value.
|
||||
return true;
|
||||
}
|
||||
|
||||
// Width is the same but height restriction imposes smaller height than previously measured.
|
||||
// Update the cached value to respect the new height restriction.
|
||||
cachedLayout.computedHeight = availableHeight - marginColumn;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (cachedLayout.widthMeasureMode == CSSMeasureMode.UNDEFINED) {
|
||||
if (widthMeasureMode == CSSMeasureMode.UNDEFINED ||
|
||||
(widthMeasureMode == CSSMeasureMode.AT_MOST &&
|
||||
cachedLayout.computedWidth <= (availableWidth - marginRow))) {
|
||||
// Previsouly this text was measured with no width restriction, if width is now restricted
|
||||
// but to a larger value than the previsouly measured width we can re-use the measurement
|
||||
// as we know it will fit.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -364,13 +331,13 @@ public class LayoutEngine {
|
|||
node.style.margin.getWithFallback(trailingSpacing[CSS_FLEX_DIRECTION_COLUMN], trailing[CSS_FLEX_DIRECTION_COLUMN]);
|
||||
|
||||
// First, try to use the layout cache.
|
||||
if (canUseCachedMeasurement(node.isTextNode(), availableWidth, availableHeight, marginAxisRow, marginAxisColumn,
|
||||
if (canUseCachedMeasurement(availableWidth, availableHeight, marginAxisRow, marginAxisColumn,
|
||||
widthMeasureMode, heightMeasureMode, layout.cachedLayout)) {
|
||||
cachedResults = layout.cachedLayout;
|
||||
} else {
|
||||
// Try to use the measurement cache.
|
||||
for (int i = 0; i < layout.nextCachedMeasurementsIndex; i++) {
|
||||
if (canUseCachedMeasurement(node.isTextNode(), availableWidth, availableHeight, marginAxisRow, marginAxisColumn,
|
||||
if (canUseCachedMeasurement(availableWidth, availableHeight, marginAxisRow, marginAxisColumn,
|
||||
widthMeasureMode, heightMeasureMode, layout.cachedMeasurements[i])) {
|
||||
cachedResults = layout.cachedMeasurements[i];
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue