Search code examples
androidtimernanotime

Which is better for timing, nanoTime or elapsedRealtimeNanos?


Both seem to be appropriate for timing things on Android. How are they different? Which one is best for timing?


Solution

  • As far as I can tell, there's not really much of a difference, but they use different Linux clocks under the hood.

    nanoTime() uses either clock_gettime() or gettimeofday(): see the code here (part of Dalvik VM).

    elapsedRealtimeNanos() used to use clock_gettime(), but it no longer does. Instead, it now issues an ioctl to the /dev/alarm device (see code here), but I'm not exactly sure what the alarm device driver uses.

    I've used elapsedRealtimeNanos() for a long time with no trouble, but not for any specific reason. Just make sure you realize that neither of these functions will provide the wall clock time.