blob: 6e1e2d5f774b96418c8158c6b1c6b78aaa323133 [file] [log] [blame]
/*
* 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.stats;
import android.annotation.NonNull;
import android.app.appsearch.SetSchemaRequest;
import java.util.Objects;
/**
* Class holds detailed stats for Schema migration.
*
* @hide
*/
// TODO(b/173532925): Hides getter and setter functions for accessing {@code
// mFirstSetSchemaLatencyMillis} and {@code mSecondSetSchemaLatencyMillis} field.
public final class SchemaMigrationStats {
/** GetSchema latency in milliseconds. */
private final int mGetSchemaLatencyMillis;
/**
* Latency of querying all documents that need to be migrated to new version and transforming
* documents to new version in milliseconds.
*/
private final int mQueryAndTransformLatencyMillis;
private final int mFirstSetSchemaLatencyMillis;
private final int mSecondSetSchemaLatencyMillis;
/** Latency of putting migrated document to Icing lib in milliseconds. */
private final int mSaveDocumentLatencyMillis;
private final int mMigratedDocumentCount;
private final int mSavedDocumentCount;
SchemaMigrationStats(@NonNull Builder builder) {
Objects.requireNonNull(builder);
mGetSchemaLatencyMillis = builder.mGetSchemaLatencyMillis;
mQueryAndTransformLatencyMillis = builder.mQueryAndTransformLatencyMillis;
mFirstSetSchemaLatencyMillis = builder.mFirstSetSchemaLatencyMillis;
mSecondSetSchemaLatencyMillis = builder.mSecondSetSchemaLatencyMillis;
mSaveDocumentLatencyMillis = builder.mSaveDocumentLatencyMillis;
mMigratedDocumentCount = builder.mMigratedDocumentCount;
mSavedDocumentCount = builder.mSavedDocumentCount;
}
/** 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 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 migrated documents. */
public int getMigratedDocumentCount() {
return mMigratedDocumentCount;
}
/** Returns number of updated documents which are saved in Icing lib. */
public int getSavedDocumentCount() {
return mSavedDocumentCount;
}
/** Builder for {@link SchemaMigrationStats}. */
public static class Builder {
int mGetSchemaLatencyMillis;
int mQueryAndTransformLatencyMillis;
int mFirstSetSchemaLatencyMillis;
int mSecondSetSchemaLatencyMillis;
int mSaveDocumentLatencyMillis;
int mMigratedDocumentCount;
int mSavedDocumentCount;
/** Sets latency for the GetSchema action in milliseconds. */
@NonNull
public SchemaMigrationStats.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.
*/
@NonNull
public SchemaMigrationStats.Builder setQueryAndTransformLatencyMillis(
int queryAndTransformLatencyMillis) {
mQueryAndTransformLatencyMillis = queryAndTransformLatencyMillis;
return this;
}
/** Sets latency of first SetSchema action in milliseconds. */
@NonNull
public SchemaMigrationStats.Builder setFirstSetSchemaLatencyMillis(
int firstSetSchemaLatencyMillis) {
mFirstSetSchemaLatencyMillis = firstSetSchemaLatencyMillis;
return this;
}
/** Sets latency of second SetSchema action in milliseconds. */
@NonNull
public SchemaMigrationStats.Builder setSecondSetSchemaLatencyMillis(
int secondSetSchemaLatencyMillis) {
mSecondSetSchemaLatencyMillis = secondSetSchemaLatencyMillis;
return this;
}
/** Sets latency for putting migrated document to Icing lib in milliseconds. */
@NonNull
public SchemaMigrationStats.Builder setSaveDocumentLatencyMillis(
int saveDocumentLatencyMillis) {
mSaveDocumentLatencyMillis = saveDocumentLatencyMillis;
return this;
}
/** Sets number of migrated documents. */
@NonNull
public SchemaMigrationStats.Builder setMigratedDocumentCount(int migratedDocumentCount) {
mMigratedDocumentCount = migratedDocumentCount;
return this;
}
/** Sets number of updated documents which are saved in Icing lib. */
@NonNull
public SchemaMigrationStats.Builder setSavedDocumentCount(int savedDocumentCount) {
mSavedDocumentCount = savedDocumentCount;
return this;
}
/**
* Builds a new {@link SchemaMigrationStats} from the {@link SchemaMigrationStats.Builder}.
*/
@NonNull
public SchemaMigrationStats build() {
return new SchemaMigrationStats(/* builder= */ this);
}
}
}