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 Original line Diff line number Diff line
@@ -20,6 +20,8 @@ import android.app.IAlarmManager;
import android.content.Context;
import android.content.Context;
import android.util.Slog;
import android.util.Slog;


import dalvik.annotation.optimization.CriticalNative;

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


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


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


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


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


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


namespace android {
namespace android {


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

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


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


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


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


@@ -92,32 +79,23 @@ static jlong android_os_SystemClock_currentTimeMicro(JNIEnv* env,
    return tv.tv_sec * 1000000LL + tv.tv_usec;
    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.
 * JNI registration.
 */
 */
static const JNINativeMethod gMethods[] = {
static const JNINativeMethod gMethods[] = {
    /* name, signature, funcPtr */
    // All of these are @CriticalNative, so we can defer directly to SystemClock.h for
    { "uptimeMillis",      "!()J",
    // some of these
            (void*) android_os_SystemClock_uptimeMillis },
    { "uptimeMillis", "()J", (void*) uptimeMillis },
    { "elapsedRealtime",      "!()J",
    { "elapsedRealtime", "()J", (void*) elapsedRealtime },
            (void*) android_os_SystemClock_elapsedRealtime },
    { "elapsedRealtimeNanos", "()J", (void*) elapsedRealtimeNano },
    { "currentThreadTimeMillis",      "!()J",

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