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

Commit 5931ddad authored by Peiyong Lin's avatar Peiyong Lin Committed by Android (Google) Code Review
Browse files

Merge "Address API council feedback." into main

parents 2aab446b 90163f8c
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -33914,7 +33914,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
@@ -204,7 +204,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);
        });
    }
}