mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Send UNIX timestamp along with JS touch events, instead of systemUptime
Summary: We want to be able to instrument touch processing delays in JS, which does not have access to systemUptime; therefore we want a UNIX timestamp, which JS has access to and can compare to the touch time. It only matters that there is relative consistency between multiple touch events in JS, which is still the case; so this should have no impact on product code. Changelog: [Internal] Reviewed By: yungsters Differential Revision: D26705429 fbshipit-source-id: 0f2db726048fcab9a30e830970d7d8a8d2eae446
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f27621465d
commit
69feed518d
@@ -38,6 +38,15 @@ public abstract class Event<T extends Event> {
|
||||
private long mTimestampMs;
|
||||
private int mUniqueID = sUniqueID++;
|
||||
|
||||
// Android native Event times use 'uptimeMillis', and historically we've used `uptimeMillis`
|
||||
// throughout this Event class as the coalescing key for events, and for other purposes.
|
||||
// To get an accurate(ish) absolute UNIX time for the event, we store the initial clock time here.
|
||||
// uptimeMillis can then be added to this to get an accurate UNIX time.
|
||||
// However, we still default to uptimeMillis: you must explicitly request UNIX time if you want
|
||||
// that; see `getUnixTimestampMs`.
|
||||
public static final long sInitialClockTimeUnixOffset =
|
||||
SystemClock.currentTimeMillis() - SystemClock.uptimeMillis();
|
||||
|
||||
protected Event() {}
|
||||
|
||||
@Deprecated
|
||||
@@ -58,8 +67,10 @@ public abstract class Event<T extends Event> {
|
||||
protected void init(int surfaceId, int viewTag) {
|
||||
mSurfaceId = surfaceId;
|
||||
mViewTag = viewTag;
|
||||
mTimestampMs = SystemClock.uptimeMillis();
|
||||
mInitialized = true;
|
||||
|
||||
// This is a *relative* time. See `getUnixTimestampMs`.
|
||||
mTimestampMs = SystemClock.uptimeMillis();
|
||||
}
|
||||
|
||||
/** @return the view id for the view that generated this event */
|
||||
@@ -80,6 +91,11 @@ public abstract class Event<T extends Event> {
|
||||
return mTimestampMs;
|
||||
}
|
||||
|
||||
/** @return the time at which the event happened as a UNIX timestamp, in milliseconds. */
|
||||
public final long getUnixTimestampMs() {
|
||||
return sInitialClockTimeUnixOffset + mTimestampMs;
|
||||
}
|
||||
|
||||
/** @return false if this Event can *never* be coalesced */
|
||||
public boolean canCoalesce() {
|
||||
return true;
|
||||
|
||||
@@ -64,7 +64,7 @@ public class TouchesHelper {
|
||||
touch.putDouble(LOCATION_Y_KEY, PixelUtil.toDIPFromPixel(locationY));
|
||||
touch.putInt(TARGET_SURFACE_KEY, surfaceId);
|
||||
touch.putInt(TARGET_KEY, reactTarget);
|
||||
touch.putDouble(TIMESTAMP_KEY, event.getTimestampMs());
|
||||
touch.putDouble(TIMESTAMP_KEY, event.getUnixTimestampMs());
|
||||
touch.putDouble(POINTER_IDENTIFIER_KEY, motionEvent.getPointerId(index));
|
||||
touches.pushMap(touch);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user