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

Commit 63523898 authored by Alexander Dorokhine's avatar Alexander Dorokhine Committed by Automerger Merge Worker
Browse files

Merge "Update framework from jetpack." into sc-dev am: ad37babc

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14834284

Change-Id: Ibede3baae5e89b4fdfbcbed09339136a7529ff3b
parents 411bde09 ad37babc
Loading
Loading
Loading
Loading
+58 −66
Original line number Original line Diff line number Diff line
@@ -348,19 +348,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_SET_SCHEMA)
                                .setCallType(CallStats.CALL_TYPE_SET_SCHEMA)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -480,19 +480,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_PUT_DOCUMENTS)
                                .setCallType(CallStats.CALL_TYPE_PUT_DOCUMENTS)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -563,19 +563,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_GET_DOCUMENTS)
                                .setCallType(CallStats.CALL_TYPE_GET_DOCUMENTS)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -631,19 +631,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_SEARCH)
                                .setCallType(CallStats.CALL_TYPE_SEARCH)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -697,20 +697,18 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        // TODO(b/173532925) database would be nulluable once we remove generalStats
                        logger.logStats(new CallStats.Builder()
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                                .setPackageName(packageName)
                                /*database=*/ "")
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_GLOBAL_SEARCH)
                                .setCallType(CallStats.CALL_TYPE_GLOBAL_SEARCH)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -965,19 +963,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_ID)
                                .setCallType(CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_ID)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -1033,19 +1031,19 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(packageName,
                        logger.logStats(new CallStats.Builder()
                                databaseName)
                                .setPackageName(packageName)
                                .setDatabase(databaseName)
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH)
                                .setCallType(CallStats.CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -1110,19 +1108,17 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        CallStats.Builder cBuilder = new CallStats.Builder(/*packageName=*/ "",
                        logger.logStats(new CallStats.Builder()
                                /*databaseName=*/ "")
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis)
                                .setCallType(CallStats.CALL_TYPE_FLUSH)
                                .setCallType(CallStats.CALL_TYPE_FLUSH)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
@@ -1162,21 +1158,17 @@ public class AppSearchManagerService extends SystemService {
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                                2 * (int) (totalLatencyStartTimeMillis - binderCallStartTimeMillis);
                        int totalLatencyMillis =
                        int totalLatencyMillis =
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                                (int) (SystemClock.elapsedRealtime() - totalLatencyStartTimeMillis);
                        // TODO(b/173532925) make packageName and database nullable after
                        logger.logStats(new CallStats.Builder()
                        //  removing generalStats
                                .setStatusCode(statusCode)
                        CallStats.Builder cBuilder = new CallStats.Builder(/*packageName=*/"",
                                .setTotalLatencyMillis(totalLatencyMillis)
                                /*database=*/ "")
                                .setCallType(CallStats.CALL_TYPE_INITIALIZE)
                                .setCallType(CallStats.CALL_TYPE_INITIALIZE)
                                // TODO(b/173532925) check the existing binder call latency chart
                                // TODO(b/173532925) check the existing binder call latency chart
                                // is good enough for us:
                                // is good enough for us:
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                // http://dashboards/view/_72c98f9a_91d9_41d4_ab9a_bc14f79742b4
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setEstimatedBinderLatencyMillis(estimatedBinderLatencyMillis)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsSucceeded(operationSuccessCount)
                                .setNumOperationsFailed(operationFailureCount);
                                .setNumOperationsFailed(operationFailureCount)
                        cBuilder.getGeneralStatsBuilder()
                                .build());
                                .setStatusCode(statusCode)
                                .setTotalLatencyMillis(totalLatencyMillis);
                        logger.logStats(cBuilder.build());
                    }
                    }
                }
                }
            });
            });
+6 −1
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import android.util.ArrayMap;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.server.appsearch.external.localstorage.AppSearchImpl;
import com.android.server.appsearch.external.localstorage.AppSearchImpl;
import com.android.server.appsearch.external.localstorage.AppSearchLogger;
import com.android.server.appsearch.external.localstorage.AppSearchLogger;
import com.android.server.appsearch.external.localstorage.FrameworkOptimizeStrategy;


