405 lines
15 KiB
Java
405 lines
15 KiB
Java
/*
|
|
* Copyright 2022 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 android.app.appsearch.stats;
|
|
|
|
import android.annotation.IntDef;
|
|
import android.annotation.NonNull;
|
|
import android.app.appsearch.AppSearchResult;
|
|
import android.app.appsearch.SetSchemaRequest;
|
|
import android.app.appsearch.annotation.CanIgnoreReturnValue;
|
|
import android.app.appsearch.safeparcel.AbstractSafeParcelable;
|
|
import android.app.appsearch.safeparcel.SafeParcelable;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Class holds detailed stats for Schema migration.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SafeParcelable.Class(creator = "SchemaMigrationStatsCreator")
|
|
public final class SchemaMigrationStats extends AbstractSafeParcelable {
|
|
@NonNull
|
|
public static final Parcelable.Creator<SchemaMigrationStats> CREATOR =
|
|
new SchemaMigrationStatsCreator();
|
|
|
|
/** Indicate the SetSchema call type relative to SchemaMigration case. */
|
|
@IntDef(
|
|
value = {
|
|
NO_MIGRATION,
|
|
FIRST_CALL_GET_INCOMPATIBLE,
|
|
SECOND_CALL_APPLY_NEW_SCHEMA,
|
|
})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface SchemaMigrationCallType {}
|
|
|
|
/** This SetSchema call is not relative to a SchemaMigration case. */
|
|
public static final int NO_MIGRATION = 0;
|
|
|
|
/** This is the first SetSchema call in Migration cases to get all incompatible changes. */
|
|
public static final int FIRST_CALL_GET_INCOMPATIBLE = 1;
|
|
|
|
/** This is the second SetSchema call in Migration cases to apply new schema changes */
|
|
public static final int SECOND_CALL_APPLY_NEW_SCHEMA = 2;
|
|
|
|
@Field(id = 1, getter = "getPackageName")
|
|
@NonNull
|
|
private final String mPackageName;
|
|
|
|
@Field(id = 2, getter = "getDatabase")
|
|
@NonNull
|
|
private final String mDatabase;
|
|
|
|
@Field(id = 3, getter = "getStatusCode")
|
|
private final int mStatusCode;
|
|
|
|
@Field(id = 4, getter = "getExecutorAcquisitionLatencyMillis")
|
|
private final int mExecutorAcquisitionLatencyMillis;
|
|
|
|
@Field(id = 5, getter = "getTotalLatencyMillis")
|
|
private final int mTotalLatencyMillis;
|
|
|
|
@Field(id = 6, getter = "getGetSchemaLatencyMillis")
|
|
private final int mGetSchemaLatencyMillis;
|
|
|
|
@Field(id = 7, getter = "getQueryAndTransformLatencyMillis")
|
|
private final int mQueryAndTransformLatencyMillis;
|
|
|
|
@Field(id = 8, getter = "getFirstSetSchemaLatencyMillis")
|
|
private final int mFirstSetSchemaLatencyMillis;
|
|
|
|
@Field(id = 9, getter = "isFirstSetSchemaSuccess")
|
|
private final boolean mIsFirstSetSchemaSuccess;
|
|
|
|
@Field(id = 10, getter = "getSecondSetSchemaLatencyMillis")
|
|
private final int mSecondSetSchemaLatencyMillis;
|
|
|
|
@Field(id = 11, getter = "getSaveDocumentLatencyMillis")
|
|
private final int mSaveDocumentLatencyMillis;
|
|
|
|
@Field(id = 12, getter = "getTotalNeedMigratedDocumentCount")
|
|
private final int mTotalNeedMigratedDocumentCount;
|
|
|
|
@Field(id = 13, getter = "getMigrationFailureCount")
|
|
private final int mMigrationFailureCount;
|
|
|
|
@Field(id = 14, getter = "getTotalSuccessMigratedDocumentCount")
|
|
private final int mTotalSuccessMigratedDocumentCount;
|
|
|
|
/** Build a {@link SchemaMigrationStats} from the given parameters. */
|
|
@Constructor
|
|
public SchemaMigrationStats(
|
|
@Param(id = 1) @NonNull String packageName,
|
|
@Param(id = 2) @NonNull String database,
|
|
@Param(id = 3) int statusCode,
|
|
@Param(id = 4) int executorAcquisitionLatencyMillis,
|
|
@Param(id = 5) int totalLatencyMillis,
|
|
@Param(id = 6) int getSchemaLatencyMillis,
|
|
@Param(id = 7) int queryAndTransformLatencyMillis,
|
|
@Param(id = 8) int firstSetSchemaLatencyMillis,
|
|
@Param(id = 9) boolean isFirstSetSchemaSuccess,
|
|
@Param(id = 10) int secondSetSchemaLatencyMillis,
|
|
@Param(id = 11) int saveDocumentLatencyMillis,
|
|
@Param(id = 12) int totalNeedMigratedDocumentCount,
|
|
@Param(id = 13) int migrationFailureCount,
|
|
@Param(id = 14) int totalSuccessMigratedDocumentCount) {
|
|
mPackageName = packageName;
|
|
mDatabase = database;
|
|
mStatusCode = statusCode;
|
|
mExecutorAcquisitionLatencyMillis = executorAcquisitionLatencyMillis;
|
|
mTotalLatencyMillis = totalLatencyMillis;
|
|
mGetSchemaLatencyMillis = getSchemaLatencyMillis;
|
|
mQueryAndTransformLatencyMillis = queryAndTransformLatencyMillis;
|
|
mFirstSetSchemaLatencyMillis = firstSetSchemaLatencyMillis;
|
|
mIsFirstSetSchemaSuccess = isFirstSetSchemaSuccess;
|
|
mSecondSetSchemaLatencyMillis = secondSetSchemaLatencyMillis;
|
|
mSaveDocumentLatencyMillis = saveDocumentLatencyMillis;
|
|
mTotalNeedMigratedDocumentCount = totalNeedMigratedDocumentCount;
|
|
mMigrationFailureCount = migrationFailureCount;
|
|
mTotalSuccessMigratedDocumentCount = totalSuccessMigratedDocumentCount;
|
|
}
|
|
|
|
/** Returns calling package name. */
|
|
@NonNull
|
|
public String getPackageName() {
|
|
return mPackageName;
|
|
}
|
|
|
|
/** Returns calling database name. */
|
|
@NonNull
|
|
public String getDatabase() {
|
|
return mDatabase;
|
|
}
|
|
|
|
/** Returns status of the schema migration action. */
|
|
@AppSearchResult.ResultCode
|
|
public int getStatusCode() {
|
|
return mStatusCode;
|
|
}
|
|
|
|
/** Gets the latency for waiting the executor. */
|
|
public int getExecutorAcquisitionLatencyMillis() {
|
|
return mExecutorAcquisitionLatencyMillis;
|
|
}
|
|
|
|
/** Gets total latency for the schema migration action in milliseconds. */
|
|
public int getTotalLatencyMillis() {
|
|
return mTotalLatencyMillis;
|
|
}
|
|
|
|
/** Returns GetSchema latency in milliseconds. */
|
|
public int getGetSchemaLatencyMillis() {
|
|
return mGetSchemaLatencyMillis;
|
|
}
|
|
|
|
/**
|
|
* Returns latency of querying all documents that need to be migrated to new version and
|
|
* transforming documents to new version in milliseconds.
|
|
*/
|
|
public int getQueryAndTransformLatencyMillis() {
|
|
return mQueryAndTransformLatencyMillis;
|
|
}
|
|
|
|
/**
|
|
* Returns latency of first SetSchema action in milliseconds.
|
|
*
|
|
* <p>If all schema fields are backward compatible, the schema will be successful set to Icing.
|
|
* Otherwise, we will retrieve incompatible types here.
|
|
*
|
|
* <p>Please see {@link SetSchemaRequest} for what is "incompatible".
|
|
*/
|
|
public int getFirstSetSchemaLatencyMillis() {
|
|
return mFirstSetSchemaLatencyMillis;
|
|
}
|
|
|
|
/** Returns whether the first SetSchema action success. */
|
|
public boolean isFirstSetSchemaSuccess() {
|
|
return mIsFirstSetSchemaSuccess;
|
|
}
|
|
|
|
/**
|
|
* Returns latency of second SetSchema action in milliseconds.
|
|
*
|
|
* <p>If all schema fields are backward compatible, the schema will be successful set to Icing
|
|
* in the first setSchema action and this value will be 0. Otherwise, schema types will be set
|
|
* to Icing by this action.
|
|
*/
|
|
public int getSecondSetSchemaLatencyMillis() {
|
|
return mSecondSetSchemaLatencyMillis;
|
|
}
|
|
|
|
/** Returns latency of putting migrated document to Icing lib in milliseconds. */
|
|
public int getSaveDocumentLatencyMillis() {
|
|
return mSaveDocumentLatencyMillis;
|
|
}
|
|
|
|
/** Returns number of document that need to be migrated to another version. */
|
|
public int getTotalNeedMigratedDocumentCount() {
|
|
return mTotalNeedMigratedDocumentCount;
|
|
}
|
|
|
|
/** Returns number of {@link android.app.appsearch.SetSchemaResponse.MigrationFailure}. */
|
|
public int getMigrationFailureCount() {
|
|
return mMigrationFailureCount;
|
|
}
|
|
|
|
/** Returns number of successfully migrated and saved in Icing. */
|
|
public int getTotalSuccessMigratedDocumentCount() {
|
|
return mTotalSuccessMigratedDocumentCount;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
|
SchemaMigrationStatsCreator.writeToParcel(this, dest, flags);
|
|
}
|
|
|
|
/** Builder for {@link SchemaMigrationStats}. */
|
|
public static class Builder {
|
|
|
|
String mPackageName;
|
|
String mDatabase;
|
|
int mStatusCode;
|
|
int mExecutorAcquisitionLatencyMillis;
|
|
int mTotalLatencyMillis;
|
|
int mGetSchemaLatencyMillis;
|
|
int mQueryAndTransformLatencyMillis;
|
|
int mFirstSetSchemaLatencyMillis;
|
|
boolean mIsFirstSetSchemaSuccess;
|
|
int mSecondSetSchemaLatencyMillis;
|
|
int mSaveDocumentLatencyMillis;
|
|
int mTotalNeedMigratedDocumentCount;
|
|
int mMigrationFailureCount;
|
|
int mTotalSuccessMigratedDocumentCount;
|
|
|
|
/** Creates a {@link SchemaMigrationStats.Builder}. */
|
|
public Builder(@NonNull String packageName, @NonNull String database) {
|
|
mPackageName = Objects.requireNonNull(packageName);
|
|
mDatabase = Objects.requireNonNull(database);
|
|
}
|
|
|
|
/**
|
|
* Creates a {@link SchemaMigrationStats.Builder} from a given {@link SchemaMigrationStats}.
|
|
*
|
|
* <p>The returned builder is a deep copy whose data is separate from this
|
|
* SchemaMigrationStats.
|
|
*/
|
|
public Builder(@NonNull SchemaMigrationStats stats) {
|
|
Objects.requireNonNull(stats);
|
|
|
|
mPackageName = stats.mPackageName;
|
|
mDatabase = stats.mDatabase;
|
|
mStatusCode = stats.mStatusCode;
|
|
mExecutorAcquisitionLatencyMillis = stats.mExecutorAcquisitionLatencyMillis;
|
|
mTotalLatencyMillis = stats.mTotalLatencyMillis;
|
|
mGetSchemaLatencyMillis = stats.mGetSchemaLatencyMillis;
|
|
mQueryAndTransformLatencyMillis = stats.mQueryAndTransformLatencyMillis;
|
|
mFirstSetSchemaLatencyMillis = stats.mFirstSetSchemaLatencyMillis;
|
|
mIsFirstSetSchemaSuccess = stats.mIsFirstSetSchemaSuccess;
|
|
mSecondSetSchemaLatencyMillis = stats.mSecondSetSchemaLatencyMillis;
|
|
mSaveDocumentLatencyMillis = stats.mSaveDocumentLatencyMillis;
|
|
mTotalNeedMigratedDocumentCount = stats.mTotalNeedMigratedDocumentCount;
|
|
mMigrationFailureCount = stats.mMigrationFailureCount;
|
|
mTotalSuccessMigratedDocumentCount = stats.mTotalSuccessMigratedDocumentCount;
|
|
}
|
|
|
|
/** Sets status code for the schema migration action. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setStatusCode(@AppSearchResult.ResultCode int statusCode) {
|
|
mStatusCode = statusCode;
|
|
return this;
|
|
}
|
|
|
|
/** Sets the latency for waiting the executor. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setExecutorAcquisitionLatencyMillis(int executorAcquisitionLatencyMillis) {
|
|
mExecutorAcquisitionLatencyMillis = executorAcquisitionLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Sets total latency for the schema migration action in milliseconds. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setTotalLatencyMillis(int totalLatencyMillis) {
|
|
mTotalLatencyMillis = totalLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Sets latency for the GetSchema action in milliseconds. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setGetSchemaLatencyMillis(int getSchemaLatencyMillis) {
|
|
mGetSchemaLatencyMillis = getSchemaLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets latency for querying all documents that need to be migrated to new version and
|
|
* transforming documents to new version in milliseconds.
|
|
*/
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setQueryAndTransformLatencyMillis(int queryAndTransformLatencyMillis) {
|
|
mQueryAndTransformLatencyMillis = queryAndTransformLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Sets latency of first SetSchema action in milliseconds. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setFirstSetSchemaLatencyMillis(int firstSetSchemaLatencyMillis) {
|
|
mFirstSetSchemaLatencyMillis = firstSetSchemaLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Returns status of the first SetSchema action. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setIsFirstSetSchemaSuccess(boolean isFirstSetSchemaSuccess) {
|
|
mIsFirstSetSchemaSuccess = isFirstSetSchemaSuccess;
|
|
return this;
|
|
}
|
|
|
|
/** Sets latency of second SetSchema action in milliseconds. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setSecondSetSchemaLatencyMillis(int secondSetSchemaLatencyMillis) {
|
|
mSecondSetSchemaLatencyMillis = secondSetSchemaLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Sets latency for putting migrated document to Icing lib in milliseconds. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setSaveDocumentLatencyMillis(int saveDocumentLatencyMillis) {
|
|
mSaveDocumentLatencyMillis = saveDocumentLatencyMillis;
|
|
return this;
|
|
}
|
|
|
|
/** Sets number of document that need to be migrated to another version. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setTotalNeedMigratedDocumentCount(int migratedDocumentCount) {
|
|
mTotalNeedMigratedDocumentCount = migratedDocumentCount;
|
|
return this;
|
|
}
|
|
|
|
/** Sets total document count of successfully migrated and saved in Icing. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setTotalSuccessMigratedDocumentCount(int totalSuccessMigratedDocumentCount) {
|
|
mTotalSuccessMigratedDocumentCount = totalSuccessMigratedDocumentCount;
|
|
return this;
|
|
}
|
|
|
|
/** Sets number of {@link android.app.appsearch.SetSchemaResponse.MigrationFailure}. */
|
|
@CanIgnoreReturnValue
|
|
@NonNull
|
|
public Builder setMigrationFailureCount(int migrationFailureCount) {
|
|
mMigrationFailureCount = migrationFailureCount;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Builds a new {@link SchemaMigrationStats} from the {@link SchemaMigrationStats.Builder}.
|
|
*/
|
|
@NonNull
|
|
public SchemaMigrationStats build() {
|
|
return new SchemaMigrationStats(
|
|
mPackageName,
|
|
mDatabase,
|
|
mStatusCode,
|
|
mExecutorAcquisitionLatencyMillis,
|
|
mTotalLatencyMillis,
|
|
mGetSchemaLatencyMillis,
|
|
mQueryAndTransformLatencyMillis,
|
|
mFirstSetSchemaLatencyMillis,
|
|
mIsFirstSetSchemaSuccess,
|
|
mSecondSetSchemaLatencyMillis,
|
|
mSaveDocumentLatencyMillis,
|
|
mTotalNeedMigratedDocumentCount,
|
|
mMigrationFailureCount,
|
|
mTotalSuccessMigratedDocumentCount);
|
|
}
|
|
}
|
|
}
|