diff options
author | Midas Chien <midaschieh@google.com> | 2020-07-01 14:57:52 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-07-01 14:57:52 +0000 |
commit | c1bdd1e20dab2bcf81f743a7a2e952e939238960 (patch) | |
tree | a97e06e75c1776ef40b79dfe08bc34b83472529e | |
parent | 2104fe9e23d2a6a48f43b032ad38f9a380c6f106 (diff) | |
parent | 6bd8a847b8e59aafdf09feda6f52afe55ee8dde2 (diff) | |
download | pixel-android11-mainline-os-statsd-release.tar.gz |
display: cache display lpm state to avoid set it again am: 6bd8a847b8android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android11-mainline-tethering-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/pixel/+/11881998
Change-Id: I2b1996363f6b41ab55b6d7b1e50b353316f906b7
-rw-r--r-- | power-libperfmgr/Android.bp | 2 | ||||
-rw-r--r-- | power-libperfmgr/aidl/Power.cpp | 10 | ||||
-rw-r--r-- | power-libperfmgr/aidl/Power.h | 4 | ||||
-rw-r--r-- | power-libperfmgr/aidl/PowerExt.h | 6 | ||||
-rw-r--r-- | power-libperfmgr/aidl/service.cpp | 8 | ||||
-rw-r--r-- | power-libperfmgr/disp-power/DisplayLowPower.cpp | 73 | ||||
-rw-r--r-- | power-libperfmgr/disp-power/DisplayLowPower.h (renamed from power-libperfmgr/disp-power/display-helper.h) | 29 | ||||
-rw-r--r-- | power-libperfmgr/disp-power/InteractionHandler.cpp | 2 | ||||
-rw-r--r-- | power-libperfmgr/disp-power/display-helper.cpp | 74 | ||||
-rw-r--r-- | power-libperfmgr/hidl/Power.cpp | 13 | ||||
-rw-r--r-- | power-libperfmgr/hidl/Power.h | 2 |
11 files changed, 119 insertions, 104 deletions
diff --git a/power-libperfmgr/Android.bp b/power-libperfmgr/Android.bp index f829a729..c4d0f870 100644 --- a/power-libperfmgr/Android.bp +++ b/power-libperfmgr/Android.bp @@ -17,7 +17,7 @@ cc_library { name: "libdisppower-pixel", proprietary: true, srcs: [ - "disp-power/display-helper.cpp", + "disp-power/DisplayLowPower.cpp", "disp-power/InteractionHandler.cpp", ], shared_libs: [ diff --git a/power-libperfmgr/aidl/Power.cpp b/power-libperfmgr/aidl/Power.cpp index eba695dd..d944cf40 100644 --- a/power-libperfmgr/aidl/Power.cpp +++ b/power-libperfmgr/aidl/Power.cpp @@ -30,7 +30,7 @@ #include <utils/Log.h> #include <utils/Trace.h> -#include "disp-power/display-helper.h" +#include "disp-power/DisplayLowPower.h" namespace aidl { namespace google { @@ -43,8 +43,9 @@ constexpr char kPowerHalStateProp[] = "vendor.powerhal.state"; constexpr char kPowerHalAudioProp[] = "vendor.powerhal.audio"; constexpr char kPowerHalRenderingProp[] = "vendor.powerhal.rendering"; -Power::Power(std::shared_ptr<HintManager> hm) +Power::Power(std::shared_ptr<HintManager> hm, std::shared_ptr<DisplayLowPower> dlpw) : mHintManager(hm), + mDisplayLowPower(dlpw), mInteractionHandler(nullptr), mVRModeOn(false), mSustainedPerfModeOn(false) { @@ -90,13 +91,10 @@ ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { ATRACE_INT(toString(type).c_str(), enabled); switch (type) { case Mode::LOW_POWER: + mDisplayLowPower->SetDisplayLowPower(enabled); if (enabled) { - // Device in battery saver mode, enable display low power mode - set_display_lpm(true); mHintManager->DoHint(toString(type)); } else { - // Device exiting battery saver mode, disable display low power mode - set_display_lpm(false); mHintManager->EndHint(toString(type)); } break; diff --git a/power-libperfmgr/aidl/Power.h b/power-libperfmgr/aidl/Power.h index 05b8780f..8b90cb48 100644 --- a/power-libperfmgr/aidl/Power.h +++ b/power-libperfmgr/aidl/Power.h @@ -23,6 +23,7 @@ #include <aidl/android/hardware/power/BnPower.h> #include <perfmgr/HintManager.h> +#include "disp-power/DisplayLowPower.h" #include "disp-power/InteractionHandler.h" namespace aidl { @@ -39,7 +40,7 @@ using ::android::perfmgr::HintManager; class Power : public ::aidl::android::hardware::power::BnPower { public: - Power(std::shared_ptr<HintManager> hm); + Power(std::shared_ptr<HintManager> hm, std::shared_ptr<DisplayLowPower> dlpw); ndk::ScopedAStatus setMode(Mode type, bool enabled) override; ndk::ScopedAStatus isModeSupported(Mode type, bool *_aidl_return) override; ndk::ScopedAStatus setBoost(Boost type, int32_t durationMs) override; @@ -48,6 +49,7 @@ class Power : public ::aidl::android::hardware::power::BnPower { private: std::shared_ptr<HintManager> mHintManager; + std::shared_ptr<DisplayLowPower> mDisplayLowPower; std::unique_ptr<InteractionHandler> mInteractionHandler; std::atomic<bool> mVRModeOn; std::atomic<bool> mSustainedPerfModeOn; diff --git a/power-libperfmgr/aidl/PowerExt.h b/power-libperfmgr/aidl/PowerExt.h index 885c6a09..65cec2c1 100644 --- a/power-libperfmgr/aidl/PowerExt.h +++ b/power-libperfmgr/aidl/PowerExt.h @@ -23,6 +23,8 @@ #include <aidl/google/hardware/power/extension/pixel/BnPowerExt.h> #include <perfmgr/HintManager.h> +#include "disp-power/DisplayLowPower.h" + namespace aidl { namespace google { namespace hardware { @@ -34,7 +36,8 @@ using ::android::perfmgr::HintManager; class PowerExt : public ::aidl::google::hardware::power::extension::pixel::BnPowerExt { public: - PowerExt(std::shared_ptr<HintManager> hm) : mHintManager(hm) {} + PowerExt(std::shared_ptr<HintManager> hm, std::shared_ptr<DisplayLowPower> dlpw) + : mHintManager(hm), mDisplayLowPower(dlpw) {} ndk::ScopedAStatus setMode(const std::string &mode, bool enabled) override; ndk::ScopedAStatus isModeSupported(const std::string &mode, bool *_aidl_return) override; ndk::ScopedAStatus setBoost(const std::string &boost, int32_t durationMs) override; @@ -42,6 +45,7 @@ class PowerExt : public ::aidl::google::hardware::power::extension::pixel::BnPow private: std::shared_ptr<HintManager> mHintManager; + std::shared_ptr<DisplayLowPower> mDisplayLowPower; }; } // namespace pixel diff --git a/power-libperfmgr/aidl/service.cpp b/power-libperfmgr/aidl/service.cpp index 4db1c30c..aeb63564 100644 --- a/power-libperfmgr/aidl/service.cpp +++ b/power-libperfmgr/aidl/service.cpp @@ -25,6 +25,7 @@ #include "Power.h" #include "PowerExt.h" +#include "disp-power/DisplayLowPower.h" using aidl::google::hardware::power::impl::pixel::Power; using aidl::google::hardware::power::impl::pixel::PowerExt; @@ -42,15 +43,17 @@ int main() { LOG(FATAL) << "Invalid config: " << kPowerHalConfigPath; } + std::shared_ptr<DisplayLowPower> dlpw = std::make_shared<DisplayLowPower>(); + // single thread ABinderProcess_setThreadPoolMaxThreadCount(0); // core service - std::shared_ptr<Power> pw = ndk::SharedRefBase::make<Power>(hm); + std::shared_ptr<Power> pw = ndk::SharedRefBase::make<Power>(hm, dlpw); ndk::SpAIBinder pwBinder = pw->asBinder(); // extension service - std::shared_ptr<PowerExt> pwExt = ndk::SharedRefBase::make<PowerExt>(hm); + std::shared_ptr<PowerExt> pwExt = ndk::SharedRefBase::make<PowerExt>(hm, dlpw); // attach the extension to the same binder we will be registering CHECK(STATUS_OK == AIBinder_setExtension(pwBinder.get(), pwExt->asBinder().get())); @@ -63,6 +66,7 @@ int main() { std::thread initThread([&]() { ::android::base::WaitForProperty(kPowerHalInitProp, "1"); hm->Start(); + dlpw->Init(); }); initThread.detach(); diff --git a/power-libperfmgr/disp-power/DisplayLowPower.cpp b/power-libperfmgr/disp-power/DisplayLowPower.cpp new file mode 100644 index 00000000..d38972a5 --- /dev/null +++ b/power-libperfmgr/disp-power/DisplayLowPower.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2020 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. + */ + +#define LOG_TAG "android.hardware.power@-service.pixel-libperfmgr" + +#include <errno.h> +#include <unistd.h> + +#include <cutils/sockets.h> +#include <log/log.h> + +#include "DisplayLowPower.h" + +DisplayLowPower::DisplayLowPower() : mFossStatus(false) {} + +void DisplayLowPower::Init() { + ConnectPpsDaemon(); +} + +void DisplayLowPower::SetDisplayLowPower(bool enable) { + SetFoss(enable); +} + +void DisplayLowPower::ConnectPpsDaemon() { + constexpr const char kPpsDaemon[] = "pps"; + + mPpsSocket.reset( + socket_local_client(kPpsDaemon, ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM)); + if (mPpsSocket.get() < 0) { + ALOGW("Connecting to PPS daemon failed (%s)", strerror(errno)); + } +} + +int DisplayLowPower::SendPpsCommand(const std::string_view cmd) { + if (TEMP_FAILURE_RETRY(write(mPpsSocket.get(), cmd.data(), cmd.size())) < 0) { + ALOGE("Failed to send pps command '%s' over socket (%s)", cmd.data(), strerror(errno)); + return -1; + } + + return 0; +} + +void DisplayLowPower::SetFoss(bool enable) { + if (mPpsSocket.get() < 0 || mFossStatus == enable) { + return; + } + + ALOGI("%s foss", (enable) ? "Enable" : "Disable"); + + std::string_view foss_cmd; + if (enable) { + foss_cmd = "foss:on"; + } else { + foss_cmd = "foss:off"; + } + + if (!SendPpsCommand(foss_cmd)) { + mFossStatus = enable; + } +} diff --git a/power-libperfmgr/disp-power/display-helper.h b/power-libperfmgr/disp-power/DisplayLowPower.h index 70b96975..c0d6c33d 100644 --- a/power-libperfmgr/disp-power/display-helper.h +++ b/power-libperfmgr/disp-power/DisplayLowPower.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * Copyright (C) 2020 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. @@ -14,15 +14,24 @@ * limitations under the License. */ -#ifndef POWER_LIBPERFMGR_DISPLAY_HELPER_H_ -#define POWER_LIBPERFMGR_DISPLAY_HELPER_H_ +#pragma once -enum display_lpm_state { - DISPLAY_LPM_OFF = 0, - DISPLAY_LPM_ON, - DISPLAY_LPM_UNKNOWN, -}; +#include <android-base/unique_fd.h> + +#include <string_view> -void set_display_lpm(int enable); +class DisplayLowPower { + public: + DisplayLowPower(); + ~DisplayLowPower() {} + void Init(); + void SetDisplayLowPower(bool enable); -#endif // POWER_LIBPERFMGR_DISPLAY_HELPER_H_ + private: + void ConnectPpsDaemon(); + int SendPpsCommand(const std::string_view cmd); + void SetFoss(bool enable); + + android::base::unique_fd mPpsSocket; + bool mFossStatus; +}; diff --git a/power-libperfmgr/disp-power/InteractionHandler.cpp b/power-libperfmgr/disp-power/InteractionHandler.cpp index da6a9173..1826958e 100644 --- a/power-libperfmgr/disp-power/InteractionHandler.cpp +++ b/power-libperfmgr/disp-power/InteractionHandler.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#define LOG_TAG "android.hardware.power@1.3-service.pixel-libperfmgr" +#define LOG_TAG "android.hardware.power@-service.pixel-libperfmgr" #define ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL) #include <fcntl.h> diff --git a/power-libperfmgr/disp-power/display-helper.cpp b/power-libperfmgr/disp-power/display-helper.cpp deleted file mode 100644 index 2369c631..00000000 --- a/power-libperfmgr/disp-power/display-helper.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2018 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. - */ - -#define LOG_NIDEBUG 0 -#define LOG_TAG "android.hardware.power@1.3-service.pixel-libperfmgr" - -#include <dlfcn.h> -#include <errno.h> -#include <fcntl.h> -#include <inttypes.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> - -#include <cutils/sockets.h> -#include <log/log.h> - -#include "display-helper.h" - -#define DAEMON_SOCKET "pps" - -static int daemon_socket = -1; - -static int connectPPDaemon() { - // Setup socket connection, if not already done. - if (daemon_socket < 0) - daemon_socket = - socket_local_client(DAEMON_SOCKET, ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM); - - if (daemon_socket < 0) { - ALOGE("Connecting to socket failed: %s", strerror(errno)); - return -1; - } - return 0; -} - -static int ppdComm(const char *cmd) { - int ret = -1; - - ret = connectPPDaemon(); - if (ret < 0) - return ret; - - ret = write(daemon_socket, cmd, strlen(cmd)); - if (ret < 0) { - ALOGE("Failed to send data over socket, %s", strerror(errno)); - return ret; - } - return 0; -} - -void set_display_lpm(int enable) { - ALOGI("set_display_lpm state: %d", enable); - if (enable) { - ppdComm("foss:on"); - } else { - ppdComm("foss:off"); - } -} diff --git a/power-libperfmgr/hidl/Power.cpp b/power-libperfmgr/hidl/Power.cpp index 1092670d..2b43b0f3 100644 --- a/power-libperfmgr/hidl/Power.cpp +++ b/power-libperfmgr/hidl/Power.cpp @@ -31,7 +31,7 @@ #include <utils/Trace.h> #include "AudioStreaming.h" -#include "disp-power/display-helper.h" +#include "disp-power/DisplayLowPower.h" namespace android { namespace hardware { @@ -62,6 +62,7 @@ static const std::map<enum CameraStreamingMode, std::string> kCamStreamingHint = Power::Power() : mHintManager(nullptr), mInteractionHandler(nullptr), + mDisplayLowPower(nullptr), mVRModeOn(false), mSustainedPerfModeOn(false), mCameraStreamingMode(CAMERA_STREAMING_OFF), @@ -74,6 +75,8 @@ Power::Power() } mInteractionHandler = std::make_unique<InteractionHandler>(mHintManager); mInteractionHandler->Init(); + mDisplayLowPower = std::make_unique<DisplayLowPower>(); + mDisplayLowPower->Init(); std::string state = android::base::GetProperty(kPowerHalStateProp, ""); if (state == "CAMERA_STREAMING") { ALOGI("Initialize with CAMERA_STREAMING on"); @@ -199,13 +202,7 @@ Return<void> Power::powerHint(PowerHint_1_0 hint, int32_t data) { } break; case PowerHint_1_0::LOW_POWER: - if (data) { - // Device in battery saver mode, enable display low power mode - set_display_lpm(true); - } else { - // Device exiting battery saver mode, disable display low power mode - set_display_lpm(false); - } + mDisplayLowPower->SetDisplayLowPower(static_cast<bool>(data)); break; default: break; diff --git a/power-libperfmgr/hidl/Power.h b/power-libperfmgr/hidl/Power.h index a79f94f5..9bac4077 100644 --- a/power-libperfmgr/hidl/Power.h +++ b/power-libperfmgr/hidl/Power.h @@ -27,6 +27,7 @@ #include <perfmgr/HintManager.h> #include "CameraMode.h" +#include "disp-power/DisplayLowPower.h" #include "disp-power/InteractionHandler.h" namespace android { @@ -72,6 +73,7 @@ class Power : public IPower { private: std::shared_ptr<HintManager> mHintManager; std::unique_ptr<InteractionHandler> mInteractionHandler; + std::unique_ptr<DisplayLowPower> mDisplayLowPower; std::atomic<bool> mVRModeOn; std::atomic<bool> mSustainedPerfModeOn; std::atomic<enum CameraStreamingMode> mCameraStreamingMode; |