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

Commit 9481c9e8 authored by John Reck's avatar John Reck
Browse files

SystemClock JNI update

Switch to @CriticalNative
Test: make & boot

Change-Id: I5ead83f5c201bf9bb50a39b5c6dcd8b6ac6b5ba5
parent f03f8e59
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)
{