import java.io.File;
import java.io.File;
import java.util.Map;
import java.util.Map;
@@ -153,6 +154,10 @@ public final class ImplInstanceManager {
            @Nullable AppSearchLogger logger)
            @Nullable AppSearchLogger logger)
            throws AppSearchException {
            throws AppSearchException {
        File appSearchDir = getAppSearchDir(userHandle);
        File appSearchDir = getAppSearchDir(userHandle);
        return AppSearchImpl.create(appSearchDir, userContext, /*logger=*/ null);
        return AppSearchImpl.create(
                appSearchDir,
                userContext,
                /*logger=*/ null,
                new FrameworkOptimizeStrategy());
    }
    }
}
}
+19 −21
Original line number Original line Diff line number Diff line
@@ -145,14 +145,14 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
public final class AppSearchImpl implements Closeable {
public final class AppSearchImpl implements Closeable {
    private static final String TAG = "AppSearchImpl";
    private static final String TAG = "AppSearchImpl";


    @VisibleForTesting static final int OPTIMIZE_THRESHOLD_DOC_COUNT = 1000;
    @VisibleForTesting static final int OPTIMIZE_THRESHOLD_BYTES = 1_000_000; // 1MB
    @VisibleForTesting static final int CHECK_OPTIMIZE_INTERVAL = 100;
    @VisibleForTesting static final int CHECK_OPTIMIZE_INTERVAL = 100;


    private final ReadWriteLock mReadWriteLock = new ReentrantReadWriteLock();
    private final ReadWriteLock mReadWriteLock = new ReentrantReadWriteLock();


    private final LogUtil mLogUtil = new LogUtil(TAG);
    private final LogUtil mLogUtil = new LogUtil(TAG);


    private final OptimizeStrategy mOptimizeStrategy;

