1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.server.appsearch; 17 18 import android.annotation.NonNull; 19 20 import com.android.server.appsearch.external.localstorage.AppSearchImpl; 21 import com.android.server.appsearch.external.localstorage.OptimizeStrategy; 22 23 import com.google.android.icing.proto.GetOptimizeInfoResultProto; 24 25 import java.util.Objects; 26 27 /** 28 * An implementation of {@link OptimizeStrategy} will determine when to trigger {@link 29 * AppSearchImpl#optimize()} in Jetpack environment. 30 * 31 * @hide 32 */ 33 public class FrameworkOptimizeStrategy implements OptimizeStrategy { 34 private final AppSearchConfig mAppSearchConfig; FrameworkOptimizeStrategy(@onNull AppSearchConfig config)35 FrameworkOptimizeStrategy(@NonNull AppSearchConfig config) { 36 mAppSearchConfig = Objects.requireNonNull(config); 37 } 38 39 @Override shouldOptimize(@onNull GetOptimizeInfoResultProto optimizeInfo)40 public boolean shouldOptimize(@NonNull GetOptimizeInfoResultProto optimizeInfo) { 41 return optimizeInfo.getOptimizableDocs() 42 >= mAppSearchConfig.getCachedDocCountOptimizeThreshold() 43 || optimizeInfo.getEstimatedOptimizableBytes() 44 >= mAppSearchConfig.getCachedBytesOptimizeThreshold() 45 || optimizeInfo.getTimeSinceLastOptimizeMs() 46 >= mAppSearchConfig.getCachedTimeOptimizeThresholdMs(); 47 } 48 } 49