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

Commit 02b5090f authored by Sandeep Bandaru's avatar Sandeep Bandaru Committed by Android (Google) Code Review
Browse files

Merge "Move the remote method calls to an app handler from the binder thread." into main

parents 8334c000 a269ed0b
Loading
Loading
Loading
Loading
+73 −32
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package android.service.ondeviceintelligence;

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

import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;

import android.annotation.CallSuper;
import android.annotation.CallbackExecutor;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
@@ -40,13 +43,16 @@ import android.content.Intent;
import android.os.Binder;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.OutcomeReceiver;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;

import com.android.internal.infra.AndroidFuture;
@@ -88,6 +94,14 @@ public abstract class OnDeviceIntelligenceService extends Service {
    private static final String TAG = OnDeviceIntelligenceService.class.getSimpleName();

    private volatile IRemoteProcessingService mRemoteProcessingService;
    private Handler mHandler;

    @CallSuper
    @Override
    public void onCreate() {
        super.onCreate();
        mHandler = new Handler(Looper.getMainLooper(), null /* callback */, true /* async */);
    }

    /**
     * The {@link Intent} that must be declared as handled by the service. To be supported, the
@@ -107,38 +121,49 @@ public abstract class OnDeviceIntelligenceService extends Service {
    @Override
    public final IBinder onBind(@NonNull Intent intent) {
        if (SERVICE_INTERFACE.equals(intent.getAction())) {
            // TODO(326052028) : Move the remote method calls to an app handler from the binder
            //  thread.
            return new IOnDeviceIntelligenceService.Stub() {
                /** {@inheritDoc} */
                @Override
                public void ready() {
                    OnDeviceIntelligenceService.this.onReady();
                    mHandler.executeOrSendMessage(
                            obtainMessage(OnDeviceIntelligenceService::onReady,
                                    OnDeviceIntelligenceService.this));
                }

                @Override
                public void getVersion(RemoteCallback remoteCallback) {
                    Objects.requireNonNull(remoteCallback);
                    OnDeviceIntelligenceService.this.onGetVersion(l -> {
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onGetVersion,
                                    OnDeviceIntelligenceService.this, l -> {
                                        Bundle b = new Bundle();
                        b.putLong(OnDeviceIntelligenceManager.API_VERSION_BUNDLE_KEY, l);
                                        b.putLong(
                                                OnDeviceIntelligenceManager.API_VERSION_BUNDLE_KEY,
                                                l);
                                        remoteCallback.sendResult(b);
                    });
                                    }));
                }

                @Override
                public void listFeatures(int callerUid,
                        IListFeaturesCallback listFeaturesCallback) {
                    Objects.requireNonNull(listFeaturesCallback);
                    OnDeviceIntelligenceService.this.onListFeatures(callerUid,
                            wrapListFeaturesCallback(listFeaturesCallback));
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onListFeatures,
                                    OnDeviceIntelligenceService.this, callerUid,
                                    wrapListFeaturesCallback(listFeaturesCallback)));
                }

                @Override
                public void getFeature(int callerUid, int id, IFeatureCallback featureCallback) {
                    Objects.requireNonNull(featureCallback);
                    OnDeviceIntelligenceService.this.onGetFeature(callerUid,
                            id, wrapFeatureCallback(featureCallback));
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onGetFeature,
                                    OnDeviceIntelligenceService.this, callerUid,
                                    id, wrapFeatureCallback(featureCallback)));
                }


@@ -147,9 +172,11 @@ public abstract class OnDeviceIntelligenceService extends Service {
                        IFeatureDetailsCallback featureDetailsCallback) {
                    Objects.requireNonNull(feature);
                    Objects.requireNonNull(featureDetailsCallback);

                    OnDeviceIntelligenceService.this.onGetFeatureDetails(callerUid,
                            feature, wrapFeatureDetailsCallback(featureDetailsCallback));
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onGetFeatureDetails,
                                    OnDeviceIntelligenceService.this, callerUid,
                                    feature, wrapFeatureDetailsCallback(featureDetailsCallback)));
                }

                @Override
