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

Commit 8a763483 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make InferenceInfo and getLatestInferenceInfo SystemApis." into main

parents 191a66d2 4f6a9944
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -2322,6 +2322,24 @@ package android.app.ondeviceintelligence {
    field public static final int FEATURE_STATUS_UNAVAILABLE = 0; // 0x0
  }
  @FlaggedApi("android.app.ondeviceintelligence.flags.enable_on_device_intelligence_module") public final class InferenceInfo implements android.os.Parcelable {
    method public int describeContents();
    method public long getEndTimeMillis();
    method public long getStartTimeMillis();
    method public long getSuspendedTimeMillis();
    method public int getUid();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.ondeviceintelligence.InferenceInfo> CREATOR;
  }
  public static final class InferenceInfo.Builder {
    ctor public InferenceInfo.Builder(int);
    method @NonNull public android.app.ondeviceintelligence.InferenceInfo build();
    method @NonNull public android.app.ondeviceintelligence.InferenceInfo.Builder setEndTimeMillis(long);
    method @NonNull public android.app.ondeviceintelligence.InferenceInfo.Builder setStartTimeMillis(long);
    method @NonNull public android.app.ondeviceintelligence.InferenceInfo.Builder setSuspendedTimeMillis(long);
  }
  @FlaggedApi("android.app.ondeviceintelligence.flags.enable_on_device_intelligence") public class OnDeviceIntelligenceException extends java.lang.Exception {
    ctor public OnDeviceIntelligenceException(int, @NonNull String, @NonNull android.os.PersistableBundle);
    ctor public OnDeviceIntelligenceException(int, @NonNull android.os.PersistableBundle);
@@ -2351,6 +2369,7 @@ package android.app.ondeviceintelligence {
  @FlaggedApi("android.app.ondeviceintelligence.flags.enable_on_device_intelligence") public final class OnDeviceIntelligenceManager {
    method @RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public void getFeature(int, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.app.ondeviceintelligence.Feature,android.app.ondeviceintelligence.OnDeviceIntelligenceException>);
    method @RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public void getFeatureDetails(@NonNull android.app.ondeviceintelligence.Feature, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.app.ondeviceintelligence.FeatureDetails,android.app.ondeviceintelligence.OnDeviceIntelligenceException>);
    method @FlaggedApi("android.app.ondeviceintelligence.flags.enable_on_device_intelligence_module") @NonNull @RequiresPermission(android.Manifest.permission.DUMP) public java.util.List<android.app.ondeviceintelligence.InferenceInfo> getLatestInferenceInfo(long);
    method @Nullable @RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public String getRemoteServicePackageName();
    method @RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public void getVersion(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.LongConsumer);
    method @RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE) public void listFeatures(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.util.List<android.app.ondeviceintelligence.Feature>,android.app.ondeviceintelligence.OnDeviceIntelligenceException>);
+28 −19
Original line number Diff line number Diff line
@@ -16,6 +16,12 @@

package android.app.ondeviceintelligence;

import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE_MODULE;

import android.annotation.CurrentTimeMillisLong;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

@@ -25,7 +31,9 @@ import android.os.Parcelable;
 *
 * @hide
 */
public class InferenceInfo implements Parcelable {
@SystemApi
@FlaggedApi(FLAG_ENABLE_ON_DEVICE_INTELLIGENCE_MODULE)
public final class InferenceInfo implements Parcelable {

    /**
     * Uid for the caller app.
@@ -55,7 +63,7 @@ public class InferenceInfo implements Parcelable {
     * @param endTimeMs       Inference end time (milliseconds from the epoch time).
     * @param suspendedTimeMs Suspended time in milliseconds.
     */
    public InferenceInfo(int uid, long startTimeMs, long endTimeMs,
    InferenceInfo(int uid, long startTimeMs, long endTimeMs,
            long suspendedTimeMs) {
        this.uid = uid;
        this.startTimeMs = startTimeMs;
@@ -68,7 +76,7 @@ public class InferenceInfo implements Parcelable {
     *
     * @param in The Parcel to read the object's data from.
     */
    protected InferenceInfo(Parcel in) {
    private InferenceInfo(@NonNull Parcel in) {
        uid = in.readInt();
        startTimeMs = in.readLong();
        endTimeMs = in.readLong();
@@ -83,7 +91,7 @@ public class InferenceInfo implements Parcelable {
     * @param flags Additional flags about how the object should be written.
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(uid);
        dest.writeLong(startTimeMs);
        dest.writeLong(endTimeMs);
@@ -104,7 +112,8 @@ public class InferenceInfo implements Parcelable {
     *
     * @return the inference start time in milliseconds from the epoch time.
     */
    public long getStartTimeMs() {
    @CurrentTimeMillisLong
    public long getStartTimeMillis() {
        return startTimeMs;
    }

@@ -113,7 +122,8 @@ public class InferenceInfo implements Parcelable {
     *
     * @return the inference end time in milliseconds from the epoch time.
     */
    public long getEndTimeMs() {
    @CurrentTimeMillisLong
    public long getEndTimeMillis() {
        return endTimeMs;
    }

@@ -122,7 +132,8 @@ public class InferenceInfo implements Parcelable {
     *
     * @return the suspended time in milliseconds.
     */
    public long getSuspendedTimeMs() {
    @CurrentTimeMillisLong
    public long getSuspendedTimeMillis() {
        return suspendedTimeMs;
    }

@@ -148,21 +159,19 @@ public class InferenceInfo implements Parcelable {
    /**
     * Builder class for creating instances of {@link InferenceInfo}.
     */
    public static class Builder {
        private int uid;
    public static final class Builder {
        private final int uid;
        private long startTimeMs;
        private long endTimeMs;
        private long suspendedTimeMs;

        /**
         * Sets the UID for the caller app.
         * Provides a builder instance to create a InferenceInfo for given caller uid.
         *
         * @param uid the UID for the caller app.
         * @return the Builder instance.
         * @param uid the caller uid associated with the inference info.
         */
        public Builder setUid(int uid) {
        public Builder(int uid) {
            this.uid = uid;
            return this;
        }

        /**
@@ -171,7 +180,7 @@ public class InferenceInfo implements Parcelable {
         * @param startTimeMs the inference start time in milliseconds from the epoch time.
         * @return the Builder instance.
         */
        public Builder setStartTimeMs(long startTimeMs) {
        public @NonNull Builder setStartTimeMillis(@CurrentTimeMillisLong long startTimeMs) {
            this.startTimeMs = startTimeMs;
            return this;
        }
@@ -182,7 +191,7 @@ public class InferenceInfo implements Parcelable {
         * @param endTimeMs the inference end time in milliseconds from the epoch time.
         * @return the Builder instance.
         */
        public Builder setEndTimeMs(long endTimeMs) {
        public @NonNull Builder setEndTimeMillis(@CurrentTimeMillisLong long endTimeMs) {
            this.endTimeMs = endTimeMs;
            return this;
        }
@@ -193,7 +202,7 @@ public class InferenceInfo implements Parcelable {
         * @param suspendedTimeMs the suspended time in milliseconds.
         * @return the Builder instance.
         */
        public Builder setSuspendedTimeMs(long suspendedTimeMs) {
        public @NonNull Builder setSuspendedTimeMillis(@CurrentTimeMillisLong long suspendedTimeMs) {
            this.suspendedTimeMs = suspendedTimeMs;
            return this;
        }
@@ -203,7 +212,7 @@ public class InferenceInfo implements Parcelable {
         *
         * @return an instance of {@link InferenceInfo}.
         */
        public InferenceInfo build() {
        public @NonNull InferenceInfo build() {
            return new InferenceInfo(uid, startTimeMs, endTimeMs,
                    suspendedTimeMs);
        }
+4 −3
Original line number Diff line number Diff line
@@ -17,9 +17,11 @@
package android.app.ondeviceintelligence;

import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE;
import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE_MODULE;

import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.CurrentTimeMillisLong;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -502,11 +504,10 @@ public final class OnDeviceIntelligenceManager {
     *
     * @param startTimeEpochMillis epoch millis used to filter the InferenceInfo events.
     * @return InferenceInfo events since the passed in startTimeEpochMillis.
     *
     * @hide
     */
    @RequiresPermission(Manifest.permission.DUMP)
    public List<InferenceInfo> getLatestInferenceInfo(long startTimeEpochMillis) {
    @FlaggedApi(FLAG_ENABLE_ON_DEVICE_INTELLIGENCE_MODULE)
    public @NonNull List<InferenceInfo> getLatestInferenceInfo(@CurrentTimeMillisLong long startTimeEpochMillis) {
        try {
            return mService.getLatestInferenceInfo(startTimeEpochMillis);
        } catch (RemoteException e) {
+6 −6
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ import android.app.ondeviceintelligence.InferenceInfo;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService;
import android.util.Slog;
import android.util.Base64;
import android.util.Slog;

import java.io.IOException;
import java.util.Comparator;
@@ -36,12 +36,12 @@ public class InferenceInfoStore {
    public InferenceInfoStore(long maxAgeMs) {
        this.maxAgeMs = maxAgeMs;
        this.inferenceInfos = new TreeSet<>(
                Comparator.comparingLong(InferenceInfo::getStartTimeMs));
                Comparator.comparingLong(InferenceInfo::getStartTimeMillis));
    }

    public List<InferenceInfo> getLatestInferenceInfo(long startTimeEpochMillis) {
        return inferenceInfos.stream().filter(
                info -> info.getStartTimeMs() > startTimeEpochMillis).toList();
                info -> info.getStartTimeMillis() > startTimeEpochMillis).toList();
    }

    public void addInferenceInfoFromBundle(PersistableBundle pb) {
@@ -85,7 +85,7 @@ public class InferenceInfoStore {

    private synchronized void add(com.android.server.ondeviceintelligence.nano.InferenceInfo info) {
        while (!inferenceInfos.isEmpty()
                && System.currentTimeMillis() - inferenceInfos.first().getStartTimeMs()
                && System.currentTimeMillis() - inferenceInfos.first().getStartTimeMillis()
                > maxAgeMs) {
            inferenceInfos.pollFirst();
        }
@@ -94,8 +94,8 @@ public class InferenceInfoStore {

    private static InferenceInfo toInferenceInfo(
            com.android.server.ondeviceintelligence.nano.InferenceInfo info) {
        return new InferenceInfo.Builder().setUid(info.uid).setStartTimeMs(
                info.startTimeMs).setEndTimeMs(info.endTimeMs).setSuspendedTimeMs(
        return new InferenceInfo.Builder(info.uid).setStartTimeMillis(
                info.startTimeMs).setEndTimeMillis(info.endTimeMs).setSuspendedTimeMillis(
                info.suspendedTimeMs).build();
    }
}
 No newline at end of file
+7 −8
Original line number Diff line number Diff line
@@ -18,10 +18,10 @@ package com.android.server.ondeviceintelligence;

import static com.google.common.truth.Truth.assertThat;

import android.app.ondeviceintelligence.InferenceInfo;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService;
import android.app.ondeviceintelligence.InferenceInfo;
import android.util.Base64;

import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -32,7 +32,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.io.IOException;
import java.util.List;

@RunWith(AndroidJUnit4.class)
@@ -53,8 +52,8 @@ public class InferenceInfoStoreTest {
        List<InferenceInfo> inferenceInfos = inferenceInfoStore.getLatestInferenceInfo(0);
        assertThat(inferenceInfos).hasSize(1);
        assertThat(inferenceInfos.get(0).getUid()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getStartTimeMs()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getEndTimeMs()).isEqualTo(100);
        assertThat(inferenceInfos.get(0).getStartTimeMillis()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getEndTimeMillis()).isEqualTo(100);
    }

    @Test
@@ -66,8 +65,8 @@ public class InferenceInfoStoreTest {
        List<InferenceInfo> inferenceInfos = inferenceInfoStore.getLatestInferenceInfo(0);
        assertThat(inferenceInfos).hasSize(1);
        assertThat(inferenceInfos.get(0).getUid()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getStartTimeMs()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getEndTimeMs()).isEqualTo(100);
        assertThat(inferenceInfos.get(0).getStartTimeMillis()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getEndTimeMillis()).isEqualTo(100);
    }


@@ -87,8 +86,8 @@ public class InferenceInfoStoreTest {
        List<InferenceInfo> inferenceInfos = inferenceInfoStore.getLatestInferenceInfo(0);
        assertThat(inferenceInfos).hasSize(2);
        assertThat(inferenceInfos.get(0).getUid()).isEqualTo(1);
        assertThat(inferenceInfos.get(0).getStartTimeMs()).isEqualTo(testStartTime - 10);
        assertThat(inferenceInfos.get(0).getEndTimeMs()).isEqualTo(testStartTime + 100);
        assertThat(inferenceInfos.get(0).getStartTimeMillis()).isEqualTo(testStartTime - 10);
        assertThat(inferenceInfos.get(0).getEndTimeMillis()).isEqualTo(testStartTime + 100);
        inferenceInfoStore.addInferenceInfoFromBundle(bundle);
        List<InferenceInfo> inferenceInfos2 = inferenceInfoStore.getLatestInferenceInfo(0);
        assertThat(inferenceInfos2).hasSize(1); //previous entries should have been evicted