From daccb54353166ddceef2bfb079dc319870ae8268 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 24 Feb 2019 11:55:49 -0800 Subject: [PATCH] Add new performance metric in Fabric Summary: This diff adds a new metric in Fabric to measure time it takes to Fabric finish transaction in CPP Reviewed By: shergin Differential Revision: D14198153 fbshipit-source-id: 987d1db1ae669906192060cc9b9e077901da6787 --- .../com/facebook/react/fabric/FabricUIManager.java | 10 ++++++++-- .../java/com/facebook/react/fabric/jsi/jni/Binding.cpp | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index c4f21359e14..7c2bbb05080 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -114,6 +114,9 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { private long mCommitStartTime = 0l; private long mLayoutTime = 0l; private long mFinishTransactionTime = 0l; + private int mLastWidthMeasureSpec = 0; + private int mLastHeightMeasureSpec = 0; + private long mFinishTransactionCPPTime = 0l; public FabricUIManager( ReactApplicationContext reactContext, @@ -273,7 +276,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { @Override public void synchronouslyUpdateViewOnUIThread(int reactTag, ReadableMap props) { long time = SystemClock.uptimeMillis(); - scheduleMountItems(updatePropsMountItem(reactTag, props), time, time, time); + scheduleMountItems(updatePropsMountItem(reactTag, props), time, 0, time, time); } /** @@ -286,11 +289,13 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { final MountItem mountItems, long commitStartTime, long layoutTime, - long finishTransactionStartTime) { + long finishTransactionStartTime, + long finishTransactionEndTime) { // TODO T31905686: support multithreading mCommitStartTime = commitStartTime; mLayoutTime = layoutTime; + mFinishTransactionCPPTime = finishTransactionEndTime - finishTransactionStartTime; mFinishTransactionTime = SystemClock.uptimeMillis() - finishTransactionStartTime; mDispatchViewUpdatesTime = SystemClock.uptimeMillis(); synchronized (mMountItemsLock) { @@ -430,6 +435,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { performanceCounters.put("BatchedExecutionTime", mBatchedExecutionTime); performanceCounters.put("NonBatchedExecutionTime", mNonBatchedExecutionTime); performanceCounters.put("FinishFabricTransactionTime", mFinishTransactionTime); + performanceCounters.put("FinishFabricTransactionCPPTime", mFinishTransactionCPPTime); return performanceCounters; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp index 9bb5f12bd58..9825b379df4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp @@ -441,15 +441,18 @@ void Binding::schedulerDidFinishTransaction( static auto scheduleMountItems = jni::findClassStatic(UIManagerJavaDescriptor) - ->getMethod( + ->getMethod( "scheduleMountItems"); + long finishTransactionEndTime = getTime(); + scheduleMountItems( javaUIManager_, batch.get(), commitStartTime, layoutTime, - finishTransactionStartTime); + finishTransactionStartTime, + finishTransactionEndTime); } void Binding::setPixelDensity(float pointScaleFactor) {