Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90163f8c authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Address API council feedback.

Bug: b/311274330
Bug: b/311129813
Test: atest PerformanceManagerTest
Test: atest WorkDurationTest
Test: atest WorkDurationUnitTest
Change-Id: I4a37b9acadccfd748818632e06bdf0fdec42618e
parent ea001d26
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -33907,7 +33907,6 @@ package android.os {
  @FlaggedApi("android.os.adpf_gpu_report_actual_work_duration") public final class WorkDuration implements android.os.Parcelable {
    ctor public WorkDuration();
    ctor public WorkDuration(long, long, long, long);
    method public int describeContents();
    method public long getActualCpuDurationNanos();
    method public long getActualGpuDurationNanos();
+1 −1
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ public final class PerformanceHintManager {
        }

        /**
         * Updates this session's target duration for each cycle of work.
         * Updates this session's target total duration for each cycle of work.
         *
         * @param targetDurationNanos the new desired duration in nanoseconds
         */
+11 −19
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import java.util.Objects;
 * in each component, see
 * {@link PerformanceHintManager.Session#reportActualWorkDuration(WorkDuration)}.
 *
 * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
 * 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 implements Parcelable {
@@ -50,17 +50,9 @@ public final class WorkDuration implements Parcelable {

    public WorkDuration() {}

    public WorkDuration(long workPeriodStartTimestampNanos,
                      long actualTotalDurationNanos,
                      long actualCpuDurationNanos,
                      long actualGpuDurationNanos) {
        mWorkPeriodStartTimestampNanos = workPeriodStartTimestampNanos;
        mActualTotalDurationNanos = actualTotalDurationNanos;
        mActualCpuDurationNanos = actualCpuDurationNanos;
        mActualGpuDurationNanos = actualGpuDurationNanos;
    }

    /**
     * Constructor for testing.
     *
     * @hide
     */
    public WorkDuration(long workPeriodStartTimestampNanos,
@@ -86,7 +78,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Sets the work period start timestamp in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public void setWorkPeriodStartTimestampNanos(long workPeriodStartTimestampNanos) {
        if (workPeriodStartTimestampNanos <= 0) {
@@ -99,7 +91,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Sets the actual total duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public void setActualTotalDurationNanos(long actualTotalDurationNanos) {
        if (actualTotalDurationNanos <= 0) {
@@ -111,7 +103,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Sets the actual CPU duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public void setActualCpuDurationNanos(long actualCpuDurationNanos) {
        if (actualCpuDurationNanos <= 0) {
@@ -123,7 +115,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Sets the actual GPU duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public void setActualGpuDurationNanos(long actualGpuDurationNanos) {
        if (actualGpuDurationNanos < 0) {
@@ -135,7 +127,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Returns the work period start timestamp based in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public long getWorkPeriodStartTimestampNanos() {
        return mWorkPeriodStartTimestampNanos;
@@ -144,7 +136,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Returns the actual total duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public long getActualTotalDurationNanos() {
        return mActualTotalDurationNanos;
@@ -153,7 +145,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Returns the actual CPU duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public long getActualCpuDurationNanos() {
        return mActualCpuDurationNanos;
@@ -162,7 +154,7 @@ public final class WorkDuration implements Parcelable {
    /**
     * Returns the actual GPU duration in nanoseconds.
     *
     * All timings should be in {@link SystemClock#elapsedRealtimeNanos()}.
     * All timings should be in {@link SystemClock#uptimeNanos()}.
     */
    public long getActualGpuDurationNanos() {
        return mActualGpuDurationNanos;
+31 −10
Original line number Diff line number Diff line
@@ -195,9 +195,30 @@ public class PerformanceHintManagerTest {
        Session s = createSession();
        assumeNotNull(s);
        s.updateTargetWorkDuration(16);
        s.reportActualWorkDuration(new WorkDuration(1, 12, 8, 6));
        s.reportActualWorkDuration(new WorkDuration(1, 33, 14, 20));
        s.reportActualWorkDuration(new WorkDuration(1, 14, 10, 6));
        {
            WorkDuration workDuration = new WorkDuration();
            workDuration.setWorkPeriodStartTimestampNanos(1);
            workDuration.setActualTotalDurationNanos(12);
            workDuration.setActualCpuDurationNanos(8);
            workDuration.setActualGpuDurationNanos(6);
            s.reportActualWorkDuration(workDuration);
        }
        {
            WorkDuration workDuration = new WorkDuration();
            workDuration.setWorkPeriodStartTimestampNanos(1);
            workDuration.setActualTotalDurationNanos(33);
            workDuration.setActualCpuDurationNanos(14);
            workDuration.setActualGpuDurationNanos(20);
            s.reportActualWorkDuration(workDuration);
        }
        {
            WorkDuration workDuration = new WorkDuration();
            workDuration.setWorkPeriodStartTimestampNanos(1);
            workDuration.setActualTotalDurationNanos(14);
            workDuration.setActualCpuDurationNanos(10);
            workDuration.setActualGpuDurationNanos(6);
            s.reportActualWorkDuration(workDuration);
        }
    }

    @Test
@@ -206,25 +227,25 @@ public class PerformanceHintManagerTest {
        assumeNotNull(s);
        s.updateTargetWorkDuration(16);
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(-1, 12, 8, 6));
            s.reportActualWorkDuration(new WorkDuration(-1, 12, 8, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(0, 12, 8, 6));
            s.reportActualWorkDuration(new WorkDuration(0, 12, 8, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(1, -1, 8, 6));
            s.reportActualWorkDuration(new WorkDuration(1, -1, 8, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(1, 0, 8, 6));
            s.reportActualWorkDuration(new WorkDuration(1, 0, 8, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(1, 12, -1, 6));
            s.reportActualWorkDuration(new WorkDuration(1, 12, -1, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(1, 12, 0, 6));
            s.reportActualWorkDuration(new WorkDuration(1, 12, 0, 6, 1));
        });
        assertThrows(IllegalArgumentException.class, () -> {
            s.reportActualWorkDuration(new WorkDuration(1, 12, 8, -1));
            s.reportActualWorkDuration(new WorkDuration(1, 12, 8, -1, 1));
        });
    }
}
+77 −0
Original line number Diff line number Diff line
/*
 * 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 static org.junit.Assert.assertThrows;

import android.platform.test.annotations.IgnoreUnderRavenwood;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.ravenwood.RavenwoodRule;

import androidx.test.runner.AndroidJUnit4;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;

@RunWith(AndroidJUnit4.class)
@IgnoreUnderRavenwood(blockedBy = WorkDuration.class)
public class WorkDurationUnitTest {
    @Rule
    public final RavenwoodRule mRavenwood = new RavenwoodRule();

    // Required for RequiresFlagsEnabled and RequiresFlagsDisabled annotations to take effect.
    @Rule
    public final CheckFlagsRule mCheckFlagsRule = RavenwoodRule.isUnderRavenwood() ? null
            : DeviceFlagsValueProvider.createCheckFlagsRule();

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ADPF_GPU_REPORT_ACTUAL_WORK_DURATION)
    public void testWorkDurationSetters_IllegalArgument() {
        WorkDuration workDuration = new WorkDuration();
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setWorkPeriodStartTimestampNanos(-1);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setWorkPeriodStartTimestampNanos(0);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setActualTotalDurationNanos(-1);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setActualTotalDurationNanos(0);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setActualCpuDurationNanos(-1);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setActualCpuDurationNanos(0);
        });
        assertThrows(IllegalArgumentException.class, () -> {
            workDuration.setActualGpuDurationNanos(-1);
        });
    }
}