@@ -163,10 +190,13 @@ public abstract class OnDeviceIntelligenceService extends Service {
                        transport = CancellationSignal.createTransport();
                        cancellationSignalFuture.complete(transport);
                    }
                    OnDeviceIntelligenceService.this.onDownloadFeature(callerUid,
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onDownloadFeature,
                                    OnDeviceIntelligenceService.this, callerUid,
                                    feature,
                                    CancellationSignal.fromTransport(transport),
                            wrapDownloadCallback(downloadCallback));
                                    wrapDownloadCallback(downloadCallback)));
                }

                @Override
@@ -174,9 +204,11 @@ public abstract class OnDeviceIntelligenceService extends Service {
                        AndroidFuture<ParcelFileDescriptor> future) {
                    Objects.requireNonNull(fileName);
                    Objects.requireNonNull(future);

                    OnDeviceIntelligenceService.this.onGetReadOnlyFileDescriptor(fileName,
                            future);
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onGetReadOnlyFileDescriptor,
                                    OnDeviceIntelligenceService.this, fileName,
                                    future));
                }

                @Override
@@ -184,13 +216,15 @@ public abstract class OnDeviceIntelligenceService extends Service {
                        Feature feature, RemoteCallback remoteCallback) {
                    Objects.requireNonNull(feature);
                    Objects.requireNonNull(remoteCallback);

                    OnDeviceIntelligenceService.this.onGetReadOnlyFeatureFileDescriptorMap(
                            feature, parcelFileDescriptorMap -> {
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onGetReadOnlyFeatureFileDescriptorMap,
                                    OnDeviceIntelligenceService.this, feature,
                                    parcelFileDescriptorMap -> {
                                        Bundle bundle = new Bundle();
                                        parcelFileDescriptorMap.forEach(bundle::putParcelable);
                                        remoteCallback.sendResult(bundle);
                            });
                                    }));
                }

                @Override
@@ -201,12 +235,18 @@ public abstract class OnDeviceIntelligenceService extends Service {

                @Override
                public void notifyInferenceServiceConnected() {
                    OnDeviceIntelligenceService.this.onInferenceServiceConnected();
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onInferenceServiceConnected,
                                    OnDeviceIntelligenceService.this));
                }

                @Override
                public void notifyInferenceServiceDisconnected() {
                    OnDeviceIntelligenceService.this.onInferenceServiceDisconnected();
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceIntelligenceService::onInferenceServiceDisconnected,
                                    OnDeviceIntelligenceService.this));
                }
            };
        }
