Revert D2679408 (Only send layout update operation to nativehierarchymanager when layout actually changes)

Reviewed By: andreicoman11

Differential Revision: D2712224

fb-gh-sync-id: e6aebe6fcf54e9f36cac092cab801bb97a65dbfd
This commit is contained in:
Alon Schwarz
2015-12-02 05:50:34 -08:00
committed by facebook-github-bot-7
parent 30a5eb51f8
commit f69ac1eaef
2 changed files with 22 additions and 28 deletions

View File

@@ -18,7 +18,6 @@ import com.facebook.csslayout.CSSNode;
import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.Assertions;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.uimanager.events.EventDispatcher;
/** /**
* Base node class for representing virtual tree of React nodes. Shadow nodes are used primarily * Base node class for representing virtual tree of React nodes. Shadow nodes are used primarily
@@ -203,37 +202,18 @@ public class ReactShadowNode extends CSSNode {
float absoluteX, float absoluteX,
float absoluteY, float absoluteY,
UIViewOperationQueue uiViewOperationQueue, UIViewOperationQueue uiViewOperationQueue,
NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer, NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer) {
EventDispatcher eventDispatcher) {
if (mNodeUpdated) { if (mNodeUpdated) {
onCollectExtraUpdates(uiViewOperationQueue); onCollectExtraUpdates(uiViewOperationQueue);
} }
if (hasNewLayout()) { if (hasNewLayout()) {
float absoluteLeft = Math.round(absoluteX + getLayoutX()); mAbsoluteLeft = Math.round(absoluteX + getLayoutX());
float absoluteTop = Math.round(absoluteY + getLayoutY()); mAbsoluteTop = Math.round(absoluteY + getLayoutY());
float absoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth()); mAbsoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth());
float absoluteBottom = Math.round(absoluteY + getLayoutY() + getLayoutHeight()); mAbsoluteBottom = Math.round(absoluteY + getLayoutY() + getLayoutHeight());
// If the layout didn't change this should calculate exactly same values, it's fine to compare
// floats with "==" in this case
if (absoluteLeft != mAbsoluteLeft || absoluteTop != mAbsoluteTop ||
absoluteRight != mAbsoluteRight || absoluteBottom != mAbsoluteBottom) {
mAbsoluteLeft = absoluteLeft;
mAbsoluteTop = absoluteTop;
mAbsoluteRight = absoluteRight;
mAbsoluteBottom = absoluteBottom;
nativeViewHierarchyOptimizer.handleUpdateLayout(this); nativeViewHierarchyOptimizer.handleUpdateLayout(this);
if (mShouldNotifyOnLayout) {
eventDispatcher.dispatchEvent(
OnLayoutEvent.obtain(
getReactTag(),
getScreenX(),
getScreenY(),
getScreenWidth(),
getScreenHeight()));
}
}
} }
} }
@@ -284,6 +264,10 @@ public class ReactShadowNode extends CSSNode {
mShouldNotifyOnLayout = shouldNotifyOnLayout; mShouldNotifyOnLayout = shouldNotifyOnLayout;
} }
/* package */ boolean shouldNotifyOnLayout() {
return mShouldNotifyOnLayout;
}
/** /**
* Adds a child that the native view hierarchy will have at this index in the native view * Adds a child that the native view hierarchy will have at this index in the native view
* corresponding to this node. * corresponding to this node.

View File

@@ -698,8 +698,18 @@ public class UIImplementation {
absoluteX, absoluteX,
absoluteY, absoluteY,
mOperationsQueue, mOperationsQueue,
mNativeViewHierarchyOptimizer, mNativeViewHierarchyOptimizer);
eventDispatcher);
// notify JS about layout event if requested
if (cssNode.shouldNotifyOnLayout()) {
eventDispatcher.dispatchEvent(
OnLayoutEvent.obtain(
tag,
cssNode.getScreenX(),
cssNode.getScreenY(),
cssNode.getScreenWidth(),
cssNode.getScreenHeight()));
}
} }
cssNode.markUpdateSeen(); cssNode.markUpdateSeen();
} }