Loading apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java +14 −11 Original line number Diff line number Diff line Loading @@ -90,14 +90,17 @@ public final class AppSearchSession implements Closeable { @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) { try { mService.initialize(mUserId, new IAppSearchResultCallback.Stub() { mService.initialize(mUserId, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(), new IAppSearchResultCallback.Stub() { @Override public void onResult(AppSearchResultParcel resultParcel) { executor.execute(() -> { AppSearchResult<Void> result = resultParcel.getResult(); if (result.isSuccess()) { callback.accept( AppSearchResult.newSuccessfulResult(AppSearchSession.this)); AppSearchResult.newSuccessfulResult( AppSearchSession.this)); } else { callback.accept(AppSearchResult.newFailedResult(result)); } Loading apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java +15 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.app.appsearch.aidl.AppSearchResultParcel; import android.app.appsearch.aidl.IAppSearchManager; import android.app.appsearch.aidl.IAppSearchResultCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.Log; import com.android.internal.util.Preconditions; Loading Loading @@ -72,14 +73,17 @@ public class GlobalSearchSession implements Closeable { @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) { try { mService.initialize(mUserId, new IAppSearchResultCallback.Stub() { mService.initialize(mUserId, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(), new IAppSearchResultCallback.Stub() { @Override public void onResult(AppSearchResultParcel resultParcel) { executor.execute(() -> { AppSearchResult<Void> result = resultParcel.getResult(); if (result.isSuccess()) { callback.accept( AppSearchResult.newSuccessfulResult(GlobalSearchSession.this)); AppSearchResult.newSuccessfulResult( GlobalSearchSession.this)); } else { callback.accept(AppSearchResult.newFailedResult(result)); } Loading apex/appsearch/framework/java/android/app/appsearch/aidl/IAppSearchManager.aidl +5 −1 Original line number Diff line number Diff line Loading @@ -335,8 +335,12 @@ interface IAppSearchManager { * Creates and initializes AppSearchImpl for the calling app. * * @param userId Id of the calling user * @param binderCallStartTimeMillis start timestamp of binder call in Millis * @param callback {@link IAppSearchResultCallback#onResult} will be called with an * {@link AppSearchResult}<{@link Void}>. */ void initialize(in int userId, in IAppSearchResultCallback callback); void initialize( in int userId, in long binderCallStartTimeMillis, in IAppSearchResultCallback callback); } apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java +55 −13 Original line number Diff line number Diff line Loading @@ -217,10 +217,13 @@ public class AppSearchManagerService extends SystemService { } if (ImplInstanceManager.getAppSearchDir(userId).exists()) { // Only clear the package's data if AppSearch exists for this user. AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); //TODO(b/145759910) clear visibility setting for package. impl.clearPackageData(packageName); logger.removeCachedUidForPackage(packageName); } } catch (Throwable t) { Log.e(TAG, "Unable to remove data for package: " + packageName, t); Loading Loading @@ -423,22 +426,22 @@ public class AppSearchManagerService extends SystemService { invokeCallbackOnError(callback, t); } finally { if (logger != null) { int estimatedBinderLatencyMillis = 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis); int totalLatencyMillis = (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis); CallStats.Builder cBuilder = new CallStats.Builder(packageName, databaseName) .setCallType(CallStats.CALL_TYPE_PUT_DOCUMENTS) // TODO(b/173532925) check the existing binder call latency chart // is good enough for us: // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4 .setEstimatedBinderLatencyMillis( 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis)) .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis) .setNumOperationsSucceeded(operationSuccessCount) .setNumOperationsFailed(operationFailureCount); cBuilder.getGeneralStatsBuilder() .setStatusCode(statusCode) .setTotalLatencyMillis( (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis)); .setTotalLatencyMillis(totalLatencyMillis); logger.logStats(cBuilder.build()); } } Loading Loading @@ -913,18 +916,51 @@ public class AppSearchManagerService extends SystemService { } @Override public void initialize(@UserIdInt int userId, @NonNull IAppSearchResultCallback callback) { public void initialize(@UserIdInt int userId, @ElapsedRealtimeLong long binderCallStartTimeMillis, @NonNull IAppSearchResultCallback callback) { Objects.requireNonNull(callback); long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); int callingUserId = handleIncomingUser(userId, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; PlatformLogger logger = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { verifyUserUnlocked(callingUserId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, callingUserId); mLoggerInstanceManager.getOrCreatePlatformLogger(getContext(), callingUserId); logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, callingUserId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, callingUserId, logger); ++operationSuccessCount; invokeCallbackOnResult(callback, AppSearchResult.newSuccessfulResult(null)); } catch (Throwable t) { ++operationFailureCount; statusCode = throwableToFailedResult(t).getResultCode(); invokeCallbackOnError(callback, t); } finally { if (logger != null) { int estimatedBinderLatencyMillis = 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis); int totalLatencyMillis = (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis); // TODO(b/173532925) make packageName and database nullable after // removing generalStats CallStats.Builder cBuilder = new CallStats.Builder(/*packageName=*/"", /*database=*/ "") .setCallType(CallStats.CALL_TYPE_INITIALIZE) // TODO(b/173532925) check the existing binder call latency chart // is good enough for us: // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4 .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis) .setNumOperationsSucceeded(operationSuccessCount) .setNumOperationsFailed(operationFailureCount); cBuilder.getGeneralStatsBuilder() .setStatusCode(statusCode) .setTotalLatencyMillis(totalLatencyMillis); logger.logStats(cBuilder.build()); } } }); } Loading Loading @@ -1021,8 +1057,10 @@ public class AppSearchManagerService extends SystemService { int userId = userHandle.getIdentifier(); try { verifyUserUnlocked(userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); stats.dataSize += impl.getStorageInfoForPackage(packageName).getSizeBytes(); } catch (Throwable t) { Log.e( Loading @@ -1046,8 +1084,10 @@ public class AppSearchManagerService extends SystemService { if (packagesForUid == null) { return; } AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); for (int i = 0; i < packagesForUid.length; i++) { stats.dataSize += impl.getStorageInfoForPackage(packagesForUid[i]).getSizeBytes(); Loading @@ -1073,8 +1113,10 @@ public class AppSearchManagerService extends SystemService { if (packagesForUser == null) { return; } PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); for (int i = 0; i < packagesForUser.size(); i++) { String packageName = packagesForUser.get(i).packageName; stats.dataSize += impl.getStorageInfoForPackage(packageName).getSizeBytes(); Loading apex/appsearch/service/java/com/android/server/appsearch/ImplInstanceManager.java +13 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.appsearch; import static android.content.pm.PackageManager.MATCH_FACTORY_ONLY; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.appsearch.exceptions.AppSearchException; import android.content.Context; Loading @@ -30,6 +31,7 @@ import android.util.SparseArray; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.server.appsearch.external.localstorage.AppSearchImpl; import com.android.server.appsearch.external.localstorage.AppSearchLogger; import java.io.File; Loading Loading @@ -93,11 +95,12 @@ public final class ImplInstanceManager { */ @NonNull public AppSearchImpl getOrCreateAppSearchImpl( @NonNull Context context, @UserIdInt int userId) throws AppSearchException { @NonNull Context context, @UserIdInt int userId, @Nullable AppSearchLogger logger) throws AppSearchException { synchronized (mInstancesLocked) { AppSearchImpl instance = mInstancesLocked.get(userId); if (instance == null) { instance = createImpl(context, userId); instance = createImpl(context, userId, logger); mInstancesLocked.put(userId, instance); } return instance; Loading Loading @@ -164,11 +167,12 @@ public final class ImplInstanceManager { } } private AppSearchImpl createImpl(@NonNull Context context, @UserIdInt int userId) private AppSearchImpl createImpl(@NonNull Context context, @UserIdInt int userId, @Nullable AppSearchLogger logger) throws AppSearchException { File appSearchDir = getAppSearchDir(userId); return AppSearchImpl.create( appSearchDir, context, userId, mGlobalQuerierPackage, /*logger=*/ null); appSearchDir, context, userId, mGlobalQuerierPackage, logger); } /** Loading Loading
apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java +14 −11 Original line number Diff line number Diff line Loading @@ -90,14 +90,17 @@ public final class AppSearchSession implements Closeable { @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) { try { mService.initialize(mUserId, new IAppSearchResultCallback.Stub() { mService.initialize(mUserId, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(), new IAppSearchResultCallback.Stub() { @Override public void onResult(AppSearchResultParcel resultParcel) { executor.execute(() -> { AppSearchResult<Void> result = resultParcel.getResult(); if (result.isSuccess()) { callback.accept( AppSearchResult.newSuccessfulResult(AppSearchSession.this)); AppSearchResult.newSuccessfulResult( AppSearchSession.this)); } else { callback.accept(AppSearchResult.newFailedResult(result)); } Loading
apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java +15 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.app.appsearch.aidl.AppSearchResultParcel; import android.app.appsearch.aidl.IAppSearchManager; import android.app.appsearch.aidl.IAppSearchResultCallback; import android.os.RemoteException; import android.os.SystemClock; import android.util.Log; import com.android.internal.util.Preconditions; Loading Loading @@ -72,14 +73,17 @@ public class GlobalSearchSession implements Closeable { @NonNull @CallbackExecutor Executor executor, @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) { try { mService.initialize(mUserId, new IAppSearchResultCallback.Stub() { mService.initialize(mUserId, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(), new IAppSearchResultCallback.Stub() { @Override public void onResult(AppSearchResultParcel resultParcel) { executor.execute(() -> { AppSearchResult<Void> result = resultParcel.getResult(); if (result.isSuccess()) { callback.accept( AppSearchResult.newSuccessfulResult(GlobalSearchSession.this)); AppSearchResult.newSuccessfulResult( GlobalSearchSession.this)); } else { callback.accept(AppSearchResult.newFailedResult(result)); } Loading
apex/appsearch/framework/java/android/app/appsearch/aidl/IAppSearchManager.aidl +5 −1 Original line number Diff line number Diff line Loading @@ -335,8 +335,12 @@ interface IAppSearchManager { * Creates and initializes AppSearchImpl for the calling app. * * @param userId Id of the calling user * @param binderCallStartTimeMillis start timestamp of binder call in Millis * @param callback {@link IAppSearchResultCallback#onResult} will be called with an * {@link AppSearchResult}<{@link Void}>. */ void initialize(in int userId, in IAppSearchResultCallback callback); void initialize( in int userId, in long binderCallStartTimeMillis, in IAppSearchResultCallback callback); }
apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java +55 −13 Original line number Diff line number Diff line Loading @@ -217,10 +217,13 @@ public class AppSearchManagerService extends SystemService { } if (ImplInstanceManager.getAppSearchDir(userId).exists()) { // Only clear the package's data if AppSearch exists for this user. AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); //TODO(b/145759910) clear visibility setting for package. impl.clearPackageData(packageName); logger.removeCachedUidForPackage(packageName); } } catch (Throwable t) { Log.e(TAG, "Unable to remove data for package: " + packageName, t); Loading Loading @@ -423,22 +426,22 @@ public class AppSearchManagerService extends SystemService { invokeCallbackOnError(callback, t); } finally { if (logger != null) { int estimatedBinderLatencyMillis = 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis); int totalLatencyMillis = (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis); CallStats.Builder cBuilder = new CallStats.Builder(packageName, databaseName) .setCallType(CallStats.CALL_TYPE_PUT_DOCUMENTS) // TODO(b/173532925) check the existing binder call latency chart // is good enough for us: // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4 .setEstimatedBinderLatencyMillis( 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis)) .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis) .setNumOperationsSucceeded(operationSuccessCount) .setNumOperationsFailed(operationFailureCount); cBuilder.getGeneralStatsBuilder() .setStatusCode(statusCode) .setTotalLatencyMillis( (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis)); .setTotalLatencyMillis(totalLatencyMillis); logger.logStats(cBuilder.build()); } } Loading Loading @@ -913,18 +916,51 @@ public class AppSearchManagerService extends SystemService { } @Override public void initialize(@UserIdInt int userId, @NonNull IAppSearchResultCallback callback) { public void initialize(@UserIdInt int userId, @ElapsedRealtimeLong long binderCallStartTimeMillis, @NonNull IAppSearchResultCallback callback) { Objects.requireNonNull(callback); long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); int callingUserId = handleIncomingUser(userId, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; PlatformLogger logger = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { verifyUserUnlocked(callingUserId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, callingUserId); mLoggerInstanceManager.getOrCreatePlatformLogger(getContext(), callingUserId); logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, callingUserId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, callingUserId, logger); ++operationSuccessCount; invokeCallbackOnResult(callback, AppSearchResult.newSuccessfulResult(null)); } catch (Throwable t) { ++operationFailureCount; statusCode = throwableToFailedResult(t).getResultCode(); invokeCallbackOnError(callback, t); } finally { if (logger != null) { int estimatedBinderLatencyMillis = 2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis); int totalLatencyMillis = (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis); // TODO(b/173532925) make packageName and database nullable after // removing generalStats CallStats.Builder cBuilder = new CallStats.Builder(/*packageName=*/"", /*database=*/ "") .setCallType(CallStats.CALL_TYPE_INITIALIZE) // TODO(b/173532925) check the existing binder call latency chart // is good enough for us: // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4 .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis) .setNumOperationsSucceeded(operationSuccessCount) .setNumOperationsFailed(operationFailureCount); cBuilder.getGeneralStatsBuilder() .setStatusCode(statusCode) .setTotalLatencyMillis(totalLatencyMillis); logger.logStats(cBuilder.build()); } } }); } Loading Loading @@ -1021,8 +1057,10 @@ public class AppSearchManagerService extends SystemService { int userId = userHandle.getIdentifier(); try { verifyUserUnlocked(userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); stats.dataSize += impl.getStorageInfoForPackage(packageName).getSizeBytes(); } catch (Throwable t) { Log.e( Loading @@ -1046,8 +1084,10 @@ public class AppSearchManagerService extends SystemService { if (packagesForUid == null) { return; } AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); for (int i = 0; i < packagesForUid.length; i++) { stats.dataSize += impl.getStorageInfoForPackage(packagesForUid[i]).getSizeBytes(); Loading @@ -1073,8 +1113,10 @@ public class AppSearchManagerService extends SystemService { if (packagesForUser == null) { return; } PlatformLogger logger = mLoggerInstanceManager.getOrCreatePlatformLogger(mContext, userId); AppSearchImpl impl = mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId); mImplInstanceManager.getOrCreateAppSearchImpl(mContext, userId, logger); for (int i = 0; i < packagesForUser.size(); i++) { String packageName = packagesForUser.get(i).packageName; stats.dataSize += impl.getStorageInfoForPackage(packageName).getSizeBytes(); Loading
apex/appsearch/service/java/com/android/server/appsearch/ImplInstanceManager.java +13 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.appsearch; import static android.content.pm.PackageManager.MATCH_FACTORY_ONLY; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.appsearch.exceptions.AppSearchException; import android.content.Context; Loading @@ -30,6 +31,7 @@ import android.util.SparseArray; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.server.appsearch.external.localstorage.AppSearchImpl; import com.android.server.appsearch.external.localstorage.AppSearchLogger; import java.io.File; Loading Loading @@ -93,11 +95,12 @@ public final class ImplInstanceManager { */ @NonNull public AppSearchImpl getOrCreateAppSearchImpl( @NonNull Context context, @UserIdInt int userId) throws AppSearchException { @NonNull Context context, @UserIdInt int userId, @Nullable AppSearchLogger logger) throws AppSearchException { synchronized (mInstancesLocked) { AppSearchImpl instance = mInstancesLocked.get(userId); if (instance == null) { instance = createImpl(context, userId); instance = createImpl(context, userId, logger); mInstancesLocked.put(userId, instance); } return instance; Loading Loading @@ -164,11 +167,12 @@ public final class ImplInstanceManager { } } private AppSearchImpl createImpl(@NonNull Context context, @UserIdInt int userId) private AppSearchImpl createImpl(@NonNull Context context, @UserIdInt int userId, @Nullable AppSearchLogger logger) throws AppSearchException { File appSearchDir = getAppSearchDir(userId); return AppSearchImpl.create( appSearchDir, context, userId, mGlobalQuerierPackage, /*logger=*/ null); appSearchDir, context, userId, mGlobalQuerierPackage, logger); } /** Loading