@@ -222,7 +262,8 @@ public abstract class OnDeviceIntelligenceService extends Service {
     * @hide
     */
    @TestApi
    public void onReady() {}
    public void onReady() {
    }


    /**
+46 −21
Original line number Diff line number Diff line
@@ -19,7 +19,10 @@ package android.service.ondeviceintelligence;
import static android.app.ondeviceintelligence.OnDeviceIntelligenceManager.AUGMENT_REQUEST_CONTENT_BUNDLE_KEY;
import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE;

import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;

import android.annotation.CallbackExecutor;
import android.annotation.CallSuper;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -48,6 +51,7 @@ import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.Looper;
import android.os.OutcomeReceiver;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
@@ -126,6 +130,14 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
    public static final String DEVICE_CONFIG_UPDATE_BUNDLE_KEY = "device_config_update";

    private IRemoteStorageService mRemoteStorageService;
    private Handler mHandler;

    @CallSuper
    @Override
    public void onCreate() {
        super.onCreate();
        mHandler = new Handler(Looper.getMainLooper(), null /* callback */, true /* async */);
    }

    /**
     * @hide
@@ -152,11 +164,15 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
                        transport = CancellationSignal.createTransport();
                        cancellationSignalFuture.complete(transport);
                    }
                    OnDeviceSandboxedInferenceService.this.onTokenInfoRequest(callerUid,
                            feature,

                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceSandboxedInferenceService::onTokenInfoRequest,
                                    OnDeviceSandboxedInferenceService.this,
                                    callerUid, feature,
                                    request,
                                    CancellationSignal.fromTransport(transport),
                            wrapTokenInfoCallback(tokenInfoCallback));
                                    wrapTokenInfoCallback(tokenInfoCallback)));
                }

                @Override
@@ -178,13 +194,18 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
                        processingSignalTransport = ProcessingSignal.createTransport();
                        processingSignalFuture.complete(processingSignalTransport);
                    }
                    OnDeviceSandboxedInferenceService.this.onProcessRequestStreaming(callerUid,


                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceSandboxedInferenceService::onProcessRequestStreaming,
                                    OnDeviceSandboxedInferenceService.this, callerUid,
                                    feature,
                                    request,
                                    requestType,
                                    CancellationSignal.fromTransport(transport),
                                    ProcessingSignal.fromTransport(processingSignalTransport),
                            wrapStreamingResponseCallback(callback));
                                    wrapStreamingResponseCallback(callback)));
                }

                @Override
@@ -205,11 +226,14 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
                        processingSignalTransport = ProcessingSignal.createTransport();
                        processingSignalFuture.complete(processingSignalTransport);
                    }
                    OnDeviceSandboxedInferenceService.this.onProcessRequest(callerUid, feature,
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceSandboxedInferenceService::onProcessRequest,
                                    OnDeviceSandboxedInferenceService.this, callerUid, feature,
                                    request, requestType,
                                    CancellationSignal.fromTransport(transport),
                                    ProcessingSignal.fromTransport(processingSignalTransport),
                            wrapResponseCallback(callback));
                                    wrapResponseCallback(callback)));
                }

                @Override
@@ -217,10 +241,11 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
                        IProcessingUpdateStatusCallback callback) {
                    Objects.requireNonNull(processingState);
                    Objects.requireNonNull(callback);

                    OnDeviceSandboxedInferenceService.this.onUpdateProcessingState(processingState,
                            wrapOutcomeReceiver(callback)
                    );
                    mHandler.executeOrSendMessage(
                            obtainMessage(
                                    OnDeviceSandboxedInferenceService::onUpdateProcessingState,
                                    OnDeviceSandboxedInferenceService.this, processingState,
                                    wrapOutcomeReceiver(callback)));
                }
            };
        }
+2 −4
Original line number Diff line number Diff line
@@ -670,7 +670,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
    }

    private void registerDeviceConfigChangeListener() {
        Log.e(TAG, "registerDeviceConfigChangeListener");
        Log.d(TAG, "registerDeviceConfigChangeListener");
        String configNamespace = getConfigNamespace();
        if (configNamespace.isEmpty()) {
            Slog.e(TAG, "config_defaultOnDeviceIntelligenceDeviceConfigNamespace is empty");
@@ -695,7 +695,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {

    private void sendUpdatedConfig(
            DeviceConfig.Properties props) {
        Log.e(TAG, "sendUpdatedConfig");
        Log.d(TAG, "sendUpdatedConfig");

        PersistableBundle persistableBundle = new PersistableBundle();
        for (String key : props.getKeyset()) {
@@ -704,8 +704,6 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
        Bundle bundle = new Bundle();
        bundle.putParcelable(DEVICE_CONFIG_UPDATE_BUNDLE_KEY, persistableBundle);
        ensureRemoteInferenceServiceInitialized();
        Log.e(TAG, "sendUpdatedConfig: BUNDLE: " + bundle);

        mRemoteInferenceService.run(service -> service.updateProcessingState(bundle,
                new IProcessingUpdateStatusCallback.Stub() {
                    @Override