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

Commit caac147d authored by Matt Buckley's avatar Matt Buckley
Browse files

Add AIDL API for PowerHAL to send session updates with FMQ

This patch adds a set of APIs to PowerHAL to enable hint session
communication via FMQ, to reduce both binder overhead and call latency
moving forward.

Bug: 315894228
Test: atest VtsHalPowerTargetTest
Change-Id: I56f89322c7706ab68e640542caf5b70eef36c451
parent d7ddd974
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -28,11 +28,20 @@ aidl_interface {
        "android/hardware/power/*.aidl",
    ],
    stability: "vintf",
    imports: [
        "android.hardware.common.fmq-V1",
        "android.hardware.common-V2",
    ],
    backend: {
        cpp: {
            enabled: false,
        },
        ndk: {
            enabled: true,
        },
        java: {
            sdk_version: "module_current",
            enabled: true,
            platform_apis: true,
        },
    },
+41 −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.
 */
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
///////////////////////////////////////////////////////////////////////////////

// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
//     the interface (from the latest frozen version), the build system will
//     prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.

package android.hardware.power;
@VintfStability
parcelable ChannelConfig {
  android.hardware.common.fmq.MQDescriptor<android.hardware.power.ChannelMessage,android.hardware.common.fmq.SynchronizedReadWrite> channelDescriptor;
  @nullable android.hardware.common.fmq.MQDescriptor<byte,android.hardware.common.fmq.SynchronizedReadWrite> eventFlagDescriptor;
  int readFlagBitmask;
  int writeFlagBitmask;
}
+52 −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.
 */
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
///////////////////////////////////////////////////////////////////////////////

// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
//     the interface (from the latest frozen version), the build system will
//     prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.

package android.hardware.power;
@FixedSize @VintfStability
parcelable ChannelMessage {
  int sessionID;
  android.hardware.power.ChannelMessage.ChannelMessageContents data;
  @FixedSize @VintfStability
  union ChannelMessageContents {
    int[20] tids = {(-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */, (-1) /* -1 */};
    long targetDuration;
    android.hardware.power.SessionHint hint;
    android.hardware.power.ChannelMessage.ChannelMessageContents.SessionModeSetter mode;
    android.hardware.power.WorkDurationFixedV1 workDuration;
    @FixedSize @VintfStability
    parcelable SessionModeSetter {
      android.hardware.power.SessionMode modeInt;
      boolean enabled;
    }
  }
}
+3 −0
Original line number Diff line number Diff line
@@ -40,4 +40,7 @@ interface IPower {
  boolean isBoostSupported(in android.hardware.power.Boost type);
  android.hardware.power.IPowerHintSession createHintSession(in int tgid, in int uid, in int[] threadIds, in long durationNanos);
  long getHintSessionPreferredRate();
  android.hardware.power.IPowerHintSession createHintSessionWithConfig(in int tgid, in int uid, in int[] threadIds, in long durationNanos, in android.hardware.power.SessionTag tag, out android.hardware.power.SessionConfig config);
  android.hardware.power.ChannelConfig getSessionChannel(in int tgid, in int uid);
  oneway void closeSessionChannel(in int tgid, in int uid);
}
+1 −0
Original line number Diff line number Diff line
@@ -42,4 +42,5 @@ interface IPowerHintSession {
  oneway void sendHint(android.hardware.power.SessionHint hint);
  void setThreads(in int[] threadIds);
  oneway void setMode(android.hardware.power.SessionMode type, boolean enabled);
  android.hardware.power.SessionConfig getSessionConfig();
}
Loading