1 /* 2 * Copyright 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 17 package com.android.server.appsearch.external.localstorage.stats; 18 19 import android.annotation.NonNull; 20 import android.app.appsearch.AppSearchResult; 21 22 import java.util.Objects; 23 24 /** 25 * Class holds detailed stats for Optimize. 26 * 27 * @hide 28 */ 29 public final class OptimizeStats { 30 /** 31 * The status code returned by {@link AppSearchResult#getResultCode()} for the call or internal 32 * state. 33 */ 34 @AppSearchResult.ResultCode private final int mStatusCode; 35 36 private final int mTotalLatencyMillis; 37 private final int mNativeLatencyMillis; 38 39 // Time used to optimize the document store in millis. 40 private final int mNativeDocumentStoreOptimizeLatencyMillis; 41 42 // Time used to restore the index in millis. 43 private final int mNativeIndexRestorationLatencyMillis; 44 45 // Number of documents before the optimization. 46 private final int mNativeOriginalDocumentCount; 47 48 // Number of documents deleted during the optimization. 49 private final int mNativeDeletedDocumentCount; 50 51 // Number of documents expired during the optimization. 52 private final int mNativeExpiredDocumentCount; 53 54 // Size of storage in bytes before the optimization. 55 private final long mNativeStorageSizeBeforeBytes; 56 57 // Size of storage in bytes after the optimization. 58 private final long mNativeStorageSizeAfterBytes; 59 60 // The amount of time in millis since the last optimization ran calculated using wall clock time 61 private final long mNativeTimeSinceLastOptimizeMillis; 62 OptimizeStats(@onNull Builder builder)63 OptimizeStats(@NonNull Builder builder) { 64 Objects.requireNonNull(builder); 65 mStatusCode = builder.mStatusCode; 66 mTotalLatencyMillis = builder.mTotalLatencyMillis; 67 mNativeLatencyMillis = builder.mNativeLatencyMillis; 68 mNativeDocumentStoreOptimizeLatencyMillis = 69 builder.mNativeDocumentStoreOptimizeLatencyMillis; 70 mNativeIndexRestorationLatencyMillis = builder.mNativeIndexRestorationLatencyMillis; 71 mNativeOriginalDocumentCount = builder.mNativeOriginalDocumentCount; 72 mNativeDeletedDocumentCount = builder.mNativeDeletedDocumentCount; 73 mNativeExpiredDocumentCount = builder.mNativeExpiredDocumentCount; 74 mNativeStorageSizeBeforeBytes = builder.mNativeStorageSizeBeforeBytes; 75 mNativeStorageSizeAfterBytes = builder.mNativeStorageSizeAfterBytes; 76 mNativeTimeSinceLastOptimizeMillis = builder.mNativeTimeSinceLastOptimizeMillis; 77 } 78 79 /** Returns status code for this optimization. */ 80 @AppSearchResult.ResultCode getStatusCode()81 public int getStatusCode() { 82 return mStatusCode; 83 } 84 85 /** Returns total latency of this optimization in millis. */ getTotalLatencyMillis()86 public int getTotalLatencyMillis() { 87 return mTotalLatencyMillis; 88 } 89 90 /** Returns how much time in millis spent in the native code. */ getNativeLatencyMillis()91 public int getNativeLatencyMillis() { 92 return mNativeLatencyMillis; 93 } 94 95 /** Returns time used to optimize the document store in millis. */ getDocumentStoreOptimizeLatencyMillis()96 public int getDocumentStoreOptimizeLatencyMillis() { 97 return mNativeDocumentStoreOptimizeLatencyMillis; 98 } 99 100 /** Returns time used to restore the index in millis. */ getIndexRestorationLatencyMillis()101 public int getIndexRestorationLatencyMillis() { 102 return mNativeIndexRestorationLatencyMillis; 103 } 104 105 /** Returns number of documents before the optimization. */ getOriginalDocumentCount()106 public int getOriginalDocumentCount() { 107 return mNativeOriginalDocumentCount; 108 } 109 110 /** Returns number of documents deleted during the optimization. */ getDeletedDocumentCount()111 public int getDeletedDocumentCount() { 112 return mNativeDeletedDocumentCount; 113 } 114 115 /** Returns number of documents expired during the optimization. */ getExpiredDocumentCount()116 public int getExpiredDocumentCount() { 117 return mNativeExpiredDocumentCount; 118 } 119 120 /** Returns size of storage in bytes before the optimization. */ getStorageSizeBeforeBytes()121 public long getStorageSizeBeforeBytes() { 122 return mNativeStorageSizeBeforeBytes; 123 } 124 125 /** Returns size of storage in bytes after the optimization. */ getStorageSizeAfterBytes()126 public long getStorageSizeAfterBytes() { 127 return mNativeStorageSizeAfterBytes; 128 } 129 130 /** 131 * Returns the amount of time in millis since the last optimization ran calculated using wall 132 * clock time. 133 */ getTimeSinceLastOptimizeMillis()134 public long getTimeSinceLastOptimizeMillis() { 135 return mNativeTimeSinceLastOptimizeMillis; 136 } 137 138 /** Builder for {@link RemoveStats}. */ 139 public static class Builder { 140 /** 141 * The status code returned by {@link AppSearchResult#getResultCode()} for the call or 142 * internal state. 143 */ 144 @AppSearchResult.ResultCode int mStatusCode; 145 146 int mTotalLatencyMillis; 147 int mNativeLatencyMillis; 148 int mNativeDocumentStoreOptimizeLatencyMillis; 149 int mNativeIndexRestorationLatencyMillis; 150 int mNativeOriginalDocumentCount; 151 int mNativeDeletedDocumentCount; 152 int mNativeExpiredDocumentCount; 153 long mNativeStorageSizeBeforeBytes; 154 long mNativeStorageSizeAfterBytes; 155 long mNativeTimeSinceLastOptimizeMillis; 156 157 /** Sets the status code. */ 158 @NonNull setStatusCode(@ppSearchResult.ResultCode int statusCode)159 public Builder setStatusCode(@AppSearchResult.ResultCode int statusCode) { 160 mStatusCode = statusCode; 161 return this; 162 } 163 164 /** Sets total latency in millis. */ 165 @NonNull setTotalLatencyMillis(int totalLatencyMillis)166 public Builder setTotalLatencyMillis(int totalLatencyMillis) { 167 mTotalLatencyMillis = totalLatencyMillis; 168 return this; 169 } 170 171 /** Sets native latency in millis. */ 172 @NonNull setNativeLatencyMillis(int nativeLatencyMillis)173 public Builder setNativeLatencyMillis(int nativeLatencyMillis) { 174 mNativeLatencyMillis = nativeLatencyMillis; 175 return this; 176 } 177 178 /** Sets time used to optimize the document store. */ 179 @NonNull setDocumentStoreOptimizeLatencyMillis( int documentStoreOptimizeLatencyMillis)180 public Builder setDocumentStoreOptimizeLatencyMillis( 181 int documentStoreOptimizeLatencyMillis) { 182 mNativeDocumentStoreOptimizeLatencyMillis = documentStoreOptimizeLatencyMillis; 183 return this; 184 } 185 186 /** Sets time used to restore the index. */ 187 @NonNull setIndexRestorationLatencyMillis(int indexRestorationLatencyMillis)188 public Builder setIndexRestorationLatencyMillis(int indexRestorationLatencyMillis) { 189 mNativeIndexRestorationLatencyMillis = indexRestorationLatencyMillis; 190 return this; 191 } 192 193 /** Sets number of documents before the optimization. */ 194 @NonNull setOriginalDocumentCount(int originalDocumentCount)195 public Builder setOriginalDocumentCount(int originalDocumentCount) { 196 mNativeOriginalDocumentCount = originalDocumentCount; 197 return this; 198 } 199 200 /** Sets number of documents deleted during the optimization. */ 201 @NonNull setDeletedDocumentCount(int deletedDocumentCount)202 public Builder setDeletedDocumentCount(int deletedDocumentCount) { 203 mNativeDeletedDocumentCount = deletedDocumentCount; 204 return this; 205 } 206 207 /** Sets number of documents expired during the optimization. */ 208 @NonNull setExpiredDocumentCount(int expiredDocumentCount)209 public Builder setExpiredDocumentCount(int expiredDocumentCount) { 210 mNativeExpiredDocumentCount = expiredDocumentCount; 211 return this; 212 } 213 214 /** Sets Storage size in bytes before optimization. */ 215 @NonNull setStorageSizeBeforeBytes(long storageSizeBeforeBytes)216 public Builder setStorageSizeBeforeBytes(long storageSizeBeforeBytes) { 217 mNativeStorageSizeBeforeBytes = storageSizeBeforeBytes; 218 return this; 219 } 220 221 /** Sets storage size in bytes after optimization. */ 222 @NonNull setStorageSizeAfterBytes(long storageSizeAfterBytes)223 public Builder setStorageSizeAfterBytes(long storageSizeAfterBytes) { 224 mNativeStorageSizeAfterBytes = storageSizeAfterBytes; 225 return this; 226 } 227 228 /** 229 * Sets the amount the time since the last optimize ran calculated using wall clock time. 230 */ 231 @NonNull setTimeSinceLastOptimizeMillis(long timeSinceLastOptimizeMillis)232 public Builder setTimeSinceLastOptimizeMillis(long timeSinceLastOptimizeMillis) { 233 mNativeTimeSinceLastOptimizeMillis = timeSinceLastOptimizeMillis; 234 return this; 235 } 236 237 /** Creates a {@link OptimizeStats}. */ 238 @NonNull build()239 public OptimizeStats build() { 240 return new OptimizeStats(/* builder= */ this); 241 } 242 } 243 } 244