script-astra/Android/Sdk/sources/android-35/android/os/WorkDuration.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

163 lines
5.4 KiB
Java

/*
* Copyright (C) 2023 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.os;
import android.annotation.FlaggedApi;
import java.util.Objects;
/**
* WorkDuration contains the measured time in nano seconds of the workload
* in each component, see
* {@link PerformanceHintManager.Session#reportActualWorkDuration(WorkDuration)}.
*
* All timings should be in {@link SystemClock#uptimeNanos()} and measured in wall time.
*/
@FlaggedApi(Flags.FLAG_ADPF_GPU_REPORT_ACTUAL_WORK_DURATION)
public final class WorkDuration {
long mActualTotalDurationNanos = 0;
long mWorkPeriodStartTimestampNanos = 0;
long mActualCpuDurationNanos = 0;
long mActualGpuDurationNanos = 0;
public WorkDuration() {}
/**
* Constructor for testing.
*
* @hide
*/
public WorkDuration(long workPeriodStartTimestampNanos,
long actualTotalDurationNanos,
long actualCpuDurationNanos,
long actualGpuDurationNanos) {
mActualTotalDurationNanos = actualTotalDurationNanos;
mWorkPeriodStartTimestampNanos = workPeriodStartTimestampNanos;
mActualCpuDurationNanos = actualCpuDurationNanos;
mActualGpuDurationNanos = actualGpuDurationNanos;
}
/**
* Sets the actual total duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public void setActualTotalDurationNanos(long actualTotalDurationNanos) {
if (actualTotalDurationNanos <= 0) {
throw new IllegalArgumentException(
"the actual total duration should be greater than zero.");
}
mActualTotalDurationNanos = actualTotalDurationNanos;
}
/**
* Sets the work period start timestamp in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public void setWorkPeriodStartTimestampNanos(long workPeriodStartTimestampNanos) {
if (workPeriodStartTimestampNanos <= 0) {
throw new IllegalArgumentException(
"the work period start timestamp should be greater than zero.");
}
mWorkPeriodStartTimestampNanos = workPeriodStartTimestampNanos;
}
/**
* Sets the actual CPU duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public void setActualCpuDurationNanos(long actualCpuDurationNanos) {
if (actualCpuDurationNanos < 0) {
throw new IllegalArgumentException(
"the actual CPU duration should be greater than or equal to zero.");
}
mActualCpuDurationNanos = actualCpuDurationNanos;
}
/**
* Sets the actual GPU duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public void setActualGpuDurationNanos(long actualGpuDurationNanos) {
if (actualGpuDurationNanos < 0) {
throw new IllegalArgumentException(
"the actual GPU duration should be greater than or equal to zero.");
}
mActualGpuDurationNanos = actualGpuDurationNanos;
}
/**
* Returns the actual total duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public long getActualTotalDurationNanos() {
return mActualTotalDurationNanos;
}
/**
* Returns the work period start timestamp based in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public long getWorkPeriodStartTimestampNanos() {
return mWorkPeriodStartTimestampNanos;
}
/**
* Returns the actual CPU duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public long getActualCpuDurationNanos() {
return mActualCpuDurationNanos;
}
/**
* Returns the actual GPU duration in nanoseconds.
*
* All timings should be in {@link SystemClock#uptimeNanos()}.
*/
public long getActualGpuDurationNanos() {
return mActualGpuDurationNanos;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof WorkDuration)) {
return false;
}
WorkDuration workDuration = (WorkDuration) obj;
return workDuration.mActualTotalDurationNanos == this.mActualTotalDurationNanos
&& workDuration.mWorkPeriodStartTimestampNanos == this.mWorkPeriodStartTimestampNanos
&& workDuration.mActualCpuDurationNanos == this.mActualCpuDurationNanos
&& workDuration.mActualGpuDurationNanos == this.mActualGpuDurationNanos;
}
@Override
public int hashCode() {
return Objects.hash(mWorkPeriodStartTimestampNanos, mActualTotalDurationNanos,
mActualCpuDurationNanos, mActualGpuDurationNanos);
}
}