blob: e9bc4b93b4c401c4c25fa1a88e25adbd00f6efcc [file] [log] [blame]
/*
* Copyright (C) 2020 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.util;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UptimeMillisLong;
import android.os.SystemClock;
import com.android.internal.annotations.VisibleForTesting;
/**
* Writes an EventLog event capturing the performance of system config file writes.
* The event log entry is formatted like this:
* <code>525000 commit_sys_config_file (name|3),(time|2|3)</code>, where <code>name</code> is
* a short unique name representing the type of configuration file and <code>time</code> is
* duration in the {@link SystemClock#uptimeMillis()} time base.
*
* @hide
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public class SystemConfigFileCommitEventLogger {
private final String mName;
private long mStartTime;
/**
* @param name The short name of the config file that is included in the event log event,
* e.g. "jobs", "appops", "uri-grants" etc.
*/
public SystemConfigFileCommitEventLogger(@NonNull String name) {
mName = name;
}
/**
* Override the start timestamp. Use this method when it's desired to include the time
* taken by the preparation of the configuration data in the overall duration of the
* "commitSysConfigFile" event.
*
* @param startTime Overridden start time, in system uptime milliseconds
*/
public void setStartTime(@UptimeMillisLong long startTime) {
mStartTime = startTime;
}
/**
* Invoked just before the configuration file writing begins.
* @hide
*/
public void onStartWrite() {
if (mStartTime == 0) {
mStartTime = SystemClock.uptimeMillis();
}
}
/**
* Invoked just after the configuration file writing ends.
* @hide
*/
public void onFinishWrite() {
writeLogRecord(SystemClock.uptimeMillis() - mStartTime);
}
/**
* The actual write of the log record.
* @hide
*/
@VisibleForTesting
public void writeLogRecord(long durationMs) {
com.android.internal.logging.EventLogTags.writeCommitSysConfigFile(mName, durationMs);
}
}