From efd56688bac54f23ccfcaa03dc14aa2e4ab5eec8 Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Tue, 17 Mar 2015 22:22:51 -0700 Subject: [PATCH] [RFC][ReactNative] increase timer resolution --- Libraries/JavaScriptAppEngine/System/JSTimers/JSTimers.js | 2 +- ReactKit/Modules/RCTTiming.m | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimers.js b/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimers.js index 593070e9e..4fa4b8587 100644 --- a/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimers.js +++ b/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimers.js @@ -90,7 +90,7 @@ var JSTimers = { JSTimersExecution.timerIDs[freeIndex] = newID; JSTimersExecution.callbacks[freeIndex] = func; JSTimersExecution.types[freeIndex] = JSTimersExecution.Type.requestAnimationFrame; - RCTTiming.createTimer(newID, 0, Date.now(), /** recurring */ false); + RCTTiming.createTimer(newID, 1, Date.now(), /** recurring */ false); return newID; }, diff --git a/ReactKit/Modules/RCTTiming.m b/ReactKit/Modules/RCTTiming.m index d008178b2..c1d2ceeb5 100644 --- a/ReactKit/Modules/RCTTiming.m +++ b/ReactKit/Modules/RCTTiming.m @@ -166,6 +166,12 @@ { RCT_EXPORT(); + if (jsDuration == 0 && repeats == NO) { + // For super fast, one-off timers, just enqueue them immediately rather than waiting a frame. + [_bridge enqueueJSCall:@"RCTJSTimers.callTimers" args:@[@[callbackID]]]; + return; + } + NSTimeInterval interval = jsDuration / 1000; NSTimeInterval jsCreationTimeSinceUnixEpoch = jsSchedulingTime / 1000; NSTimeInterval currentTimeSinceUnixEpoch = [[NSDate date] timeIntervalSince1970];