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

Commit 31c519f8 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Migrate MultiStateStatsTest to Ravenwood

Bug: 314797745
Test: atest PowerStatsTestsRavenwood
Test: atest PowerStatsTests

Change-Id: I28f823608041cc7606bd848f3618c9c0ae5adace
parent 7f5d1171
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import java.util.ArrayList;
 *
 * @hide
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class BatteryConsumer {

    private static final String TAG = "BatteryConsumer";
+50 −12
Original line number Diff line number Diff line
@@ -55,15 +55,20 @@ import java.util.concurrent.atomic.AtomicReference;
 *
 * @hide
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
        "com.android.hoststubgen.nativesubstitution.LongArrayMultiStateCounter_host")
public final class LongArrayMultiStateCounter implements Parcelable {

    /**
     * Container for a native equivalent of a long[].
     */
    @android.ravenwood.annotation.RavenwoodKeepWholeClass
    @android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
            "com.android.hoststubgen.nativesubstitution"
            + ".LongArrayMultiStateCounter_host$LongArrayContainer_host")
    public static class LongArrayContainer {
        private static final NativeAllocationRegistry sRegistry =
                NativeAllocationRegistry.createMalloced(
                        LongArrayContainer.class.getClassLoader(), native_getReleaseFunc());
        private static NativeAllocationRegistry sRegistry;

        // Visible to other objects in this package so that it can be passed to @CriticalNative
        // methods.
@@ -73,9 +78,26 @@ public final class LongArrayMultiStateCounter implements Parcelable {
        public LongArrayContainer(int length) {
            mLength = length;
            mNativeObject = native_init(length);
            registerNativeAllocation();
        }

        @android.ravenwood.annotation.RavenwoodReplace
        private void registerNativeAllocation() {
            if (sRegistry == null) {
                synchronized (LongArrayMultiStateCounter.class) {
                    if (sRegistry == null) {
                        sRegistry = NativeAllocationRegistry.createMalloced(
                                LongArrayContainer.class.getClassLoader(), native_getReleaseFunc());
                    }
                }
            }
            sRegistry.registerNativeAllocation(this, mNativeObject);
        }

        private void registerNativeAllocation$ravenwood() {
            // No-op under ravenwood
        }

        /**
         * Copies the supplied values into the underlying native array.
         */
@@ -124,19 +146,17 @@ public final class LongArrayMultiStateCounter implements Parcelable {
        private static native long native_getReleaseFunc();

        @FastNative
        private native void native_setValues(long nativeObject, long[] array);
        private static native void native_setValues(long nativeObject, long[] array);

        @FastNative
        private native void native_getValues(long nativeObject, long[] array);
        private static native void native_getValues(long nativeObject, long[] array);

        @FastNative
        private native boolean native_combineValues(long nativeObject, long[] array,
        private static native boolean native_combineValues(long nativeObject, long[] array,
                int[] indexMap);
    }

    private static final NativeAllocationRegistry sRegistry =
            NativeAllocationRegistry.createMalloced(
                    LongArrayMultiStateCounter.class.getClassLoader(), native_getReleaseFunc());
    private static volatile NativeAllocationRegistry sRegistry;
    private static final AtomicReference<LongArrayContainer> sTmpArrayContainer =
            new AtomicReference<>();

@@ -152,12 +172,30 @@ public final class LongArrayMultiStateCounter implements Parcelable {
        mStateCount = stateCount;
        mLength = arrayLength;
        mNativeObject = native_init(stateCount, arrayLength);
        registerNativeAllocation();
    }

    @android.ravenwood.annotation.RavenwoodReplace
    private void registerNativeAllocation() {
        if (sRegistry == null) {
            synchronized (LongArrayMultiStateCounter.class) {
                if (sRegistry == null) {
                    sRegistry = NativeAllocationRegistry.createMalloced(
                            LongArrayMultiStateCounter.class.getClassLoader(),
                            native_getReleaseFunc());
                }
            }
        }
        sRegistry.registerNativeAllocation(this, mNativeObject);
    }

    private void registerNativeAllocation$ravenwood() {
        // No-op under ravenwood
    }

    private LongArrayMultiStateCounter(Parcel in) {
        mNativeObject = native_initFromParcel(in);
        sRegistry.registerNativeAllocation(this, mNativeObject);
        registerNativeAllocation();

        mStateCount = native_getStateCount(mNativeObject);
        mLength = native_getArrayLength(mNativeObject);
@@ -361,10 +399,10 @@ public final class LongArrayMultiStateCounter implements Parcelable {
            long longArrayContainerNativeObject, int state);

    @FastNative
    private native String native_toString(long nativeObject);
    private static native String native_toString(long nativeObject);

    @FastNative
    private native void native_writeToParcel(long nativeObject, Parcel dest, int flags);
    private static native void native_writeToParcel(long nativeObject, Parcel dest, int flags);

    @FastNative
    private static native long native_initFromParcel(Parcel parcel);
+6 −6
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ static void native_getCounts(jlong nativePtr, jlong longArrayContainerNativePtr,
    *vector = counter->getCount(state);
}

static jobject native_toString(JNIEnv *env, jobject self, jlong nativePtr) {
static jobject native_toString(JNIEnv *env, jclass, jlong nativePtr) {
    battery::LongArrayMultiStateCounter *counter =
            reinterpret_cast<battery::LongArrayMultiStateCounter *>(nativePtr);
    return env->NewStringUTF(counter->toString().c_str());
@@ -127,7 +127,7 @@ static void throwWriteRE(JNIEnv *env, binder_status_t status) {
        }                                     \
    }

static void native_writeToParcel(JNIEnv *env, jobject self, jlong nativePtr, jobject jParcel,
static void native_writeToParcel(JNIEnv *env, jclass, jlong nativePtr, jobject jParcel,
                                 jint flags) {
    battery::LongArrayMultiStateCounter *counter =
            reinterpret_cast<battery::LongArrayMultiStateCounter *>(nativePtr);
@@ -161,7 +161,7 @@ static void throwReadException(JNIEnv *env, binder_status_t status) {
        }                                    \
    }

static jlong native_initFromParcel(JNIEnv *env, jclass theClass, jobject jParcel) {
static jlong native_initFromParcel(JNIEnv *env, jclass, jobject jParcel) {
    ndk::ScopedAParcel parcel(AParcel_fromJavaParcel(env, jParcel));

    int32_t stateCount;
@@ -253,7 +253,7 @@ static jlong native_getReleaseFunc_LongArrayContainer() {
    return reinterpret_cast<jlong>(native_dispose_LongArrayContainer);
}

static void native_setValues_LongArrayContainer(JNIEnv *env, jobject self, jlong nativePtr,
static void native_setValues_LongArrayContainer(JNIEnv *env, jclass, jlong nativePtr,
                                                jlongArray jarray) {
    std::vector<uint64_t> *vector = reinterpret_cast<std::vector<uint64_t> *>(nativePtr);
    ScopedLongArrayRO scopedArray(env, jarray);
@@ -264,7 +264,7 @@ static void native_setValues_LongArrayContainer(JNIEnv *env, jobject self, jlong
    std::copy(array, array + size, vector->data());
}

static void native_getValues_LongArrayContainer(JNIEnv *env, jobject self, jlong nativePtr,
static void native_getValues_LongArrayContainer(JNIEnv *env, jclass, jlong nativePtr,
                                                jlongArray jarray) {
    std::vector<uint64_t> *vector = reinterpret_cast<std::vector<uint64_t> *>(nativePtr);
    ScopedLongArrayRW scopedArray(env, jarray);
@@ -273,7 +273,7 @@ static void native_getValues_LongArrayContainer(JNIEnv *env, jobject self, jlong
    std::copy(vector->data(), vector->data() + vector->size(), scopedArray.get());
}

static jboolean native_combineValues_LongArrayContainer(JNIEnv *env, jobject self, jlong nativePtr,
static jboolean native_combineValues_LongArrayContainer(JNIEnv *env, jclass, jlong nativePtr,
                                                        jlongArray jarray, jintArray jindexMap) {
    std::vector<uint64_t> *vector = reinterpret_cast<std::vector<uint64_t> *>(nativePtr);
    ScopedLongArrayRW scopedArray(env, jarray);
+1 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ android_ravenwood_test {
        "src/android/os/BuildTest.java",
        "src/android/os/FileUtilsTest.java",
        "src/android/util/**/*.java",
        "src/com/android/internal/os/LongArrayMultiStateCounterTest.java",
        "src/com/android/internal/util/**/*.java",
        "testdoubles/src/com/android/internal/util/**/*.java",
    ],
+3 −0
Original line number Diff line number Diff line
# Only classes listed here can use the Ravenwood annotations.

com.android.internal.util.ArrayUtils
com.android.internal.os.LongArrayMultiStateCounter
com.android.internal.os.LongArrayMultiStateCounter$LongArrayContainer

android.util.AtomicFile
android.util.DataUnit
@@ -22,6 +24,7 @@ android.util.SparseSetArray
android.util.TimeUtils
android.util.Xml

android.os.BatteryConsumer
android.os.Binder
android.os.Binder$IdentitySupplier
android.os.FileUtils
Loading