From b5d26679c4bcc6126d04a98022d86821b5e5de51 Mon Sep 17 00:00:00 2001 From: Andrei Coman Date: Mon, 22 Feb 2016 03:25:58 -0800 Subject: [PATCH] Use nanoTime instead of currentTimeMillis for events Reviewed By: foghina Differential Revision: D2953917 fb-gh-sync-id: effd09849a5504c9eb7c684a510e616fdcfcdf6e shipit-source-id: effd09849a5504c9eb7c684a510e616fdcfcdf6e --- .../com/facebook/react/ReactRootView.java | 14 +++++------ .../react/uimanager/OnLayoutEvent.java | 4 ++-- .../uimanager/events/EventDispatcher.java | 9 +------- .../drawer/ReactDrawerLayoutManager.java | 12 +++++----- .../react/views/image/ReactImageView.java | 10 ++++---- .../views/picker/ReactPickerManager.java | 6 ++--- .../RecyclerViewBackedScrollView.java | 6 ++--- .../views/scroll/ReactScrollViewHelper.java | 4 ++-- .../SwipeRefreshLayoutManager.java | 6 ++--- .../com/facebook/react/views/switchview/BUCK | 1 + .../views/switchview/ReactSwitchManager.java | 8 +++---- .../textinput/ReactTextInputManager.java | 16 ++++++------- .../views/toolbar/ReactToolbarManager.java | 8 +++---- .../react/views/viewpager/ReactViewPager.java | 8 +++---- .../views/webview/ReactWebViewManager.java | 23 +++++++++---------- 15 files changed, 64 insertions(+), 71 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 300be54bc..bf4b8b4bc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -14,7 +14,6 @@ import javax.annotation.Nullable; import android.content.Context; import android.graphics.Rect; import android.os.Bundle; -import android.os.SystemClock; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -28,6 +27,7 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.ReactConstants; +import com.facebook.react.common.SystemClock; import com.facebook.react.common.annotations.VisibleForTesting; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.facebook.react.uimanager.DisplayMetricsHolder; @@ -151,7 +151,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.START, ev, mTargetCoordinates[0], @@ -173,7 +173,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.END, ev, mTargetCoordinates[0], @@ -184,7 +184,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.MOVE, ev, mTargetCoordinates[0], @@ -194,7 +194,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.START, ev, mTargetCoordinates[0], @@ -204,7 +204,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.END, ev, mTargetCoordinates[0], @@ -255,7 +255,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout implements RootView Assertions.assertNotNull(eventDispatcher).dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), TouchEventType.CANCEL, androidEvent, mTargetCoordinates[0], diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java index 155776b71..c2b5c8a6e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java @@ -9,11 +9,11 @@ package com.facebook.react.uimanager; -import android.os.SystemClock; import android.support.v4.util.Pools; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -45,7 +45,7 @@ public class OnLayoutEvent extends Event { } protected void init(int viewTag, int x, int y, int width, int height) { - super.init(viewTag, SystemClock.uptimeMillis()); + super.init(viewTag, SystemClock.nanoTime()); mX = x; mY = y; mWidth = width; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java index c8635d051..d55401af6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java @@ -75,14 +75,7 @@ public class EventDispatcher implements LifecycleEventListener { return 1; } - long diff = lhs.getTimestampMs() - rhs.getTimestampMs(); - if (diff == 0) { - return 0; - } else if (diff < 0) { - return -1; - } else { - return 1; - } + return lhs.getTimestampMs() < rhs.getTimestampMs() ? -1 : 1; } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java index 370629181..d1ec7f831 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java @@ -13,7 +13,6 @@ import javax.annotation.Nullable; import java.util.Map; -import android.os.SystemClock; import android.support.v4.widget.DrawerLayout; import android.view.Gravity; import android.view.View; @@ -21,11 +20,12 @@ import android.view.View; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.MapBuilder; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.PixelUtil; -import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.drawer.events.DrawerClosedEvent; import com.facebook.react.views.drawer.events.DrawerOpenedEvent; @@ -151,25 +151,25 @@ public class ReactDrawerLayoutManager extends ViewGroupManager @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - mReactPicker.getId(), SystemClock.uptimeMillis(), position)); + mReactPicker.getId(), SystemClock.nanoTime(), position)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java b/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java index f1729c55c..337fd5cfb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.List; import android.content.Context; -import android.os.SystemClock; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.MotionEvent; @@ -15,6 +14,7 @@ import android.view.ViewGroup; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.common.SystemClock; import com.facebook.react.common.annotations.VisibleForTesting; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.events.NativeGestureUtil; @@ -344,7 +344,7 @@ public class RecyclerViewBackedScrollView extends RecyclerView { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -359,7 +359,7 @@ public class RecyclerViewBackedScrollView extends RecyclerView { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), getWidth(), newTotalChildrenHeight)); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java index 3ee46350d..fd46f677b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java @@ -9,11 +9,11 @@ package com.facebook.react.views.scroll; -import android.os.SystemClock; import android.view.View; import android.view.ViewGroup; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.UIManagerModule; /** @@ -57,7 +57,7 @@ public class ReactScrollViewHelper { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( scrollView.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), scrollEventType, scrollView.getScrollX(), scrollView.getScrollY(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java index 07a42e049..009f5a126 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java @@ -14,17 +14,17 @@ import javax.annotation.Nullable; import java.util.Map; import android.graphics.Color; -import android.os.SystemClock; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.MapBuilder; -import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewGroupManager; import com.facebook.react.uimanager.ViewProps; +import com.facebook.react.uimanager.annotations.ReactProp; /** * ViewManager for {@link ReactSwipeRefreshLayout} which allows the user to "pull to refresh" a @@ -91,7 +91,7 @@ public class SwipeRefreshLayoutManager extends ViewGroupManager { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( buttonView.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index f4b9e34dc..d6ce4f0de 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -15,7 +15,6 @@ import java.util.LinkedList; import java.util.Map; import android.graphics.PorterDuff; -import android.os.SystemClock; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; @@ -33,6 +32,7 @@ import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.MapBuilder; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.BaseViewManager; import com.facebook.react.uimanager.LayoutShadowNode; import com.facebook.react.uimanager.PixelUtil; @@ -427,7 +427,7 @@ public class ReactTextInputManager extends BaseViewManager { @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(view.getId(), SystemClock.uptimeMillis(), -1)); + new ToolbarClickEvent(view.getId(), SystemClock.nanoTime(), -1)); } }); @@ -142,7 +142,7 @@ public class ReactToolbarManager extends ViewGroupManager { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( view.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), menuItem.getOrder())); return true; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java index 3ad5c55e0..c522e0391 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java @@ -12,7 +12,6 @@ package com.facebook.react.views.viewpager; import java.util.ArrayList; import java.util.List; -import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.MotionEvent; @@ -20,6 +19,7 @@ import android.view.View; import android.view.ViewGroup; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.uimanager.events.NativeGestureUtil; @@ -91,14 +91,14 @@ import com.facebook.react.uimanager.events.NativeGestureUtil; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mEventDispatcher.dispatchEvent( - new PageScrollEvent(getId(), SystemClock.uptimeMillis(), position, positionOffset)); + new PageScrollEvent(getId(), SystemClock.nanoTime(), position, positionOffset)); } @Override public void onPageSelected(int position) { if (!mIsCurrentItemFromJs) { mEventDispatcher.dispatchEvent( - new PageSelectedEvent(getId(), SystemClock.uptimeMillis(), position)); + new PageSelectedEvent(getId(), SystemClock.nanoTime(), position)); } } @@ -119,7 +119,7 @@ import com.facebook.react.uimanager.events.NativeGestureUtil; throw new IllegalStateException("Unsupported pageScrollState"); } mEventDispatcher.dispatchEvent( - new PageScrollStateChangedEvent(getId(), SystemClock.uptimeMillis(), pageScrollState)); + new PageScrollStateChangedEvent(getId(), SystemClock.nanoTime(), pageScrollState)); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java index 4db9141b6..616418bba 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java @@ -9,9 +9,14 @@ package com.facebook.react.views.webview; +import javax.annotation.Nullable; + +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; + import android.graphics.Bitmap; import android.os.Build; -import android.os.SystemClock; import android.text.TextUtils; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -27,6 +32,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.MapBuilder; +import com.facebook.react.common.SystemClock; import com.facebook.react.common.build.ReactBuildConfig; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; @@ -35,13 +41,6 @@ import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.EventDispatcher; -import java.io.UnsupportedEncodingException; - -import java.util.HashMap; -import java.util.Map; - -import javax.annotation.Nullable; - /** * Manages instances of {@link WebView} * @@ -106,7 +105,7 @@ public class ReactWebViewManager extends SimpleViewManager { webView, new TopLoadingStartEvent( webView.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), createWebViewEvent(webView, url))); } @@ -129,7 +128,7 @@ public class ReactWebViewManager extends SimpleViewManager { dispatchEvent( webView, - new TopLoadingErrorEvent(webView.getId(), SystemClock.uptimeMillis(), eventData)); + new TopLoadingErrorEvent(webView.getId(), SystemClock.nanoTime(), eventData)); } @Override @@ -140,7 +139,7 @@ public class ReactWebViewManager extends SimpleViewManager { webView, new TopLoadingStartEvent( webView.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), createWebViewEvent(webView, url))); } @@ -149,7 +148,7 @@ public class ReactWebViewManager extends SimpleViewManager { webView, new TopLoadingFinishEvent( webView.getId(), - SystemClock.uptimeMillis(), + SystemClock.nanoTime(), createWebViewEvent(webView, url))); }