Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06007a8b authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "SystemClock JNI update"

parents f6f26015 9481c9e8
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.app.IAlarmManager;
import android.content.Context;
import android.util.Slog;

import dalvik.annotation.optimization.CriticalNative;

/**
 * Core timekeeping facilities.
 *
@@ -162,6 +164,7 @@ public final class SystemClock {
     *
     * @return milliseconds of non-sleep uptime since boot.
     */
    @CriticalNative
    native public static long uptimeMillis();

    /**
@@ -169,6 +172,7 @@ public final class SystemClock {
     *
     * @return elapsed milliseconds since boot.
     */
    @CriticalNative
    native public static long elapsedRealtime();

    /**
@@ -176,6 +180,7 @@ public final class SystemClock {
     *
     * @return elapsed nanoseconds since boot.
     */
    @CriticalNative
    public static native long elapsedRealtimeNanos();

    /**
@@ -183,6 +188,7 @@ public final class SystemClock {
     *
     * @return elapsed milliseconds in the thread
     */
    @CriticalNative
    public static native long currentThreadTimeMillis();

    /**
@@ -192,6 +198,7 @@ public final class SystemClock {
     *
     * @hide
     */
    @CriticalNative
    public static native long currentThreadTimeMicro();

    /**
@@ -201,5 +208,6 @@ public final class SystemClock {
     *
     * @hide
     */
    @CriticalNative
    public static native long currentTimeMicro();
}
+20 −42
Original line number Diff line number Diff line
@@ -36,29 +36,18 @@

namespace android {

/*
 * native public static long uptimeMillis();
 */
static jlong android_os_SystemClock_uptimeMillis(JNIEnv* env,
        jobject clazz)
{
    return (jlong)uptimeMillis();
}

/*
 * native public static long elapsedRealtime();
 */
static jlong android_os_SystemClock_elapsedRealtime(JNIEnv* env,
        jobject clazz)
{
    return (jlong)elapsedRealtime();
}
static_assert(std::is_same<int64_t, jlong>::value, "jlong isn't an int64_t");
static_assert(std::is_same<decltype(uptimeMillis()), int64_t>::value,
        "uptimeMillis signature change, expected int64_t return value");
static_assert(std::is_same<decltype(elapsedRealtime()), int64_t>::value,
        "uptimeMillis signature change, expected int64_t return value");
static_assert(std::is_same<decltype(elapsedRealtimeNano()), int64_t>::value,
        "uptimeMillis signature change, expected int64_t return value");

/*
 * native public static long currentThreadTimeMillis();
 */
static jlong android_os_SystemClock_currentThreadTimeMillis(JNIEnv* env,
        jobject clazz)
static jlong android_os_SystemClock_currentThreadTimeMillis()
{
    struct timespec tm;

@@ -70,8 +59,7 @@ static jlong android_os_SystemClock_currentThreadTimeMillis(JNIEnv* env,
/*
 * native public static long currentThreadTimeMicro();
 */
static jlong android_os_SystemClock_currentThreadTimeMicro(JNIEnv* env,
        jobject clazz)
static jlong android_os_SystemClock_currentThreadTimeMicro()
{
    struct timespec tm;

@@ -83,8 +71,7 @@ static jlong android_os_SystemClock_currentThreadTimeMicro(JNIEnv* env,
/*
 * native public static long currentTimeMicro();
 */
static jlong android_os_SystemClock_currentTimeMicro(JNIEnv* env,
        jobject clazz)
static jlong android_os_SystemClock_currentTimeMicro()
{
    struct timeval tv;

@@ -92,32 +79,23 @@ static jlong android_os_SystemClock_currentTimeMicro(JNIEnv* env,
    return tv.tv_sec * 1000000LL + tv.tv_usec;
}

/*
 * public static native long elapsedRealtimeNano();
 */
static jlong android_os_SystemClock_elapsedRealtimeNano(JNIEnv* env,
        jobject clazz)
{
    return (jlong)elapsedRealtimeNano();
}

/*
 * JNI registration.
 */
static const JNINativeMethod gMethods[] = {
    /* name, signature, funcPtr */
    { "uptimeMillis",      "!()J",
            (void*) android_os_SystemClock_uptimeMillis },
    { "elapsedRealtime",      "!()J",
            (void*) android_os_SystemClock_elapsedRealtime },
    { "currentThreadTimeMillis",      "!()J",
    // All of these are @CriticalNative, so we can defer directly to SystemClock.h for
    // some of these
    { "uptimeMillis", "()J", (void*) uptimeMillis },
    { "elapsedRealtime", "()J", (void*) elapsedRealtime },
    { "elapsedRealtimeNanos", "()J", (void*) elapsedRealtimeNano },

    // SystemClock doesn't have an implementation for these that we can directly call
    { "currentThreadTimeMillis", "()J",
            (void*) android_os_SystemClock_currentThreadTimeMillis },
    { "currentThreadTimeMicro",       "!()J",
    { "currentThreadTimeMicro", "()J",
            (void*) android_os_SystemClock_currentThreadTimeMicro },
    { "currentTimeMicro",             "!()J",
    { "currentTimeMicro", "()J",
            (void*) android_os_SystemClock_currentTimeMicro },
    { "elapsedRealtimeNanos",      "!()J",
            (void*) android_os_SystemClock_elapsedRealtimeNano },
};
int register_android_os_SystemClock(JNIEnv* env)
{