86 lines
2.7 KiB
Java
86 lines
2.7 KiB
Java
/*
|
|
* 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);
|
|
}
|
|
}
|