    @GuardedBy("mReadWriteLock")
    @GuardedBy("mReadWriteLock")
    @VisibleForTesting
    @VisibleForTesting
    final IcingSearchEngine mIcingSearchEngineLocked;
    final IcingSearchEngine mIcingSearchEngineLocked;
@@ -201,10 +201,12 @@ public final class AppSearchImpl implements Closeable {
    public static AppSearchImpl create(
    public static AppSearchImpl create(
            @NonNull File icingDir,
            @NonNull File icingDir,
            @NonNull Context userContext,
            @NonNull Context userContext,
            @Nullable AppSearchLogger logger)
            @Nullable AppSearchLogger logger,
            @NonNull OptimizeStrategy optimizeStrategy)
            throws AppSearchException {
            throws AppSearchException {
        Objects.requireNonNull(icingDir);
        Objects.requireNonNull(icingDir);
        Objects.requireNonNull(userContext);
        Objects.requireNonNull(userContext);
        Objects.requireNonNull(optimizeStrategy);


        long totalLatencyStartMillis = SystemClock.elapsedRealtime();
        long totalLatencyStartMillis = SystemClock.elapsedRealtime();
        InitializeStats.Builder initStatsBuilder = null;
        InitializeStats.Builder initStatsBuilder = null;
@@ -212,7 +214,9 @@ public final class AppSearchImpl implements Closeable {
            initStatsBuilder = new InitializeStats.Builder();
            initStatsBuilder = new InitializeStats.Builder();
        }
        }


        AppSearchImpl appSearchImpl = new AppSearchImpl(icingDir, userContext, initStatsBuilder);
        AppSearchImpl appSearchImpl =
                new AppSearchImpl(
                        icingDir, userContext, initStatsBuilder, optimizeStrategy);


        long prepareVisibilityStoreLatencyStartMillis = SystemClock.elapsedRealtime();
        long prepareVisibilityStoreLatencyStartMillis = SystemClock.elapsedRealtime();
        appSearchImpl.initializeVisibilityStore();
        appSearchImpl.initializeVisibilityStore();
@@ -236,7 +240,8 @@ public final class AppSearchImpl implements Closeable {
    private AppSearchImpl(
    private AppSearchImpl(
            @NonNull File icingDir,
            @NonNull File icingDir,
            @NonNull Context userContext,
            @NonNull Context userContext,
            @Nullable InitializeStats.Builder initStatsBuilder)
            @Nullable InitializeStats.Builder initStatsBuilder,
            @NonNull OptimizeStrategy optimizeStrategy)
            throws AppSearchException {
            throws AppSearchException {
        mReadWriteLock.writeLock().lock();
        mReadWriteLock.writeLock().lock();


@@ -254,6 +259,7 @@ public final class AppSearchImpl implements Closeable {
                    Objects.hashCode(mIcingSearchEngineLocked));
                    Objects.hashCode(mIcingSearchEngineLocked));


            mVisibilityStoreLocked = new VisibilityStore(this, userContext);
            mVisibilityStoreLocked = new VisibilityStore(this, userContext);
            mOptimizeStrategy = optimizeStrategy;


            // The core initialization procedure. If any part of this fails, we bail into
            // The core initialization procedure. If any part of this fails, we bail into
            // resetLocked(), deleting all data (but hopefully allowing AppSearchImpl to come up).
            // resetLocked(), deleting all data (but hopefully allowing AppSearchImpl to come up).
@@ -646,9 +652,7 @@ public final class AppSearchImpl implements Closeable {
            // Logging stats
            // Logging stats
            if (pStatsBuilder != null) {
            if (pStatsBuilder != null) {
                pStatsBuilder
                pStatsBuilder
                        .getGeneralStatsBuilder()
                        .setStatusCode(statusProtoToResultCode(putResultProto.getStatus()))
                        .setStatusCode(statusProtoToResultCode(putResultProto.getStatus()));
                pStatsBuilder
                        .setGenerateDocumentProtoLatencyMillis(
                        .setGenerateDocumentProtoLatencyMillis(
                                (int)
                                (int)
                                        (generateDocumentProtoEndTimeMillis
                                        (generateDocumentProtoEndTimeMillis
@@ -667,9 +671,8 @@ public final class AppSearchImpl implements Closeable {


            if (logger != null) {
            if (logger != null) {
                long totalEndTimeMillis = SystemClock.elapsedRealtime();
                long totalEndTimeMillis = SystemClock.elapsedRealtime();
                pStatsBuilder
                pStatsBuilder.setTotalLatencyMillis(
                        .getGeneralStatsBuilder()
                        (int) (totalEndTimeMillis - totalStartTimeMillis));
                        .setTotalLatencyMillis((int) (totalEndTimeMillis - totalStartTimeMillis));
                logger.logStats(pStatsBuilder.build());
                logger.logStats(pStatsBuilder.build());
            }
            }
        }
        }
@@ -812,7 +815,8 @@ public final class AppSearchImpl implements Closeable {
     *
     *
     * @param queryExpression Query String to search.
     * @param queryExpression Query String to search.
     * @param searchSpec Spec for setting filters, raw query etc.
     * @param searchSpec Spec for setting filters, raw query etc.
     * @param callerPackageName Package name of the caller, should belong to the {@code callerUid}.
     * @param callerPackageName Package name of the caller, should belong to the {@code
     *     userContext}.
     * @param callerUid UID of the client making the globalQuery call.
     * @param callerUid UID of the client making the globalQuery call.
     * @param logger logger to collect globalQuery stats
     * @param logger logger to collect globalQuery stats
     * @return The results of performing this search. It may contain an empty list of results if no
     * @return The results of performing this search. It may contain an empty list of results if no
@@ -2001,7 +2005,7 @@ public final class AppSearchImpl implements Closeable {
     * resources that could be released.
     * resources that could be released.
     *
     *
     * <p>{@link IcingSearchEngine#optimize()} should be called only if {@link
     * <p>{@link IcingSearchEngine#optimize()} should be called only if {@link
     * GetOptimizeInfoResultProto} shows there is enough resources could be released.
     * OptimizeStrategy#shouldOptimize(GetOptimizeInfoResultProto)} return true.
     */
     */
    public void checkForOptimize() throws AppSearchException {
    public void checkForOptimize() throws AppSearchException {
        mReadWriteLock.writeLock().lock();
        mReadWriteLock.writeLock().lock();
@@ -2009,9 +2013,7 @@ public final class AppSearchImpl implements Closeable {
            GetOptimizeInfoResultProto optimizeInfo = getOptimizeInfoResultLocked();
            GetOptimizeInfoResultProto optimizeInfo = getOptimizeInfoResultLocked();
            checkSuccess(optimizeInfo.getStatus());
            checkSuccess(optimizeInfo.getStatus());
            mOptimizeIntervalCountLocked = 0;
            mOptimizeIntervalCountLocked = 0;
            // Second threshold, decide when to call optimize().
            if (mOptimizeStrategy.shouldOptimize(optimizeInfo)) {
            if (optimizeInfo.getOptimizableDocs() >= OPTIMIZE_THRESHOLD_DOC_COUNT
                    || optimizeInfo.getEstimatedOptimizableBytes() >= OPTIMIZE_THRESHOLD_BYTES) {
                optimize();
                optimize();
            }
            }
        } finally {
        } finally {
@@ -2022,11 +2024,7 @@ public final class AppSearchImpl implements Closeable {
        //  go/icing-library-apis.
        //  go/icing-library-apis.
    }
    }


    /**
    /** Triggers {@link IcingSearchEngine#optimize()} directly. */
     * Triggers {@link IcingSearchEngine#optimize()} directly.
     *
     * <p>This method should be only called as a scheduled task in AppSearch Platform backend.
     */
    public void optimize() throws AppSearchException {
    public void optimize() throws AppSearchException {
        mReadWriteLock.writeLock().lock();
        mReadWriteLock.writeLock().lock();
        try {
        try {
+44 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.server.appsearch.external.localstorage;

import android.annotation.NonNull;

import com.android.internal.annotations.VisibleForTesting;

import com.google.android.icing.proto.GetOptimizeInfoResultProto;

/**
 * An implementation of {@link OptimizeStrategy} will determine when to trigger {@link
 * AppSearchImpl#optimize()} in Jetpack environment.
 *
 * @hide
 */
public class FrameworkOptimizeStrategy implements OptimizeStrategy {

    @VisibleForTesting static final int DOC_COUNT_OPTIMIZE_THRESHOLD = 100_000;
    @VisibleForTesting static final int BYTES_OPTIMIZE_THRESHOLD = 1 * 1024 * 1024 * 1024; // 1GB

    @VisibleForTesting
    static final long TIME_OPTIMIZE_THRESHOLD_MILLIS = 7 * 24 * 60 * 60 * 1000; // 1 week

    @Override
    public boolean shouldOptimize(@NonNull GetOptimizeInfoResultProto optimizeInfo) {
        return optimizeInfo.getOptimizableDocs() >= DOC_COUNT_OPTIMIZE_THRESHOLD
                || optimizeInfo.getEstimatedOptimizableBytes() >= BYTES_OPTIMIZE_THRESHOLD
                || optimizeInfo.getTimeSinceLastOptimizeMs() >= TIME_OPTIMIZE_THRESHOLD_MILLIS;
    }
}
+39 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.appsearch.external.localstorage;

import android.annotation.NonNull;

import com.google.android.icing.proto.GetOptimizeInfoResultProto;

/**
 * An interface class for implementing a strategy to determine when to trigger {@link
 * AppSearchImpl#optimize()}.
 *
 * @hide
 */
public interface OptimizeStrategy {

    /**
     * Determines whether {@link AppSearchImpl#optimize()} need to be triggered to release garbage
     * resources in AppSearch base on the given information.
     *
     * @param optimizeInfo The proto object indicates the number of garbage resources in AppSearch.
     * @return {@code true} if {@link AppSearchImpl#optimize()} need to be triggered.
     */
    boolean shouldOptimize(@NonNull GetOptimizeInfoResultProto optimizeInfo);
}
Loading