power: Add support for ADPF implementation.

ADPF provided the API for power/performance tuning. Add API support in power HAL.

Change-Id: Ie00f97650b209a890da222e5911371a270efb131
This commit is contained in:
zehugong
2022-12-05 13:14:29 +08:00
parent 5637f2e74f
commit 7bcadd18d4
5 changed files with 96 additions and 7 deletions

View File

@@ -12,13 +12,16 @@ LOCAL_SHARED_LIBRARIES := liblog libcutils libdl libxml2 libbase libutils libbin
ifeq ($(call math_gt_or_eq, 33, $(PLATFORM_SDK_VERSION)), true) ifeq ($(call math_gt_or_eq, 33, $(PLATFORM_SDK_VERSION)), true)
LOCAL_SHARED_LIBRARIES += android.hardware.power-V3-ndk LOCAL_SHARED_LIBRARIES += android.hardware.power-V3-ndk
endif
ifeq ($(call math_gt_or_eq, 34, $(PLATFORM_SDK_VERSION)), true)
LOCAL_SHARED_LIBRARIES += android.hardware.power-V4-ndk
else else
LOCAL_SHARED_LIBRARIES += android.hardware.power-V1-ndk_platform LOCAL_SHARED_LIBRARIES += android.hardware.power-V1-ndk_platform
endif endif
LOCAL_HEADER_LIBRARIES += libutils_headers LOCAL_HEADER_LIBRARIES += libutils_headers
LOCAL_HEADER_LIBRARIES += libhardware_headers LOCAL_HEADER_LIBRARIES += libhardware_headers
LOCAL_SRC_FILES := power-common.c metadata-parser.c utils.c list.c hint-data.c powerhintparser.c Power.cpp main.cpp LOCAL_SRC_FILES := power-common.c metadata-parser.c utils.c list.c hint-data.c powerhintparser.c Power.cpp main.cpp PowerHintSession.cpp
LOCAL_C_INCLUDES := external/libxml2/include \ LOCAL_C_INCLUDES := external/libxml2/include \
external/icu/icu4c/source/common external/icu/icu4c/source/common

View File

@@ -25,11 +25,16 @@
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/ */
#define LOG_TAG "QTI PowerHAL" #define LOG_TAG "QTI PowerHAL"
#include "Power.h" #include "Power.h"
#include "PowerHintSession.h"
#include <android-base/logging.h> #include <android-base/logging.h>
@@ -125,15 +130,22 @@ ndk::ScopedAStatus Power::isBoostSupported(Boost type, bool* _aidl_return) {
*_aidl_return = false; *_aidl_return = false;
return ndk::ScopedAStatus::ok(); return ndk::ScopedAStatus::ok();
} }
ndk::ScopedAStatus Power::createHintSession(int32_t, int32_t, const std::vector<int32_t>&, int64_t, ndk::ScopedAStatus Power::createHintSession(int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds, int64_t durationNanos,
std::shared_ptr<IPowerHintSession>* _aidl_return) { std::shared_ptr<IPowerHintSession>* _aidl_return) {
LOG(INFO) << "Power createHintSession";
if (threadIds.size() == 0) {
LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size();
*_aidl_return = nullptr; *_aidl_return = nullptr;
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
*_aidl_return = setPowerHintSession();
return ndk::ScopedAStatus::ok();
} }
ndk::ScopedAStatus Power::getHintSessionPreferredRate(int64_t* outNanoseconds) { ndk::ScopedAStatus Power::getHintSessionPreferredRate(int64_t* outNanoseconds) {
*outNanoseconds = -1; LOG(INFO) << "Power getHintSessionPreferredRate";
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); *outNanoseconds = getSessionPreferredRate();
return ndk::ScopedAStatus::ok();
} }
} // namespace impl } // namespace impl

43
PowerHintSession.cpp Normal file
View File

@@ -0,0 +1,43 @@
/*
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#include "PowerHintSession.h"
#include <android-base/logging.h>
#define LOG_TAG "QTI PowerHAL"
std::shared_ptr<aidl::android::hardware::power::IPowerHintSession> setPowerHintSession(){
std::shared_ptr<aidl::android::hardware::power::IPowerHintSession> mPowerSession = ndk::SharedRefBase::make<PowerHintSessionImpl>();
return mPowerSession;
}
int64_t getSessionPreferredRate(){
return 16666666L;
}
ndk::ScopedAStatus PowerHintSessionImpl::updateTargetWorkDuration(int64_t in_targetDurationNanos){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::reportActualWorkDuration(const std::vector<::aidl::android::hardware::power::WorkDuration>& in_durations){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::pause(){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::resume(){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::close(){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::sendHint(aidl::android::hardware::power::SessionHint hint){
return ndk::ScopedAStatus::ok();
}
ndk::ScopedAStatus PowerHintSessionImpl::setThreads(const std::vector<int32_t>& threadIds){
if (threadIds.size() == 0) {
LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size();
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
return ndk::ScopedAStatus::ok();
}

27
PowerHintSession.h Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef __POWERHINTSESSION__
#define __POWERHINTSESSION__
#include <aidl/android/hardware/power/WorkDuration.h>
#include <aidl/android/hardware/power/SessionHint.h>
#include <aidl/android/hardware/power/BnPowerHintSession.h>
std::shared_ptr<aidl::android::hardware::power::IPowerHintSession> setPowerHintSession();
int64_t getSessionPreferredRate();
class PowerHintSessionImpl : public aidl::android::hardware::power::BnPowerHintSession{
public:
ndk::ScopedAStatus updateTargetWorkDuration(int64_t targetDurationNanos) override;
ndk::ScopedAStatus reportActualWorkDuration(
const std::vector<aidl::android::hardware::power::WorkDuration>& durations) override;
ndk::ScopedAStatus pause() override;
ndk::ScopedAStatus resume() override;
ndk::ScopedAStatus close() override;
ndk::ScopedAStatus sendHint(aidl::android::hardware::power::SessionHint hint) override;
ndk::ScopedAStatus setThreads(const std::vector<int32_t>& threadIds) override;
};
#endif /* __POWERHINTSESSION__ */

View File

@@ -24,11 +24,15 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause-Clear
--> -->
<manifest version="1.0" type="device"> <manifest version="1.0" type="device">
<hal format="aidl"> <hal format="aidl">
<name>android.hardware.power</name> <name>android.hardware.power</name>
<version>3</version> <version>4</version>
<fqname>IPower/default</fqname> <fqname>IPower/default</fqname>
</hal> </hal>
</manifest> </manifest>