double real_time_now() { #ifdef ANDROID if (false && gl_extensions.EGL_NV_system_time) { // This is needed to profile using PerfHUD on Tegra if (_frequency == 0) { _frequency = eglGetSystemTimeFrequencyNV(); _starttime = eglGetSystemTimeNV(); } uint64_t cur = eglGetSystemTimeNV(); int64_t diff = cur - _starttime; return (double)diff / (double)_frequency; } #endif static time_t start; struct timeval tv; gettimeofday(&tv, NULL); if (start == 0) { start = tv.tv_sec; } tv.tv_sec -= start; return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; }
double real_time_now() { #ifdef ANDROID if (false && gl_extensions.EGL_NV_system_time) { // This is needed to profile using PerfHUD on Tegra if (_frequency == 0) { _frequency = eglGetSystemTimeFrequencyNV(); _starttime = eglGetSystemTimeNV(); } uint64_t cur = eglGetSystemTimeNV(); int64_t diff = cur - _starttime; return (double)diff / (double)_frequency; } #if 0 // This clock is really "choppy" on Nexus 9! struct timespec time; clock_gettime(CLOCK_MONOTONIC_RAW, &time); return time.tv_sec + time.tv_nsec / 1.0e9; #else static time_t start; struct timeval tv; gettimeofday(&tv, NULL); if (start == 0) { start = tv.tv_sec; } tv.tv_sec -= start; return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; #endif #else static time_t start; struct timeval tv; gettimeofday(&tv, NULL); if (start == 0) { start = tv.tv_sec; } tv.tv_sec -= start; return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; #endif }
static jlong android_view_HardwareRenderer_getSystemTime(JNIEnv* env, jobject clazz) { if (uirenderer::Extensions::getInstance().hasNvSystemTime()) { return eglGetSystemTimeNV(); } return systemTime(SYSTEM_TIME_MONOTONIC); }