diff --git a/AndroidProducts.mk b/AndroidProducts.mk index a7404dc..59a741e 100644 --- a/AndroidProducts.mk +++ b/AndroidProducts.mk @@ -5,9 +5,4 @@ # PRODUCT_MAKEFILES := \ - $(LOCAL_DIR)/lineage_spaced.mk - -COMMON_LUNCH_CHOICES := \ - lineage_spaced-user \ - lineage_spaced-userdebug \ - lineage_spaced-eng \ No newline at end of file + $(LOCAL_DIR)/aosp_spaced.mk diff --git a/BoardConfig.mk b/BoardConfig.mk index 78ab61e..d5266fe 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -20,7 +20,7 @@ TARGET_ARCH_VARIANT := armv8-2a-dotprod TARGET_CPU_ABI := arm64-v8a TARGET_CPU_ABI2 := TARGET_CPU_VARIANT := generic -TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a76 +TARGET_CPU_VARIANT_RUNTIME := cortex-a76 TARGET_2ND_ARCH := arm TARGET_2ND_ARCH_VARIANT := armv8-2a @@ -29,6 +29,12 @@ TARGET_2ND_CPU_ABI2 := armeabi TARGET_2ND_CPU_VARIANT := generic TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a55 +# ART +ART_BUILD_TARGET_NDEBUG := true +ART_BUILD_TARGET_DEBUG := false +ART_BUILD_HOST_NDEBUG := true +ART_BUILD_HOST_DEBUG := false + # Assert TARGET_OTA_ASSERT_DEVICE := RMX3151L1,RMX3286,spaced @@ -47,7 +53,6 @@ BOARD_DTB_OFFSET := 0x0bc08000 BOARD_BOOTIMG_HEADER_VERSION := 2 BOARD_INCLUDE_DTB_IN_BOOTIMG := true -BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive BOARD_KERNEL_CMDLINE := bootopt=64S3,32N2,64N2 BOARD_KERNEL_CMDLINE += androidboot.init_fatal_reboot_target=recovery @@ -91,10 +96,11 @@ BOARD_SUPER_PARTITION_GROUPS := main BOARD_MAIN_SIZE := 10196353024 BOARD_MAIN_PARTITION_LIST := system system_ext vendor product odm -BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 2147483648 -BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE := 1610612736 -BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 2147483648 +# BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 2147483648 +# BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE := 1610612736 +# BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 2147483648 +BOARD_EROFS_COMPRESSOR := lz4 BOARD_EROFS_PCLUSTER_SIZE := 262144 BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := ext4 @@ -108,16 +114,10 @@ TARGET_COPY_OUT_VENDOR := vendor TARGET_COPY_OUT_PRODUCT := product TARGET_COPY_OUT_SYSTEM_EXT := system_ext -# Lineage Health -TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH := /sys/class/oplus_chg/battery/mmi_charging_enable - # Platform TARGET_BOARD_PLATFORM := mt6781 BOARD_HAS_MTK_HARDWARE := true -# Power -TARGET_TAP_TO_WAKE_NODE := "/proc/touchpanel/double_tap_enable" - # Recovery TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888" TARGET_RECOVERY_FSTAB := $(DEVICE_PATH)/rootdir/etc/fstab.mt6781 @@ -144,6 +144,9 @@ SOONG_CONFIG_NAMESPACES += OPLUS_LINEAGE_TOUCH_HAL SOONG_CONFIG_OPLUS_LINEAGE_TOUCH_HAL := INCLUDE_DIR SOONG_CONFIG_OPLUS_LINEAGE_TOUCH_HAL_INCLUDE_DIR := $(DEVICE_PATH)/touch/include +# Vibrator +TARGET_VIBRATOR_SUPPORTS_EFFECTS := true + # Verified Boot BOARD_AVB_ENABLE := true BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 3 @@ -167,10 +170,7 @@ BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 3 # VINTF DEVICE_MANIFEST_FILE += $(DEVICE_PATH)/manifest.xml DEVICE_MATRIX_FILE += $(DEVICE_PATH)/compatibility_matrix.xml -DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \ - $(DEVICE_PATH)/framework_compatibility_matrix.xml \ - vendor/lineage/config/device_framework_matrix.xml -ODM_MANIFEST_FILES := $(DEVICE_PATH)/manifest_odm.xml +DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := $(DEVICE_PATH)/framework_compatibility_matrix.xml ODM_MANIFEST_SKUS += nfc ODM_MANIFEST_NFC_FILES := $(DEVICE_PATH)/manifest_nfc.xml @@ -183,14 +183,11 @@ TARGET_VENDOR_PROP += $(DEVICE_PATH)/vendor.prop BOARD_VNDK_VERSION := current # Wi-Fi -BOARD_WLAN_DEVICE := MediaTek WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_DRIVER := NL80211 -BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_mt66xx BOARD_HOSTAPD_DRIVER := NL80211 -BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_mt66xx WIFI_DRIVER_FW_PATH_PARAM := "/dev/wmtWifi" -WIFI_DRIVER_FW_PATH_STA:= "STA" +WIFI_DRIVER_FW_PATH_STA := "STA" WIFI_DRIVER_FW_PATH_AP := "AP" WIFI_DRIVER_FW_PATH_P2P := "P2P" WIFI_DRIVER_STATE_CTRL_PARAM := "/dev/wmtWifi" diff --git a/aidl/health/android.hardware.health-service.mediatek.xml b/aidl/health/android.hardware.health-service.mediatek.xml index 1fe9b8d..2acaaba 100644 --- a/aidl/health/android.hardware.health-service.mediatek.xml +++ b/aidl/health/android.hardware.health-service.mediatek.xml @@ -1,7 +1,7 @@ android.hardware.health - 2 + 3 IHealth/default diff --git a/aidl/power-libperfmgr/Android.bp b/aidl/power-libperfmgr/Android.bp new file mode 100644 index 0000000..6456777 --- /dev/null +++ b/aidl/power-libperfmgr/Android.bp @@ -0,0 +1,45 @@ +// +// Copyright (C) 2021 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +soong_namespace { + imports: [ + "hardware/google/interfaces", + "hardware/google/pixel", + ], +} + +cc_binary { + name: "android.hardware.power-service.spaced-libperfmgr", + relative_install_path: "hw", + init_rc: ["android.hardware.power-service.spaced-libperfmgr.rc"], + vintf_fragments: ["android.hardware.power-service.spaced.xml"], + vendor: true, + cflags: [ + "-Wno-unused-variable", + "-Wno-unused-parameter", + ], + shared_libs: [ + "android.hardware.power-V4-ndk", + "libbase", + "libbinder_ndk", + "libcutils", + "libdl", + "liblog", + "libperfmgr", + "libprocessgroup", + "libutils", + "pixel-power-ext-V1-ndk", + ], + srcs: [ + "service.cpp", + "InteractionHandler.cpp", + "Power.cpp", + "PowerExt.cpp", + "PowerHintSession.cpp", + "PowerSessionManager.cpp", + ], +} + diff --git a/aidl/power-libperfmgr/InteractionHandler.cpp b/aidl/power-libperfmgr/InteractionHandler.cpp new file mode 100644 index 0000000..a9f908b --- /dev/null +++ b/aidl/power-libperfmgr/InteractionHandler.cpp @@ -0,0 +1,283 @@ +/* + * 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 ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL) +#define LOG_TAG "powerhal-libperfmgr" + +#include "InteractionHandler.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define MAX_LENGTH 64 + +#define MSINSEC 1000L +#define NSINMS 1000000L + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +namespace { + +static const bool kDisplayIdleSupport = + ::android::base::GetBoolProperty("vendor.powerhal.disp.idle_support", true); +static const std::array kDispIdlePath = {"/sys/class/drm/card0/device/idle_state", + "/sys/class/graphics/fb0/idle_state"}; +static const uint32_t kWaitMs = + ::android::base::GetUintProperty("vendor.powerhal.disp.idle_wait", /*default*/ 100U); +static const uint32_t kMinDurationMs = + ::android::base::GetUintProperty("vendor.powerhal.interaction.min", /*default*/ 1400U); +static const uint32_t kMaxDurationMs = + ::android::base::GetUintProperty("vendor.powerhal.interaction.max", /*default*/ 5650U); +static const uint32_t kDurationOffsetMs = + ::android::base::GetUintProperty("vendor.powerhal.interaction.offset", /*default*/ 650U); + +static size_t CalcTimespecDiffMs(struct timespec start, struct timespec end) { + size_t diff_in_ms = 0; + diff_in_ms += (end.tv_sec - start.tv_sec) * MSINSEC; + diff_in_ms += (end.tv_nsec - start.tv_nsec) / NSINMS; + return diff_in_ms; +} + +static int FbIdleOpen(void) { + int fd; + for (const auto &path : kDispIdlePath) { + fd = open(path, O_RDONLY); + if (fd >= 0) + return fd; + } + ALOGE("Unable to open fb idle state path (%d)", errno); + return -1; +} + +} // namespace + +using ::android::perfmgr::HintManager; + +InteractionHandler::InteractionHandler() + : mState(INTERACTION_STATE_UNINITIALIZED), mDurationMs(0) {} + +InteractionHandler::~InteractionHandler() { + Exit(); +} + +bool InteractionHandler::Init() { + std::lock_guard lk(mLock); + + if (mState != INTERACTION_STATE_UNINITIALIZED) + return true; + + int fd = FbIdleOpen(); + if (fd < 0) + return false; + mIdleFd = fd; + + mEventFd = eventfd(0, EFD_NONBLOCK); + if (mEventFd < 0) { + ALOGE("Unable to create event fd (%d)", errno); + close(mIdleFd); + return false; + } + + mState = INTERACTION_STATE_IDLE; + mThread = std::unique_ptr(new std::thread(&InteractionHandler::Routine, this)); + + return true; +} + +void InteractionHandler::Exit() { + std::unique_lock lk(mLock); + if (mState == INTERACTION_STATE_UNINITIALIZED) + return; + + AbortWaitLocked(); + mState = INTERACTION_STATE_UNINITIALIZED; + lk.unlock(); + + mCond.notify_all(); + mThread->join(); + + close(mEventFd); + close(mIdleFd); +} + +void InteractionHandler::PerfLock() { + ALOGV("%s: acquiring perf lock", __func__); + if (!HintManager::GetInstance()->DoHint("INTERACTION")) { + ALOGE("%s: do hint INTERACTION failed", __func__); + } +} + +void InteractionHandler::PerfRel() { + ALOGV("%s: releasing perf lock", __func__); + if (!HintManager::GetInstance()->EndHint("INTERACTION")) { + ALOGE("%s: end hint INTERACTION failed", __func__); + } +} + +void InteractionHandler::Acquire(int32_t duration) { + ATRACE_CALL(); + + std::lock_guard lk(mLock); + + int inputDuration = duration + kDurationOffsetMs; + int finalDuration; + if (inputDuration > kMaxDurationMs) + finalDuration = kMaxDurationMs; + else if (inputDuration > kMinDurationMs) + finalDuration = inputDuration; + else + finalDuration = kMinDurationMs; + + // Fallback to do boost directly + // 1) override property is set OR + // 2) InteractionHandler not initialized + if (!kDisplayIdleSupport || mState == INTERACTION_STATE_UNINITIALIZED) { + HintManager::GetInstance()->DoHint("INTERACTION", std::chrono::milliseconds(finalDuration)); + return; + } + + struct timespec cur_timespec; + clock_gettime(CLOCK_MONOTONIC, &cur_timespec); + if (mState != INTERACTION_STATE_IDLE && finalDuration <= mDurationMs) { + size_t elapsed_time = CalcTimespecDiffMs(mLastTimespec, cur_timespec); + // don't hint if previous hint's duration covers this hint's duration + if (elapsed_time <= (mDurationMs - finalDuration)) { + ALOGV("%s: Previous duration (%d) cover this (%d) elapsed: %lld", __func__, + static_cast(mDurationMs), static_cast(finalDuration), + static_cast(elapsed_time)); + return; + } + } + mLastTimespec = cur_timespec; + mDurationMs = finalDuration; + + ALOGV("%s: input: %d final duration: %d", __func__, duration, finalDuration); + + if (mState == INTERACTION_STATE_WAITING) + AbortWaitLocked(); + else if (mState == INTERACTION_STATE_IDLE) + PerfLock(); + + mState = INTERACTION_STATE_INTERACTION; + mCond.notify_one(); +} + +void InteractionHandler::Release() { + std::lock_guard lk(mLock); + if (mState == INTERACTION_STATE_WAITING) { + ATRACE_CALL(); + PerfRel(); + mState = INTERACTION_STATE_IDLE; + } else { + // clear any wait aborts pending in event fd + uint64_t val; + ssize_t ret = read(mEventFd, &val, sizeof(val)); + + ALOGW_IF(ret < 0, "%s: failed to clear eventfd (%zd, %d)", __func__, ret, errno); + } +} + +// should be called while locked +void InteractionHandler::AbortWaitLocked() { + uint64_t val = 1; + ssize_t ret = write(mEventFd, &val, sizeof(val)); + if (ret != sizeof(val)) + ALOGW("Unable to write to event fd (%zd)", ret); +} + +void InteractionHandler::WaitForIdle(int32_t wait_ms, int32_t timeout_ms) { + char data[MAX_LENGTH]; + ssize_t ret; + struct pollfd pfd[2]; + + ATRACE_CALL(); + + ALOGV("%s: wait:%d timeout:%d", __func__, wait_ms, timeout_ms); + + pfd[0].fd = mEventFd; + pfd[0].events = POLLIN; + pfd[1].fd = mIdleFd; + pfd[1].events = POLLPRI | POLLERR; + + ret = poll(pfd, 1, wait_ms); + if (ret > 0) { + ALOGV("%s: wait aborted", __func__); + return; + } else if (ret < 0) { + ALOGE("%s: error in poll while waiting", __func__); + return; + } + + ret = pread(mIdleFd, data, sizeof(data), 0); + if (!ret) { + ALOGE("%s: Unexpected EOF!", __func__); + return; + } + + if (!strncmp(data, "idle", 4)) { + ALOGV("%s: already idle", __func__); + return; + } + + ret = poll(pfd, 2, timeout_ms); + if (ret < 0) + ALOGE("%s: Error on waiting for idle (%zd)", __func__, ret); + else if (ret == 0) + ALOGV("%s: timed out waiting for idle", __func__); + else if (pfd[0].revents) + ALOGV("%s: wait for idle aborted", __func__); + else if (pfd[1].revents) + ALOGV("%s: idle detected", __func__); +} + +void InteractionHandler::Routine() { + pthread_setname_np(pthread_self(), "DispIdle"); + std::unique_lock lk(mLock, std::defer_lock); + + while (true) { + lk.lock(); + mCond.wait(lk, [&] { return mState != INTERACTION_STATE_IDLE; }); + if (mState == INTERACTION_STATE_UNINITIALIZED) + return; + mState = INTERACTION_STATE_WAITING; + lk.unlock(); + + WaitForIdle(kWaitMs, mDurationMs); + Release(); + } +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/InteractionHandler.h b/aidl/power-libperfmgr/InteractionHandler.h new file mode 100644 index 0000000..c88f7d4 --- /dev/null +++ b/aidl/power-libperfmgr/InteractionHandler.h @@ -0,0 +1,71 @@ +/* + * 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. + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +enum InteractionState { + INTERACTION_STATE_UNINITIALIZED, + INTERACTION_STATE_IDLE, + INTERACTION_STATE_INTERACTION, + INTERACTION_STATE_WAITING, +}; + +class InteractionHandler { + public: + InteractionHandler(); + ~InteractionHandler(); + bool Init(); + void Exit(); + void Acquire(int32_t duration); + + private: + void Release(); + void WaitForIdle(int32_t wait_ms, int32_t timeout_ms); + void AbortWaitLocked(); + void Routine(); + + void PerfLock(); + void PerfRel(); + + enum InteractionState mState; + int mIdleFd; + int mEventFd; + int32_t mDurationMs; + struct timespec mLastTimespec; + std::unique_ptr mThread; + std::mutex mLock; + std::condition_variable mCond; +}; + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/Power.cpp b/aidl/power-libperfmgr/Power.cpp new file mode 100644 index 0000000..a25ec94 --- /dev/null +++ b/aidl/power-libperfmgr/Power.cpp @@ -0,0 +1,231 @@ +/* + * 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 "powerhal-libperfmgr" + +#include "Power.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PowerHintSession.h" +#include "PowerSessionManager.h" + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::aidl::google::hardware::power::impl::pixel::PowerHintSession; +using ::android::perfmgr::HintManager; + +constexpr char kPowerHalStateProp[] = "vendor.powerhal.state"; +constexpr char kPowerHalAudioProp[] = "vendor.powerhal.audio"; +constexpr char kPowerHalRenderingProp[] = "vendor.powerhal.rendering"; + +Power::Power() + : mInteractionHandler(nullptr), + mSustainedPerfModeOn(false) { + mInteractionHandler = std::make_unique(); + mInteractionHandler->Init(); + + std::string state = ::android::base::GetProperty(kPowerHalStateProp, ""); + if (state == "SUSTAINED_PERFORMANCE") { + LOG(INFO) << "Initialize with SUSTAINED_PERFORMANCE on"; + HintManager::GetInstance()->DoHint("SUSTAINED_PERFORMANCE"); + mSustainedPerfModeOn = true; + } else { + LOG(INFO) << "Initialize PowerHAL"; + } + + state = ::android::base::GetProperty(kPowerHalAudioProp, ""); + if (state == "AUDIO_STREAMING_LOW_LATENCY") { + LOG(INFO) << "Initialize with AUDIO_LOW_LATENCY on"; + HintManager::GetInstance()->DoHint(state); + } + + state = ::android::base::GetProperty(kPowerHalRenderingProp, ""); + if (state == "EXPENSIVE_RENDERING") { + LOG(INFO) << "Initialize with EXPENSIVE_RENDERING on"; + HintManager::GetInstance()->DoHint("EXPENSIVE_RENDERING"); + } +} + +ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { + LOG(DEBUG) << "Power setMode: " << toString(type) << " to: " << enabled; + if (HintManager::GetInstance()->GetAdpfProfile() && + HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) { + PowerSessionManager::getInstance()->updateHintMode(toString(type), enabled); + } + + switch (type) { + case Mode::SUSTAINED_PERFORMANCE: + if (enabled) { + HintManager::GetInstance()->DoHint("SUSTAINED_PERFORMANCE"); + } + mSustainedPerfModeOn = true; + break; + case Mode::LAUNCH: + if (mSustainedPerfModeOn) { + break; + } + [[fallthrough]]; + case Mode::DOUBLE_TAP_TO_WAKE: + [[fallthrough]]; + case Mode::FIXED_PERFORMANCE: + [[fallthrough]]; + case Mode::EXPENSIVE_RENDERING: + [[fallthrough]]; + case Mode::INTERACTIVE: + [[fallthrough]]; + case Mode::DEVICE_IDLE: + [[fallthrough]]; + case Mode::DISPLAY_INACTIVE: + [[fallthrough]]; + case Mode::AUDIO_STREAMING_LOW_LATENCY: + [[fallthrough]]; + case Mode::GAME_LOADING: + [[fallthrough]]; + default: + if (enabled) { + HintManager::GetInstance()->DoHint(toString(type)); + } else { + HintManager::GetInstance()->EndHint(toString(type)); + } + break; + } + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Power::isModeSupported(Mode type, bool *_aidl_return) { + + bool supported = HintManager::GetInstance()->IsHintSupported(toString(type)); + LOG(INFO) << "Power mode " << toString(type) << " isModeSupported: " << supported; + *_aidl_return = supported; + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Power::setBoost(Boost type, int32_t durationMs) { + LOG(DEBUG) << "Power setBoost: " << toString(type) << " duration: " << durationMs; + if (HintManager::GetInstance()->GetAdpfProfile() && + HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) { + PowerSessionManager::getInstance()->updateHintBoost(toString(type), durationMs); + } + switch (type) { + case Boost::INTERACTION: + if (mSustainedPerfModeOn) { + break; + } + mInteractionHandler->Acquire(durationMs); + break; + case Boost::DISPLAY_UPDATE_IMMINENT: + [[fallthrough]]; + case Boost::ML_ACC: + [[fallthrough]]; + case Boost::AUDIO_LAUNCH: + [[fallthrough]]; + default: + if (mSustainedPerfModeOn) { + break; + } + if (durationMs > 0) { + HintManager::GetInstance()->DoHint(toString(type), + std::chrono::milliseconds(durationMs)); + } else if (durationMs == 0) { + HintManager::GetInstance()->DoHint(toString(type)); + } else { + HintManager::GetInstance()->EndHint(toString(type)); + } + break; + } + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Power::isBoostSupported(Boost type, bool *_aidl_return) { + bool supported = HintManager::GetInstance()->IsHintSupported(toString(type)); + LOG(INFO) << "Power boost " << toString(type) << " isBoostSupported: " << supported; + *_aidl_return = supported; + return ndk::ScopedAStatus::ok(); +} + +constexpr const char *boolToString(bool b) { + return b ? "true" : "false"; +} + +binder_status_t Power::dump(int fd, const char **, uint32_t) { + std::string buf(::android::base::StringPrintf( + "HintManager Running: %s\n" + "SustainedPerformanceMode: %s\n", + boolToString(HintManager::GetInstance()->IsRunning()), + boolToString(mSustainedPerfModeOn))); + // Dump nodes through libperfmgr + HintManager::GetInstance()->DumpToFd(fd); + PowerSessionManager::getInstance()->dumpToFd(fd); + if (!::android::base::WriteStringToFd(buf, fd)) { + PLOG(ERROR) << "Failed to dump state to fd"; + } + fsync(fd); + return STATUS_OK; +} + +ndk::ScopedAStatus Power::createHintSession(int32_t tgid, int32_t uid, + const std::vector &threadIds, + int64_t durationNanos, + std::shared_ptr *_aidl_return) { + if (!HintManager::GetInstance()->GetAdpfProfile() || + HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs <= 0) { + *_aidl_return = nullptr; + return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); + } + if (threadIds.size() == 0) { + LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size(); + *_aidl_return = nullptr; + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + std::shared_ptr session = ndk::SharedRefBase::make( + tgid, uid, threadIds, durationNanos); + *_aidl_return = session; + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus Power::getHintSessionPreferredRate(int64_t *outNanoseconds) { + *outNanoseconds = HintManager::GetInstance()->GetAdpfProfile() + ? HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs + : 0; + if (*outNanoseconds <= 0) { + return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); + } + + return ndk::ScopedAStatus::ok(); +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/Power.h b/aidl/power-libperfmgr/Power.h new file mode 100644 index 0000000..c5bb2a8 --- /dev/null +++ b/aidl/power-libperfmgr/Power.h @@ -0,0 +1,62 @@ +/* + * 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. + */ + +#pragma once + +#include + +#include +#include +#include + +#include "InteractionHandler.h" + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::aidl::android::hardware::power::Boost; +using ::aidl::android::hardware::power::IPowerHintSession; +using ::aidl::android::hardware::power::Mode; + +class Power : public ::aidl::android::hardware::power::BnPower { + public: + Power(); + 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; + ndk::ScopedAStatus isBoostSupported(Boost type, bool *_aidl_return) override; + ndk::ScopedAStatus createHintSession(int32_t tgid, int32_t uid, + const std::vector &threadIds, + int64_t durationNanos, + std::shared_ptr *_aidl_return) override; + ndk::ScopedAStatus getHintSessionPreferredRate(int64_t *outNanoseconds) override; + binder_status_t dump(int fd, const char **args, uint32_t numArgs) override; + + private: + std::unique_ptr mInteractionHandler; + std::atomic mSustainedPerfModeOn; +}; + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerExt.cpp b/aidl/power-libperfmgr/PowerExt.cpp new file mode 100644 index 0000000..56ad291 --- /dev/null +++ b/aidl/power-libperfmgr/PowerExt.cpp @@ -0,0 +1,95 @@ +/* + * 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.spaced.ext-libperfmgr" + +#include "PowerExt.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PowerSessionManager.h" + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::android::perfmgr::HintManager; + +ndk::ScopedAStatus PowerExt::setMode(const std::string &mode, bool enabled) { + LOG(DEBUG) << "PowerExt setMode: " << mode << " to: " << enabled; + + if (enabled) { + HintManager::GetInstance()->DoHint(mode); + } else { + HintManager::GetInstance()->EndHint(mode); + } + if (HintManager::GetInstance()->GetAdpfProfile() && + HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) { + PowerSessionManager::getInstance()->updateHintMode(mode, enabled); + } + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerExt::isModeSupported(const std::string &mode, bool *_aidl_return) { + bool supported = HintManager::GetInstance()->IsHintSupported(mode); + LOG(INFO) << "PowerExt mode " << mode << " isModeSupported: " << supported; + *_aidl_return = supported; + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerExt::setBoost(const std::string &boost, int32_t durationMs) { + LOG(DEBUG) << "PowerExt setBoost: " << boost << " duration: " << durationMs; + if (HintManager::GetInstance()->GetAdpfProfile() && + HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) { + PowerSessionManager::getInstance()->updateHintBoost(boost, durationMs); + } + + if (durationMs > 0) { + HintManager::GetInstance()->DoHint(boost, std::chrono::milliseconds(durationMs)); + } else if (durationMs == 0) { + HintManager::GetInstance()->DoHint(boost); + } else { + HintManager::GetInstance()->EndHint(boost); + } + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerExt::isBoostSupported(const std::string &boost, bool *_aidl_return) { + bool supported = HintManager::GetInstance()->IsHintSupported(boost); + LOG(INFO) << "PowerExt boost " << boost << " isBoostSupported: " << supported; + *_aidl_return = supported; + return ndk::ScopedAStatus::ok(); +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerExt.h b/aidl/power-libperfmgr/PowerExt.h new file mode 100644 index 0000000..bed12b5 --- /dev/null +++ b/aidl/power-libperfmgr/PowerExt.h @@ -0,0 +1,49 @@ +/* + * 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. + */ + +#pragma once + +#include +#include +#include + +#include +#include + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +class PowerExt : public ::aidl::google::hardware::power::extension::pixel::BnPowerExt { + public: + PowerExt() {} + 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; + ndk::ScopedAStatus isBoostSupported(const std::string &boost, bool *_aidl_return) override; + + private: +}; + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerHintSession.cpp b/aidl/power-libperfmgr/PowerHintSession.cpp new file mode 100644 index 0000000..eadc4cf --- /dev/null +++ b/aidl/power-libperfmgr/PowerHintSession.cpp @@ -0,0 +1,529 @@ +/* + * Copyright 2021 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 "powerhal-libperfmgr" +#define ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL) + +#include "PowerHintSession.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PowerSessionManager.h" + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::android::base::StringPrintf; +using ::android::perfmgr::AdpfConfig; +using ::android::perfmgr::HintManager; +using std::chrono::duration_cast; +using std::chrono::nanoseconds; + +namespace { + +static inline int64_t ns_to_100us(int64_t ns) { + return ns / 100000; +} + +} // namespace + +int64_t PowerHintSession::convertWorkDurationToBoostByPid( + const std::vector &actualDurations) { + std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile(); + const nanoseconds &targetDuration = mDescriptor->duration; + int64_t &integral_error = mDescriptor->integral_error; + int64_t &previous_error = mDescriptor->previous_error; + uint64_t samplingWindowP = adpfConfig->mSamplingWindowP; + uint64_t samplingWindowI = adpfConfig->mSamplingWindowI; + uint64_t samplingWindowD = adpfConfig->mSamplingWindowD; + int64_t targetDurationNanos = (int64_t)targetDuration.count(); + int64_t length = actualDurations.size(); + int64_t p_start = + samplingWindowP == 0 || samplingWindowP > length ? 0 : length - samplingWindowP; + int64_t i_start = + samplingWindowI == 0 || samplingWindowI > length ? 0 : length - samplingWindowI; + int64_t d_start = + samplingWindowD == 0 || samplingWindowD > length ? 0 : length - samplingWindowD; + int64_t dt = ns_to_100us(targetDurationNanos); + int64_t err_sum = 0; + int64_t derivative_sum = 0; + for (int64_t i = std::min({p_start, i_start, d_start}); i < length; i++) { + int64_t actualDurationNanos = actualDurations[i].durationNanos; + if (std::abs(actualDurationNanos) > targetDurationNanos * 20) { + ALOGW("The actual duration is way far from the target (%" PRId64 " >> %" PRId64 ")", + actualDurationNanos, targetDurationNanos); + } + // PID control algorithm + int64_t error = ns_to_100us(actualDurationNanos - targetDurationNanos); + if (i >= d_start) { + derivative_sum += error - previous_error; + } + if (i >= p_start) { + err_sum += error; + } + if (i >= i_start) { + integral_error += error * dt; + integral_error = std::min(adpfConfig->getPidIHighDivI(), integral_error); + integral_error = std::max(adpfConfig->getPidILowDivI(), integral_error); + } + previous_error = error; + } + int64_t pOut = static_cast((err_sum > 0 ? adpfConfig->mPidPo : adpfConfig->mPidPu) * + err_sum / (length - p_start)); + int64_t iOut = static_cast(adpfConfig->mPidI * integral_error); + int64_t dOut = + static_cast((derivative_sum > 0 ? adpfConfig->mPidDo : adpfConfig->mPidDu) * + derivative_sum / dt / (length - d_start)); + + int64_t output = pOut + iOut + dOut; + if (ATRACE_ENABLED()) { + traceSessionVal("pid.err", err_sum / (length - p_start)); + traceSessionVal("pid.integral", integral_error); + traceSessionVal("pid.derivative", derivative_sum / dt / (length - d_start)); + traceSessionVal("pid.pOut", pOut); + traceSessionVal("pid.iOut", iOut); + traceSessionVal("pid.dOut", dOut); + traceSessionVal("pid.output", output); + } + return output; +} + +PowerHintSession::PowerHintSession(int32_t tgid, int32_t uid, const std::vector &threadIds, + int64_t durationNanos) + : mStaleTimerHandler(sp::make(this)), + mBoostTimerHandler(sp::make(this)) { + mDescriptor = new AppHintDesc(tgid, uid, threadIds); + mDescriptor->duration = std::chrono::nanoseconds(durationNanos); + mIdString = StringPrintf("%" PRId32 "-%" PRId32 "-%" PRIxPTR, mDescriptor->tgid, + mDescriptor->uid, reinterpret_cast(this) & 0xffff); + + mPowerManagerHandler = PowerSessionManager::getInstance(); + mLastUpdatedTime.store(std::chrono::steady_clock::now()); + if (ATRACE_ENABLED()) { + traceSessionVal("target", mDescriptor->duration.count()); + traceSessionVal("active", mDescriptor->is_active.load()); + } + PowerSessionManager::getInstance()->addPowerSession(this); + // init boost + sendHint(SessionHint::CPU_LOAD_RESET); + ALOGV("PowerHintSession created: %s", mDescriptor->toString().c_str()); +} + +PowerHintSession::~PowerHintSession() { + close(); + ALOGV("PowerHintSession deleted: %s", mDescriptor->toString().c_str()); + if (ATRACE_ENABLED()) { + traceSessionVal("target", 0); + traceSessionVal("actl_last", 0); + traceSessionVal("active", 0); + } + delete mDescriptor; +} + +void PowerHintSession::traceSessionVal(char const *identifier, int64_t val) const { + ATRACE_INT(StringPrintf("adpf.%s-%s", mIdString.c_str(), identifier).c_str(), val); +} + +bool PowerHintSession::isAppSession() { + // Check if uid is in range reserved for applications + return mDescriptor->uid >= AID_APP_START; +} + +void PowerHintSession::updateUniveralBoostMode() { + if (!isAppSession()) { + return; + } + if (ATRACE_ENABLED()) { + const std::string tag = StringPrintf("%s:updateUniveralBoostMode()", mIdString.c_str()); + ATRACE_BEGIN(tag.c_str()); + } + PowerHintMonitor::getInstance()->getLooper()->sendMessage(mPowerManagerHandler, NULL); + if (ATRACE_ENABLED()) { + ATRACE_END(); + } +} + +void PowerHintSession::tryToSendPowerHint(std::string hint) { + if (!mSupportedHints[hint].has_value()) { + mSupportedHints[hint] = HintManager::GetInstance()->IsHintSupported(hint); + } + if (mSupportedHints[hint].value()) { + HintManager::GetInstance()->DoHint(hint); + } +} + +int PowerHintSession::setSessionUclampMin(int32_t min, bool resetStale) { + { + std::lock_guard guard(mSessionLock); + mDescriptor->current_min = min; + } + if (min != 0 && resetStale) { + mStaleTimerHandler->updateTimer(); + } + PowerSessionManager::getInstance()->setUclampMin(this, min); + + if (ATRACE_ENABLED()) { + traceSessionVal("min", min); + } + return 0; +} + +int PowerHintSession::getUclampMin() { + return mDescriptor->current_min; +} + +void PowerHintSession::dumpToStream(std::ostream &stream) { + stream << "ID.Min.Act.Timeout(" << mIdString; + stream << ", " << mDescriptor->current_min; + stream << ", " << mDescriptor->is_active.load(); + stream << ", " << isTimeout() << ")"; +} + +ndk::ScopedAStatus PowerHintSession::pause() { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (!mDescriptor->is_active.load()) + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + // Reset to default uclamp value. + mDescriptor->is_active.store(false); + setStale(); + if (ATRACE_ENABLED()) { + traceSessionVal("active", mDescriptor->is_active.load()); + } + updateUniveralBoostMode(); + PowerSessionManager::getInstance()->removeThreadsFromPowerSession(this); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::resume() { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (mDescriptor->is_active.load()) + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + mDescriptor->is_active.store(true); + PowerSessionManager::getInstance()->addThreadsFromPowerSession(this); + // resume boost + setSessionUclampMin(mDescriptor->current_min); + if (ATRACE_ENABLED()) { + traceSessionVal("active", mDescriptor->is_active.load()); + } + updateUniveralBoostMode(); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::close() { + bool sessionClosedExpectedToBe = false; + if (!mSessionClosed.compare_exchange_strong(sessionClosedExpectedToBe, true)) { + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + // Remove the session from PowerSessionManager first to avoid racing. + PowerSessionManager::getInstance()->removePowerSession(this); + mStaleTimerHandler->setSessionDead(); + mBoostTimerHandler->setSessionDead(); + setSessionUclampMin(0); + mDescriptor->is_active.store(false); + updateUniveralBoostMode(); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::updateTargetWorkDuration(int64_t targetDurationNanos) { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (targetDurationNanos <= 0) { + ALOGE("Error: targetDurationNanos(%" PRId64 ") should bigger than 0", targetDurationNanos); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + targetDurationNanos = + targetDurationNanos * HintManager::GetInstance()->GetAdpfProfile()->mTargetTimeFactor; + ALOGV("update target duration: %" PRId64 " ns", targetDurationNanos); + + mDescriptor->duration = std::chrono::nanoseconds(targetDurationNanos); + if (ATRACE_ENABLED()) { + traceSessionVal("target", mDescriptor->duration.count()); + } + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::reportActualWorkDuration( + const std::vector &actualDurations) { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (mDescriptor->duration.count() == 0LL) { + ALOGE("Expect to call updateTargetWorkDuration() first."); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (actualDurations.size() == 0) { + ALOGE("Error: duration.size() shouldn't be %zu.", actualDurations.size()); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + if (!mDescriptor->is_active.load()) { + ALOGE("Error: shouldn't report duration during pause state."); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile(); + mDescriptor->update_count++; + bool isFirstFrame = isTimeout(); + if (ATRACE_ENABLED()) { + traceSessionVal("batch_size", actualDurations.size()); + traceSessionVal("actl_last", actualDurations.back().durationNanos); + traceSessionVal("target", mDescriptor->duration.count()); + traceSessionVal("hint.count", mDescriptor->update_count); + traceSessionVal("hint.overtime", + actualDurations.back().durationNanos - mDescriptor->duration.count() > 0); + } + + mLastUpdatedTime.store(std::chrono::steady_clock::now()); + if (isFirstFrame) { + if (isAppSession()) { + tryToSendPowerHint("ADPF_FIRST_FRAME"); + } + updateUniveralBoostMode(); + } + + disableTemporaryBoost(); + + if (!adpfConfig->mPidOn) { + setSessionUclampMin(adpfConfig->mUclampMinHigh); + return ndk::ScopedAStatus::ok(); + } + + int64_t output = convertWorkDurationToBoostByPid(actualDurations); + + /* apply to all the threads in the group */ + int next_min = std::min(static_cast(adpfConfig->mUclampMinHigh), + mDescriptor->current_min + static_cast(output)); + next_min = std::max(static_cast(adpfConfig->mUclampMinLow), next_min); + setSessionUclampMin(next_min); + + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::sendHint(SessionHint hint) { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + disableTemporaryBoost(); + std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile(); + switch (hint) { + case SessionHint::CPU_LOAD_UP: + mNextUclampMin.store(mDescriptor->current_min); + mBoostTimerHandler->updateTimer(mDescriptor->duration * 2); + setSessionUclampMin(adpfConfig->mUclampMinHigh); + break; + case SessionHint::CPU_LOAD_DOWN: + setSessionUclampMin(adpfConfig->mUclampMinLow); + break; + case SessionHint::CPU_LOAD_RESET: + mNextUclampMin.store(std::max(adpfConfig->mUclampMinInit, + static_cast(mDescriptor->current_min))); + mBoostTimerHandler->updateTimer(duration_cast( + mDescriptor->duration * adpfConfig->mStaleTimeFactor / 2.0)); + setSessionUclampMin(adpfConfig->mUclampMinHigh); + break; + case SessionHint::CPU_LOAD_RESUME: + setSessionUclampMin(mDescriptor->current_min); + break; + default: + ALOGE("Error: hint is invalid"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + tryToSendPowerHint(toString(hint)); + mLastUpdatedTime.store(std::chrono::steady_clock::now()); + if (ATRACE_ENABLED()) { + mLastHintSent = static_cast(hint); + traceSessionVal("session_hint", static_cast(hint)); + } + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus PowerHintSession::setThreads(const std::vector &threadIds) { + if (mSessionClosed) { + ALOGE("Error: session is dead"); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE); + } + if (threadIds.size() == 0) { + LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size(); + return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); + } + + PowerSessionManager::getInstance()->removeThreadsFromPowerSession(this); + mDescriptor->threadIds.resize(threadIds.size()); + std::copy(threadIds.begin(), threadIds.end(), back_inserter(mDescriptor->threadIds)); + PowerSessionManager::getInstance()->addThreadsFromPowerSession(this); + // init boost + setSessionUclampMin(HintManager::GetInstance()->GetAdpfProfile()->mUclampMinInit); + return ndk::ScopedAStatus::ok(); +} + +std::string AppHintDesc::toString() const { + std::string out = + StringPrintf("session %" PRIxPTR "\n", reinterpret_cast(this) & 0xffff); + const int64_t durationNanos = duration.count(); + out.append(StringPrintf(" duration: %" PRId64 " ns\n", durationNanos)); + out.append(StringPrintf(" uclamp.min: %d \n", current_min)); + out.append(StringPrintf(" uid: %d, tgid: %d\n", uid, tgid)); + + out.append(" threadIds: ["); + bool first = true; + for (int tid : threadIds) { + if (!first) { + out.append(", "); + } + out.append(std::to_string(tid)); + first = false; + } + out.append("]\n"); + return out; +} + +bool PowerHintSession::isActive() { + return mDescriptor->is_active.load(); +} + +bool PowerHintSession::isTimeout() { + auto now = std::chrono::steady_clock::now(); + time_point staleTime = + mLastUpdatedTime.load() + + nanoseconds(static_cast( + mDescriptor->duration.count() * + HintManager::GetInstance()->GetAdpfProfile()->mStaleTimeFactor)); + return now >= staleTime; +} + +const std::vector &PowerHintSession::getTidList() const { + return mDescriptor->threadIds; +} + +bool PowerHintSession::disableTemporaryBoost() { + if (ATRACE_ENABLED()) { + if (mLastHintSent != -1) { + mLastHintSent = -1; + traceSessionVal("session_hint", -1); + } + } + + // replace temporary uclamp_min value with true min + std::optional trueMin = mNextUclampMin.load(); + if (trueMin.has_value()) { + std::lock_guard guard(mSessionLock); + mDescriptor->current_min = *trueMin; + mNextUclampMin.store(std::nullopt); + return true; + } + + return false; +} + +void PowerHintSession::setStale() { + // Make sure any temporary boost is disabled + disableTemporaryBoost(); + // Reset to default uclamp value. + PowerSessionManager::getInstance()->setUclampMin(this, 0); + // Deliver a task to check if all sessions are inactive. + updateUniveralBoostMode(); + if (ATRACE_ENABLED()) { + traceSessionVal("min", 0); + } +} + +void PowerHintSession::SessionTimerHandler::updateTimer(nanoseconds delay) { + mTimeout.store(steady_clock::now() + delay); + { + std::lock_guard guard(mMessageLock); + sp selfPtr = sp::fromExisting(this); + PowerHintMonitor::getInstance()->getLooper()->removeMessages(selfPtr); + PowerHintMonitor::getInstance()->getLooper()->sendMessageDelayed(delay.count(), selfPtr, + NULL); + } + if (ATRACE_ENABLED()) { + mSession->traceSessionVal(("timer." + mName).c_str(), 0); + } +} + +void PowerHintSession::SessionTimerHandler::handleMessage(const Message &) { + std::lock_guard guard(mClosedLock); + if (mIsSessionDead) { + return; + } + time_point now = steady_clock::now(); + int64_t next = (mTimeout.load() - now).count(); + if (next > 0) { + // Schedule for the stale timeout check. + std::lock_guard guard(mMessageLock); + sp selfPtr = sp::fromExisting(this); + PowerHintMonitor::getInstance()->getLooper()->removeMessages(selfPtr); + PowerHintMonitor::getInstance()->getLooper()->sendMessageDelayed(next, selfPtr, NULL); + } else { + onTimeout(); + } + if (ATRACE_ENABLED()) { + mSession->traceSessionVal(("timer." + mName).c_str(), next > 0 ? 0 : 1); + } +} + +void PowerHintSession::SessionTimerHandler::setSessionDead() { + std::lock_guard guard(mClosedLock); + mIsSessionDead = true; + PowerHintMonitor::getInstance()->getLooper()->removeMessages( + sp::fromExisting(this)); +} + +void PowerHintSession::StaleTimerHandler::updateTimer() { + SessionTimerHandler::updateTimer(duration_cast( + mSession->mDescriptor->duration * + HintManager::GetInstance()->GetAdpfProfile()->mStaleTimeFactor)); +} + +void PowerHintSession::StaleTimerHandler::onTimeout() { + mSession->setStale(); +} + +void PowerHintSession::BoostTimerHandler::onTimeout() { + if (mSession->disableTemporaryBoost()) { + mSession->setSessionUclampMin(mSession->getUclampMin(), false); + } +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerHintSession.h b/aidl/power-libperfmgr/PowerHintSession.h new file mode 100644 index 0000000..e1c2523 --- /dev/null +++ b/aidl/power-libperfmgr/PowerHintSession.h @@ -0,0 +1,157 @@ +/* + * Copyright 2021 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. + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using aidl::android::hardware::power::BnPowerHintSession; +using aidl::android::hardware::power::SessionHint; +using aidl::android::hardware::power::WorkDuration; +using ::android::Message; +using ::android::MessageHandler; +using ::android::sp; +using std::chrono::milliseconds; +using std::chrono::nanoseconds; +using std::chrono::steady_clock; +using std::chrono::time_point; + +struct AppHintDesc { + AppHintDesc(int32_t tgid, int32_t uid, std::vector threadIds) + : tgid(tgid), + uid(uid), + threadIds(std::move(threadIds)), + duration(0LL), + current_min(0), + is_active(true), + update_count(0), + integral_error(0), + previous_error(0) {} + std::string toString() const; + const int32_t tgid; + const int32_t uid; + std::vector threadIds; + nanoseconds duration; + int current_min; + // status + std::atomic is_active; + // pid + uint64_t update_count; + int64_t integral_error; + int64_t previous_error; +}; + +class PowerHintSession : public BnPowerHintSession { + public: + explicit PowerHintSession(int32_t tgid, int32_t uid, const std::vector &threadIds, + int64_t durationNanos); + ~PowerHintSession(); + ndk::ScopedAStatus close() override; + ndk::ScopedAStatus pause() override; + ndk::ScopedAStatus resume() override; + ndk::ScopedAStatus updateTargetWorkDuration(int64_t targetDurationNanos) override; + ndk::ScopedAStatus reportActualWorkDuration( + const std::vector &actualDurations) override; + ndk::ScopedAStatus sendHint(SessionHint hint) override; + ndk::ScopedAStatus setThreads(const std::vector &threadIds) override; + bool isActive(); + bool isTimeout(); + void setStale(); + // Is this hint session for a user application + bool isAppSession(); + const std::vector &getTidList() const; + int getUclampMin(); + void dumpToStream(std::ostream &stream); + + // Disable any temporary boost and return to normal operation. It does not + // reset the actual uclamp value, and relies on the caller to do so, to + // prevent double-setting. Returns true if it actually disabled an active boost + bool disableTemporaryBoost(); + + private: + class SessionTimerHandler : public MessageHandler { + public: + SessionTimerHandler(PowerHintSession *session, std::string name) + : mSession(session), mIsSessionDead(false), mName(name) {} + void updateTimer(nanoseconds delay); + void handleMessage(const Message &message) override; + void setSessionDead(); + virtual void onTimeout() = 0; + + protected: + PowerHintSession *mSession; + std::mutex mClosedLock; + std::mutex mMessageLock; + std::atomic> mTimeout; + bool mIsSessionDead; + const std::string mName; + }; + + class StaleTimerHandler : public SessionTimerHandler { + public: + StaleTimerHandler(PowerHintSession *session) : SessionTimerHandler(session, "stale") {} + void updateTimer(); + void onTimeout() override; + }; + + class BoostTimerHandler : public SessionTimerHandler { + public: + BoostTimerHandler(PowerHintSession *session) : SessionTimerHandler(session, "boost") {} + void onTimeout() override; + }; + + private: + void updateUniveralBoostMode(); + int setSessionUclampMin(int32_t min, bool resetStale = true); + void tryToSendPowerHint(std::string hint); + int64_t convertWorkDurationToBoostByPid(const std::vector &actualDurations); + void traceSessionVal(char const *identifier, int64_t val) const; + AppHintDesc *mDescriptor = nullptr; + sp mStaleTimerHandler; + sp mBoostTimerHandler; + std::atomic> mLastUpdatedTime; + sp mPowerManagerHandler; + std::mutex mSessionLock; + std::atomic mSessionClosed = false; + std::string mIdString; + // Used when setting a temporary boost value to hold the true boost + std::atomic> mNextUclampMin; + // To cache the status of whether ADPF hints are supported. + std::unordered_map> mSupportedHints; + // Last session hint sent, used for logging + int mLastHintSent = -1; +}; + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerModeExtension.cpp b/aidl/power-libperfmgr/PowerModeExtension.cpp new file mode 100644 index 0000000..50c5a70 --- /dev/null +++ b/aidl/power-libperfmgr/PowerModeExtension.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 The LineageOS 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. + */ + +#include + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::aidl::android::hardware::power::Mode; + +bool isDeviceSpecificModeSupported(Mode type, bool* _aidl_return) { + (void) type; + (void) _aidl_return; + return false; +} + +bool setDeviceSpecificMode(Mode type, bool enabled) { + (void) type; + (void) enabled; + return false; +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerSessionManager.cpp b/aidl/power-libperfmgr/PowerSessionManager.cpp new file mode 100644 index 0000000..2d2aad2 --- /dev/null +++ b/aidl/power-libperfmgr/PowerSessionManager.cpp @@ -0,0 +1,262 @@ +/* + * Copyright 2021 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 "powerhal-libperfmgr" +#define ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL) + +#include "PowerSessionManager.h" + +#include +#include +#include +#include +#include +#include + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::android::perfmgr::AdpfConfig; +using ::android::perfmgr::HintManager; + +namespace { +/* there is no glibc or bionic wrapper */ +struct sched_attr { + __u32 size; + __u32 sched_policy; + __u64 sched_flags; + __s32 sched_nice; + __u32 sched_priority; + __u64 sched_runtime; + __u64 sched_deadline; + __u64 sched_period; + __u32 sched_util_min; + __u32 sched_util_max; +}; + +static int sched_setattr(int pid, struct sched_attr *attr, unsigned int flags) { + if (!HintManager::GetInstance()->GetAdpfProfile()->mUclampMinOn) { + ALOGV("PowerSessionManager:%s: skip", __func__); + return 0; + } + return syscall(__NR_sched_setattr, pid, attr, flags); +} + +static void set_uclamp_min(int tid, int min) { + static constexpr int32_t kMaxUclampValue = 1024; + min = std::max(0, min); + min = std::min(min, kMaxUclampValue); + + sched_attr attr = {}; + attr.size = sizeof(attr); + + attr.sched_flags = (SCHED_FLAG_KEEP_ALL | SCHED_FLAG_UTIL_CLAMP_MIN); + attr.sched_util_min = min; + + int ret = sched_setattr(tid, &attr, 0); + if (ret) { + if (errno == ESRCH) { + ALOGV("sched_setattr failed for thread %d, err=%d", tid, errno); + } else { + ALOGW("sched_setattr failed for thread %d, err=%d", tid, errno); + } + } +} +} // namespace + +void PowerSessionManager::updateHintMode(const std::string &mode, bool enabled) { + ALOGV("PowerSessionManager::updateHintMode: mode: %s, enabled: %d", mode.c_str(), enabled); + if (enabled && mode.compare(0, 8, "REFRESH_") == 0) { + if (mode.compare("REFRESH_120FPS") == 0) { + mDisplayRefreshRate = 120; + } else if (mode.compare("REFRESH_90FPS") == 0) { + mDisplayRefreshRate = 90; + } else if (mode.compare("REFRESH_60FPS") == 0) { + mDisplayRefreshRate = 60; + } + } + if (HintManager::GetInstance()->GetAdpfProfile()) { + HintManager::GetInstance()->SetAdpfProfile(mode); + } +} + +void PowerSessionManager::updateHintBoost(const std::string &boost, int32_t durationMs) { + ATRACE_CALL(); + ALOGV("PowerSessionManager::updateHintBoost: boost: %s, durationMs: %d", boost.c_str(), + durationMs); +} + +int PowerSessionManager::getDisplayRefreshRate() { + return mDisplayRefreshRate; +} + +void PowerSessionManager::addPowerSession(PowerHintSession *session) { + std::lock_guard guard(mLock); + mSessions.insert(session); + addThreadsFromPowerSessionLocked(session); +} + +void PowerSessionManager::removePowerSession(PowerHintSession *session) { + std::lock_guard guard(mLock); + mSessions.erase(session); + removeThreadsFromPowerSessionLocked(session); +} + +void PowerSessionManager::addThreadsFromPowerSession(PowerHintSession *session) { + std::lock_guard guard(mLock); + addThreadsFromPowerSessionLocked(session); +} + +void PowerSessionManager::addThreadsFromPowerSessionLocked(PowerHintSession *session) { + for (auto t : session->getTidList()) { + if (mTidSessionListMap[t].empty()) { + if (!SetTaskProfiles(t, {"ResetUclampGrp"})) { + ALOGW("Failed to set ResetUclampGrp task profile for tid:%d", t); + } + } + mTidSessionListMap[t].insert(session); + } +} + +void PowerSessionManager::removeThreadsFromPowerSession(PowerHintSession *session) { + std::lock_guard guard(mLock); + removeThreadsFromPowerSessionLocked(session); +} + +void PowerSessionManager::removeThreadsFromPowerSessionLocked(PowerHintSession *session) { + for (auto t : session->getTidList()) { + size_t cnt = mTidSessionListMap[t].erase(session); + if (cnt != 0 && mTidSessionListMap[t].empty()) { + if (!SetTaskProfiles(t, {"NoResetUclampGrp"})) { + ALOGW("Failed to set NoResetUclampGrp task profile for tid:%d", t); + } + } + } +} + +void PowerSessionManager::setUclampMin(PowerHintSession *session, int val) { + std::lock_guard guard(mLock); + setUclampMinLocked(session, val); +} + +void PowerSessionManager::setUclampMinLocked(PowerHintSession *session, int val) { + for (auto t : session->getTidList()) { + // Get thex max uclamp.min across sessions which include the tid. + int tidMax = 0; + for (PowerHintSession *s : mTidSessionListMap[t]) { + if (!s->isActive() || s->isTimeout()) + continue; + tidMax = std::max(tidMax, s->getUclampMin()); + } + set_uclamp_min(t, std::max(val, tidMax)); + } +} + +std::optional PowerSessionManager::isAnyAppSessionActive() { + std::lock_guard guard(mLock); + bool active = false; + for (PowerHintSession *s : mSessions) { + // session active and not stale is actually active. + if (s->isActive() && !s->isTimeout() && s->isAppSession()) { + active = true; + break; + } + } + if (active == mActive) { + return std::nullopt; + } else { + mActive = active; + } + + return active; +} + +void PowerSessionManager::handleMessage(const Message &) { + auto active = isAnyAppSessionActive(); + if (!active.has_value()) { + return; + } + if (active.value()) { + disableSystemTopAppBoost(); + } else { + enableSystemTopAppBoost(); + } +} + +void PowerSessionManager::dumpToFd(int fd) { + std::ostringstream dump_buf; + std::lock_guard guard(mLock); + dump_buf << "========== Begin PowerSessionManager ADPF list ==========\n"; + for (PowerHintSession *s : mSessions) { + s->dumpToStream(dump_buf); + dump_buf << " Tid:Ref["; + for (size_t i = 0, len = s->getTidList().size(); i < len; i++) { + int t = s->getTidList()[i]; + dump_buf << t << ":" << mTidSessionListMap[t].size(); + if (i < len - 1) { + dump_buf << ", "; + } + } + dump_buf << "]\n"; + } + dump_buf << "========== End PowerSessionManager ADPF list ==========\n"; + if (!::android::base::WriteStringToFd(dump_buf.str(), fd)) { + ALOGE("Failed to dump one of session list to fd:%d", fd); + } +} + +void PowerSessionManager::enableSystemTopAppBoost() { + if (HintManager::GetInstance()->IsHintSupported(kDisableBoostHintName)) { + ALOGV("PowerSessionManager::enableSystemTopAppBoost!!"); + HintManager::GetInstance()->EndHint(kDisableBoostHintName); + } +} + +void PowerSessionManager::disableSystemTopAppBoost() { + if (HintManager::GetInstance()->IsHintSupported(kDisableBoostHintName)) { + ALOGV("PowerSessionManager::disableSystemTopAppBoost!!"); + HintManager::GetInstance()->DoHint(kDisableBoostHintName); + } +} + +// =========== PowerHintMonitor implementation start from here =========== +void PowerHintMonitor::start() { + if (!isRunning()) { + run("PowerHintMonitor", ::android::PRIORITY_HIGHEST); + } +} + +bool PowerHintMonitor::threadLoop() { + while (true) { + mLooper->pollOnce(-1); + } + return true; +} + +sp PowerHintMonitor::getLooper() { + return mLooper; +} + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/PowerSessionManager.h b/aidl/power-libperfmgr/PowerSessionManager.h new file mode 100644 index 0000000..7c74039 --- /dev/null +++ b/aidl/power-libperfmgr/PowerSessionManager.h @@ -0,0 +1,116 @@ +/* + * Copyright 2021 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. + */ + +#pragma once + +#include +#include +#include + +#include +#include +#include + +#include "PowerHintSession.h" + +namespace aidl { +namespace google { +namespace hardware { +namespace power { +namespace impl { +namespace pixel { + +using ::android::Looper; +using ::android::Message; +using ::android::MessageHandler; +using ::android::Thread; +using ::android::perfmgr::HintManager; + +constexpr char kPowerHalAdpfDisableTopAppBoost[] = "vendor.powerhal.adpf.disable.hint"; + +class PowerSessionManager : public MessageHandler { + public: + // current hint info + void updateHintMode(const std::string &mode, bool enabled); + void updateHintBoost(const std::string &boost, int32_t durationMs); + int getDisplayRefreshRate(); + // monitoring session status + void addPowerSession(PowerHintSession *session); + void removePowerSession(PowerHintSession *session); + void addThreadsFromPowerSession(PowerHintSession *session); + void addThreadsFromPowerSessionLocked(PowerHintSession *session); + void removeThreadsFromPowerSession(PowerHintSession *session); + void removeThreadsFromPowerSessionLocked(PowerHintSession *session); + void setUclampMin(PowerHintSession *session, int min); + void setUclampMinLocked(PowerHintSession *session, int min); + void handleMessage(const Message &message) override; + void dumpToFd(int fd); + + // Singleton + static sp getInstance() { + static sp instance = new PowerSessionManager(); + return instance; + } + + private: + std::optional isAnyAppSessionActive(); + void disableSystemTopAppBoost(); + void enableSystemTopAppBoost(); + const std::string kDisableBoostHintName; + + std::unordered_set mSessions; // protected by mLock + std::unordered_map> mTidSessionListMap; + bool mActive; // protected by mLock + /** + * mLock to pretect the above data objects opertions. + **/ + std::mutex mLock; + int mDisplayRefreshRate; + // Singleton + PowerSessionManager() + : kDisableBoostHintName(::android::base::GetProperty(kPowerHalAdpfDisableTopAppBoost, + "ADPF_DISABLE_TA_BOOST")), + mActive(false), + mDisplayRefreshRate(60) {} + PowerSessionManager(PowerSessionManager const &) = delete; + void operator=(PowerSessionManager const &) = delete; +}; + +class PowerHintMonitor : public Thread { + public: + void start(); + bool threadLoop() override; + sp getLooper(); + // Singleton + static sp getInstance() { + static sp instance = new PowerHintMonitor(); + return instance; + } + PowerHintMonitor(PowerHintMonitor const &) = delete; + void operator=(PowerHintMonitor const &) = delete; + + private: + sp mLooper; + // Singleton + PowerHintMonitor() : Thread(false), mLooper(new Looper(true)) {} +}; + +} // namespace pixel +} // namespace impl +} // namespace power +} // namespace hardware +} // namespace google +} // namespace aidl diff --git a/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc b/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc new file mode 100644 index 0000000..5eaae37 --- /dev/null +++ b/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc @@ -0,0 +1,32 @@ +service vendor.power-hal-aidl /vendor/bin/hw/android.hardware.power-service.spaced-libperfmgr + class hal + user root + group system + priority -20 + +on late-fs + start vendor.power-hal-aidl + +# Restart powerHAL when framework died +on property:init.svc.zygote=restarting && property:vendor.powerhal.state=* + setprop vendor.powerhal.state "" + setprop vendor.powerhal.audio "" + setprop vendor.powerhal.rendering "" + restart vendor.power-hal-aidl + +# Clean up after b/163539793 resolved +on property:vendor.powerhal.dalvik.vm.dex2oat-threads=* + setprop dalvik.vm.dex2oat-threads ${vendor.powerhal.dalvik.vm.dex2oat-threads} + setprop dalvik.vm.restore-dex2oat-threads ${vendor.powerhal.dalvik.vm.dex2oat-threads} + +on property:vendor.powerhal.dalvik.vm.dex2oat-cpu-set=* + setprop dalvik.vm.dex2oat-cpu-set ${vendor.powerhal.dalvik.vm.dex2oat-cpu-set} + setprop dalvik.vm.restore-dex2oat-cpu-set ${vendor.powerhal.dalvik.vm.dex2oat-cpu-set} + +# Restart powerHAL when debug property set +on property:ro.debuggable=1 && property:vendor.powerhal.config.debug=* + restart vendor.power-hal-aidl + +on property:persist.vendor.powerhal.config.debug=* + setprop vendor.powerhal.config.debug ${persist.vendor.powerhal.config.debug} + diff --git a/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml b/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml new file mode 100644 index 0000000..f5dd6b9 --- /dev/null +++ b/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml @@ -0,0 +1,7 @@ + + + android.hardware.power + 4 + IPower/default + + diff --git a/aidl/power-libperfmgr/service.cpp b/aidl/power-libperfmgr/service.cpp new file mode 100644 index 0000000..3babb06 --- /dev/null +++ b/aidl/power-libperfmgr/service.cpp @@ -0,0 +1,83 @@ +/* + * 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 "powerhal-libperfmgr" + +#include +#include +#include +#include +#include +#include + +#include + +#include "Power.h" +#include "PowerExt.h" +#include "PowerSessionManager.h" + +using aidl::google::hardware::power::impl::pixel::Power; +using aidl::google::hardware::power::impl::pixel::PowerExt; +using aidl::google::hardware::power::impl::pixel::PowerHintMonitor; +using aidl::google::hardware::power::impl::pixel::PowerSessionManager; +using ::android::perfmgr::HintManager; + +constexpr std::string_view kPowerHalInitProp("vendor.powerhal.init"); + +int main() { + // Parse config but do not start the looper + std::shared_ptr hm = HintManager::GetInstance(); + if (!hm) { + LOG(FATAL) << "HintManager Init failed"; + } + + // single thread + ABinderProcess_setThreadPoolMaxThreadCount(0); + + // core service + std::shared_ptr pw = ndk::SharedRefBase::make(); + ndk::SpAIBinder pwBinder = pw->asBinder(); + AIBinder_setMinSchedulerPolicy(pwBinder.get(), SCHED_NORMAL, -20); + + // extension service + std::shared_ptr pwExt = ndk::SharedRefBase::make(); + auto pwExtBinder = pwExt->asBinder(); + AIBinder_setMinSchedulerPolicy(pwExtBinder.get(), SCHED_NORMAL, -20); + + // attach the extension to the same binder we will be registering + CHECK(STATUS_OK == AIBinder_setExtension(pwBinder.get(), pwExt->asBinder().get())); + + const std::string instance = std::string() + Power::descriptor + "/default"; + binder_status_t status = AServiceManager_addService(pw->asBinder().get(), instance.c_str()); + CHECK(status == STATUS_OK); + LOG(INFO) << "spaced Power HAL AIDL Service with Extension is started."; + + if (HintManager::GetInstance()->GetAdpfProfile()) { + PowerHintMonitor::getInstance()->start(); + } + + std::thread initThread([&]() { + ::android::base::WaitForProperty(kPowerHalInitProp.data(), "1"); + HintManager::GetInstance()->Start(); + }); + initThread.detach(); + + ABinderProcess_joinThreadPool(); + + // should not reach + LOG(ERROR) << "spaced Power HAL AIDL Service with Extension just died."; + return EXIT_FAILURE; +} diff --git a/lineage_spaced.mk b/aosp_spaced.mk similarity index 78% rename from lineage_spaced.mk rename to aosp_spaced.mk index e90938c..3f89f92 100644 --- a/lineage_spaced.mk +++ b/aosp_spaced.mk @@ -5,16 +5,18 @@ # # Inherit from those products. Most specific first. -$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) +$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk) # Inherit from device makefile. $(call inherit-product, device/realme/spaced/device.mk) -# Inherit some common LineageOS stuff. -$(call inherit-product, vendor/lineage/config/common_full_phone.mk) +# Inherit some common PixelOS stuff. +$(call inherit-product, vendor/aosp/config/common_full_phone.mk) -PRODUCT_NAME := lineage_spaced + + +PRODUCT_NAME := aosp_spaced PRODUCT_DEVICE := spaced PRODUCT_MANUFACTURER := Realme PRODUCT_BRAND := Realme diff --git a/com.android.vndk.current.on_vendor.apex b/com.android.vndk.current.on_vendor.apex new file mode 100644 index 0000000..5161b40 Binary files /dev/null and b/com.android.vndk.current.on_vendor.apex differ diff --git a/configs/perf/power_app_cfg.xml b/configs/perf/power_app_cfg.xml deleted file mode 100644 index b2fad18..0000000 --- a/configs/perf/power_app_cfg.xml +++ /dev/null @@ -1,627 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/configs/perf/powercontable.xml b/configs/perf/powercontable.xml deleted file mode 100644 index 55a3526..0000000 --- a/configs/perf/powercontable.xml +++ /dev/null @@ -1,763 +0,0 @@ - - - - - more - 100 - -100 - - - - more - 100 - 0 - 0 - - - - more - 100 - -100 - 0 - - - - more - 100 - -100 - - - - less - 20 - 1 - - - - more - 20 - 1 - - - - less - 100 - 0 - 40 - - - - less - 2 - 0 - -1 - - - - more - 1 - 0 - 0 - 3^ - - - - more - 1 - 0 - 0 - 1^ - - - - more - 15 - 0 - 0 - - - - more - 100 - 0 - 0 - - - - more - 2 - 0 - - - - less - 10000000 - 0 - 200000 - - - - more - 1 - 0 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 15 - 0 - 0 - - - - more - 101 - -1 - 0 - - - - more - 1 - 0 - 0 - - - - more - 100000000 - 0 - -1 - - - - less - 1 - 0 - -1 - - - - more - 6553599 - 1 - 130 - - - - more - 60 - 0 - - - - more - 100 - 0 - - - - more - 2 - 0 - 2 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 1 - 0 - - - - more - 15 - 0 - - - - more - 1 - 0 - - - - more - 10 - 0 - - - - more - 1 - 0 - - - - more - 1000000 - 33 - - - - more - 1 - 0 - 1 - cm_mgr_perf_enable^ - 1 - - - - more - 1 - 0 - 0 - cm_mgr_camera_enable^ - - - - more - 100 - 0 - 0 - cpu_power_ratio_up_x^3^ - - - - more - 100 - 0 - 0 - cpu_power_ratio_up_x^4^ - - - - more - 1 - 0 - CAM^ - 1 - - - - less - 15 - 0 - 2 - touch_opp^ - - - - less - 15 - -2 - -1 - cluster_opp^0^ - - - - less - 15 - -2 - -1 - cluster_opp^1^ - - - - more - 2000000000 - 10000000 - 200000000 - duration^ - - - - more - 1000000 - 0 - 100000 - active_time^ - - - - more - 100 - 0 - 80 - eas_boost^ - - - - less - 6000000 - 0 - 600000 - time_to_last_touch^ - - - - more - 1 - 0 - 1 - deboost_when_render^ - - - - less - 4000000 - 0 - -1 - - - - more - 2000000000 - 0 - - - - more - 100 - 0 - - - - more - 2000000000 - -1 - 798 - - - - more - 25855 - 0 - 4 - - - - more - 32767 - 1 - - - - more - 32767 - 1 - - - - less - 1 - 0 - - - - more - 32767 - 8 - - - - more - 32768 - 1 - - - - more - 32768 - 1 - - - - more - 15 - 0 - - - - more - 15 - 0 - - - - more - 1 - 0 - - - - more - 32767 - 0 - - - - more - 32767 - 0 - - - - more - 16000000 - 0 - - - - more - 100 - 0 - - - - more - 2 - 0 - - - - more - 100 - 0 - 0 - - - - more - 2 - 0 - - - - more - 100 - 0 - 0 - - - - more - 2 - 0 - 0 - - - - more - 20 - 2 - 10 - - - - more - 50 - 0 - 0 - - - - more - 1 - 0 - 0 - - - - more - 1000000000 - 0 - 1000000000 - - - - more - 1 - 0 - 0 - - - - more - 9 - 1 - 5 - - - - more - 1 - 0 - - - - more - 1 - 0 - - - - more - 10000 - 500 - - - - more - 15 - 1 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 500 - 10 - - - - more - 1 - 0 - 1 - - - - more - 100 - 0 - - - - more - 50000000 - -50000000 - - - - less - 3000000 - 0 - -1 - - - - less - 1 - 0 - 0 - - - - more - 1 - 0 - 0 - 1 - - - - more - 1 - 0 - - - - more - 1 - 0 - - - - more - 2 - 0 - 2 - - - - less - 1 - 0 - - - - less - 1 - 0 - - - - less - 100 - -100 - - - - more - 100 - 0 - - - - more - 200 - 0 - - - - less - 100 - -100 - - - - more - 100 - 0 - - - - more - 200 - 0 - - - - less - 100 - -100 - - - - more - 100 - 0 - - - - more - 200 - 0 - - - - more - 200 - 0 - - - - more - 200 - 0 - - - - more - 200 - 0 - - - - more - 200 - 0 - - - - more - 6000 - -6000 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 100 - 0 - - - - more - 65535 - 0 - - \ No newline at end of file diff --git a/configs/perf/powerscntbl.xml b/configs/perf/powerscntbl.xml deleted file mode 100644 index f9ebaf2..0000000 --- a/configs/perf/powerscntbl.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/configs/power/powerhint.json b/configs/power/powerhint.json new file mode 100644 index 0000000..e53c900 --- /dev/null +++ b/configs/power/powerhint.json @@ -0,0 +1,522 @@ +{ + "Nodes": [ + { + "Name": "CPULittleClusterMaxFreq", + "Path": "/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq", + "Values": [ + "9999999", + "2000000", + "1933000", + "1866000", + "1800000", + "1733000", + "1666000", + "1618000", + "1500000", + "1375000", + "1275000", + "1175000", + "1075000", + "975000", + "875000", + "774000", + "500000" + ], + "DefaultIndex": 0, + "ResetOnInit": true + }, + { + "Name": "CPULittleClusterMinFreq", + "Path": "/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq", + "Values": [ + "2000000", + "1933000", + "1866000", + "1800000", + "1733000", + "1666000", + "1618000", + "1500000", + "1375000", + "1275000", + "1175000", + "1075000", + "975000", + "875000", + "774000", + "500000", + ], + "ResetOnInit": true + }, + { + "Name": "CPUBigClusterMaxFreq", + "Path": "/sys/devices/system/cpu/cpufreq/policy6/scaling_max_freq", + "Values": [ + "9999999", + "2050000", + "1986000", + "1923000", + "1860000", + "1796000", + "1733000", + "1670000", + "1530000", + "1419000", + "1308000", + "1169000", + "1085000", + "1002000", + "919000", + "835000", + "774000" + ], + "DefaultIndex": 0, + "ResetOnInit": true + }, + { + "Name": "CPUBigClusterMinFreq", + "Path": "/sys/devices/system/cpu/cpufreq/policy6/scaling_min_freq", + "Values": [ + "2050000", + "1986000", + "1923000", + "1860000", + "1796000", + "1733000", + "1670000", + "1530000", + "1419000", + "1308000", + "1169000", + "1085000", + "1002000", + "919000", + "835000", + "774000", + ], + "ResetOnInit": true + }, + { + "Name": "GPUMinFreq", + "Path": "/sys/kernel/gpu/gpu_min_clock", + "Values": [ + "950000", + "940000", + "930000", + "920000", + "910000", + "900000", + "890000", + "880000", + "870000", + "860000", + "850000", + "840000", + "830000", + "820000", + "810000", + "800000", + "790000", + "775000", + "761000", + "746000", + "732000", + "718000", + "703000", + "689000", + "675000", + "660000", + "646000", + "631000", + "617000", + "603000", + "588000", + "574000", + "560000", + "543000", + "527000", + "511000", + "495000", + "478000", + "462000", + "446000", + "430000", + "413000", + "397000", + "381000", + "365000", + "348000", + "332000", + "316000", + "300000" + ], + "ResetOnInit": true + }, + { + "Name": "GPUMaxFreq", + "Path": "/sys/kernel/gpu/gpu_max_clock", + "Values": [ + "950000", + "940000", + "930000", + "920000", + "910000", + "900000", + "890000", + "880000", + "870000", + "860000", + "850000", + "840000", + "830000", + "820000", + "810000", + "800000", + "790000", + "775000", + "761000", + "746000", + "732000", + "718000", + "703000", + "689000", + "675000", + "660000", + "646000", + "631000", + "617000", + "603000", + "588000", + "574000", + "560000", + "543000", + "527000", + "511000", + "495000", + "478000", + "462000", + "446000", + "430000", + "413000", + "397000", + "381000", + "365000", + "348000", + "332000", + "316000", + "300000" + ], + "DefaultIndex": 0, + "ResetOnInit": true + }, + { + "Name": "GPUSchedMode", + "Path": "/sys/devices/platform/13000000.mali/js_ctx_scheduling_mode", + "Values": [ + "0", + "1" + ], + "DefaultIndex": 0, + "ResetOnInit": true + }, + { + "Name": "GPUSchedPeriod", + "Path": "/sys/devices/platform/13000000.mali/js_scheduling_period", + "Values": [ + "100", + "75", + "50", + "0" + ], + "ResetOnInit": true, + "DefaultIndex": 0 + }, + { + "Name": "GPUDVFSInterval", + "Path": "/sys/devices/platform/13000000.mali/dvfs_period", + "Values": [ + "100", + "75", + "50" + ], + "ResetOnInit": true, + "DefaultIndex": 0 + }, + { + "Name": "FGUclampMin", + "Path": "/dev/cpuctl/foreground/cpu.uclamp.min", + "Values": [ + "100", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampMin", + "Path": "/dev/cpuctl/top-app/cpu.uclamp.min", + "Values": [ + "100", + "50", + "10" + ], + "ResetOnInit": true + }, + { + "Name": "TAUclampLatency", + "Path": "/dev/cpuctl/top-app/cpu.uclamp.latency_sensitive", + "Values": [ + "1", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "CDUclampMin", + "Path": "/dev/cpuctl/camera-daemon/cpu.uclamp.min", + "Values": [ + "100", + "0" + ], + "ResetOnInit": true + }, + { + "Name": "DRAMOppMin", + "Path": "/proc/perfmgr/boost_ctrl/dram_ctrl/ddr", + "Values": [ + "1", + "-1" + ], + "ResetOnInit": true + }, + { + "Name": "CCIFreqMode", + "Path": "/proc/cpufreq/cpufreq_cci_mode", + "Values": [ + "0", + "1" + ], + "ResetOnInit": true, + "DefaultIndex": 0 + }, + { + "Name": "PowerHALMainState", + "Path": "vendor.powerhal.state", + "Values": ["SUSTAINED_PERFORMANCE", ""], + "Type": "Property" + }, + { + "Name": "PowerHALAudioState", + "Path": "vendor.powerhal.audio", + "Values": ["AUDIO_STREAMING_LOW_LATENCY", ""], + "Type": "Property" + }, + { + "Name": "PowerHALRenderingState", + "Path": "vendor.powerhal.rendering", + "Values": ["EXPENSIVE_RENDERING", ""], + "Type": "Property" + }, + { + "Name": "DoubleTapToWakeEnable", + "Path": "/proc/touchpanel/double_tap_enable", + "Values": [ + "1", + "0" + ] + } + ], + "Actions": [ + { + "PowerHint": "SUSTAINED_PERFORMANCE", + "Node": "PowerHALMainState", + "Duration": 0, + "Value": "SUSTAINED_PERFORMANCE" + }, + { + "PowerHint": "SUSTAINED_PERFORMANCE", + "Node": "CPUBigClusterMaxFreq", + "Duration": 0, + "Value": "2050000" + }, + { + "PowerHint": "SUSTAINED_PERFORMANCE", + "Node": "CPULittleClusterMaxFreq", + "Duration": 0, + "Value": "2000000" + }, + { + "PowerHint": "SUSTAINED_PERFORMANCE", + "Node": "GPUSchedMode", + "Duration": 0, + "Value": "1" + }, + { + "PowerHint": "AUDIO_STREAMING_LOW_LATENCY", + "Node": "PowerHALAudioState", + "Duration": 0, + "Value": "AUDIO_STREAMING_LOW_LATENCY" + }, + { + "PowerHint": "AUDIO_STREAMING_LOW_LATENCY", + "Node": "CPULittleClusterMinFreq", + "Duration": 0, + "Value": "875000" + }, + { + "PowerHint": "AUDIO_STREAMING_LOW_LATENCY", + "Node": "CPUBigClusterMinFreq", + "Duration": 0, + "Value": "835000" + }, + { + "PowerHint": "INTERACTION", + "Node": "CPULittleClusterMaxFreq", + "Duration": 0, + "Value": "9999999" + }, + { + "PowerHint": "INTERACTION", + "Node": "CPULittleClusterMinFreq", + "Duration": 0, + "Value": "1375000" + }, + { + "PowerHint": "INTERACTION", + "Node": "CPUBigClusterMaxFreq", + "Duration": 0, + "Value": "9999999" + }, + { + "PowerHint": "INTERACTION", + "Node": "CPUBigClusterMinFreq", + "Duration": 0, + "Value": "1419000" + }, + { + "PowerHint": "INTERACTION", + "Node": "TAUclampMin", + "Duration": 0, + "Value": "50" + }, + { + "PowerHint": "INTERACTION", + "Node": "CCIFreqMode", + "Duration": 0, + "Value": "1" + }, + { + "PowerHint": "INTERACTION", + "Node": "TAUclampLatency", + "Duration": 0, + "Value": "1" + }, + { + "PowerHint": "LAUNCH", + "Node": "CPUBigClusterMaxFreq", + "Duration": 3000, + "Value": "9999999" + }, + { + "PowerHint": "LAUNCH", + "Node": "CPUBigClusterMinFreq", + "Duration": 3000, + "Value": "2050000" + }, + { + "PowerHint": "LAUNCH", + "Node": "CPULittleClusterMaxFreq", + "Duration": 3000, + "Value": "9999999" + }, + { + "PowerHint": "LAUNCH", + "Node": "CPULittleClusterMinFreq", + "Duration": 3000, + "Value": "2000000" + }, + { + "PowerHint": "LAUNCH", + "Node": "FGUclampMin", + "Duration": 3000, + "Value": "100" + }, + { + "PowerHint": "LAUNCH", + "Node": "TAUclampMin", + "Duration": 3000, + "Value": "100" + }, + { + "PowerHint": "LAUNCH", + "Node": "DRAMOppMin", + "Duration": 3000, + "Value": "1" + }, + { + "PowerHint": "CAMERA_LAUNCH", + "Node": "CDUclampMin", + "Duration": 1000, + "Value": "100" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "PowerHALRenderingState", + "Duration": 0, + "Value": "EXPENSIVE_RENDERING" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "GPUMinFreq", + "Duration": 0, + "Value": "920000000" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "GPUMaxFreq", + "Duration": 0, + "Value": "950000000" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "GPUSchedPeriod", + "Duration": 0, + "Value": "100" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "GPUDVFSInterval", + "Duration": 0, + "Value": "75" + }, + { + "PowerHint": "EXPENSIVE_RENDERING", + "Node": "GPUSchedMode", + "Duration": 0, + "Value": "1" + }, + { + "PowerHint": "DOUBLE_TAP_TO_WAKE", + "Node": "DoubleTapToWakeEnable", + "Duration": 0, + "Value": "1" + } + { + "PowerHint": "Flipendo", + "Node": "CPULittleClusterMaxFreq", + "Duration": 0, + "Value": "1500000" + }, + { + "PowerHint": "Flipendo", + "Node": "CPUBigClusterMaxFreq", + "Duration": 0, + "Value": "1670000" + }, + { + "PowerHint": "DISPLAY_INACTIVE", + "Node": "TAUclampMin", + "Duration": 0, + "Value": "0" + } + ] +} \ No newline at end of file diff --git a/device.mk b/device.mk index 183f40b..e268204 100644 --- a/device.mk +++ b/device.mk @@ -7,9 +7,6 @@ # Installs gsi keys into ramdisk, to boot a developer GSI with verified boot. $(call inherit-product, $(SRC_TARGET_DIR)/product/developer_gsi_keys.mk) -# Enable updating of APEXes -$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk) - # Dalvik VM Configuration $(call inherit-product, frameworks/native/build/phone-xhdpi-4096-dalvik-heap.mk) @@ -67,6 +64,10 @@ PRODUCT_COPY_FILES += \ frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \ frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml +# Apex +PRODUCT_COPY_FILES += \ + $(LOCAL_PATH)/com.android.vndk.current.on_vendor.apex:$(TARGET_COPY_OUT_VENDOR)/apex/com.android.vndk.current.on_vendor.apex + # Biometrics PRODUCT_PACKAGES += \ android.hardware.biometrics.fingerprint@2.3-service.oplus @@ -89,16 +90,28 @@ PRODUCT_PACKAGES += \ android.hardware.camera.provider@2.4.vendor \ android.hardware.camera.provider@2.5.vendor \ android.hardware.camera.provider@2.6.vendor \ - libcamera2ndk_vendor + libcamera2ndk_vendor \ + libexpat.vendor:64 \ + libpng.vendor:64 PRODUCT_PACKAGES += \ - libcamera_metadata_shim + libshim_camera_metadata # Cgroup PRODUCT_COPY_FILES += \ system/core/libprocessgroup/profiles/cgroups_30.json:$(TARGET_COPY_OUT_VENDOR)/etc/cgroups.json \ $(LOCAL_PATH)/configs/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json +# Dex/ART optimization +PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false +PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER := everything +PRODUCT_MINIMIZE_JAVA_DEBUG_INFO := true +USE_DEX2OAT_DEBUG := false +DONT_DEXPREOPT_PREBUILTS := true +# Enable whole-program R8 Java optimizations for SystemUI and system_server +SYSTEM_OPTIMIZE_JAVA := true +SYSTEMUI_OPTIMIZE_JAVA := true + # Display PRODUCT_PACKAGES += \ android.hardware.graphics.allocator@2.0.vendor \ @@ -111,7 +124,9 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.composer@2.3-service \ android.hardware.memtrack-service.mediatek-mali \ libdrm.vendor \ - libdrm + libdrm \ + libion.vendor \ + libui.vendor # Doze PRODUCT_PACKAGES += \ @@ -143,7 +158,8 @@ PRODUCT_PACKAGES += \ # Gatekeeper PRODUCT_PACKAGES += \ android.hardware.gatekeeper@1.0-service \ - android.hardware.gatekeeper@1.0-impl + android.hardware.gatekeeper@1.0-impl \ + libgatekeeper.vendor:64 # GNSS PRODUCT_PACKAGES += \ @@ -153,7 +169,8 @@ PRODUCT_PACKAGES += \ android.hardware.gnss@1.0.vendor \ android.hardware.gnss@1.1.vendor \ android.hardware.gnss@2.0.vendor \ - android.hardware.gnss@2.1.vendor + android.hardware.gnss@2.1.vendor \ + libcurl.vendor PRODUCT_PACKAGES += \ android.hardware.gnss-service.mediatek @@ -161,7 +178,9 @@ PRODUCT_PACKAGES += \ # Health PRODUCT_PACKAGES += \ android.hardware.health-service.mediatek \ - android.hardware.health-service.mediatek-recovery + android.hardware.health-service.mediatek-recovery \ + libhwbinder.vendor \ + libhidlmemory.vendor:64 # HIDL PRODUCT_PACKAGES += \ @@ -182,6 +201,9 @@ PRODUCT_BOOT_JARS += \ mediatek-telephony-base \ mediatek-telephony-common +PRODUCT_PACKAGES += \ + libshim_sink + PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/configs/permissions/privapp-permissions-mediatek.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/privapp-permissions-mediatek.xml @@ -204,20 +226,13 @@ PRODUCT_PACKAGES += \ libpuresoftkeymasterdevice.vendor:64 \ libsoft_attestation_cert.vendor:64 \ libkeystore-wifi-hidl \ - libkeystore-engine-wifi-hidl + libkeystore-engine-wifi-hidl \ + libnetutils.vendor:64 # Lights PRODUCT_PACKAGES += \ android.hardware.light-service.spaced -# Lineage Health -PRODUCT_PACKAGES += \ - vendor.lineage.health-service.default - -# LiveDisplay -PRODUCT_PACKAGES += \ - vendor.lineage.livedisplay@2.1-service-spaced - # Vendor Log Tag include $(LOCAL_PATH)/vendor_logtag.mk @@ -225,7 +240,7 @@ include $(LOCAL_PATH)/vendor_logtag.mk PRODUCT_PACKAGES += \ libcodec2_hidl@1.1.vendor \ libcodec2_hidl@1.2.vendor \ - libavservices_minijail_vendor \ + libavservices_minijail.vendor \ libstagefright_softomx_plugin.vendor \ libsfplugin_ccodec_utils.vendor \ libcodec2_soft_common.vendor @@ -281,13 +296,15 @@ PRODUCT_COPY_FILES += \ # Overlays PRODUCT_ENFORCE_RRO_TARGETS := * -DEVICE_PACKAGE_OVERLAYS += \ - $(LOCAL_PATH)/overlay - PRODUCT_PACKAGES += \ - WifiOverlay \ - TetheringConfigOverlay \ - CarrierConfigOverlay + FrameworksResOverlaySpaced \ + SettingsOverlaySpaced \ + SystemUIOverlaySpaced \ + TelephonyOverlaySpaced \ + WifiResOverlaySpaced \ + TetheringResOverlaySpaced \ + CarrierConfigOverlaySpaced \ + OplusDozeOverlaySpaced # Permissions PRODUCT_COPY_FILES += \ @@ -339,19 +356,22 @@ PRODUCT_PACKAGES += \ # Power PRODUCT_PACKAGES += \ - android.hardware.power-service-mediatek \ - android.hardware.power@1.0.vendor \ - android.hardware.power@1.1.vendor \ + android.hardware.power-service.spaced-libperfmgr \ android.hardware.power@1.2.vendor \ - android.hardware.power-V2-ndk_platform.vendor \ + vendor.mediatek.hardware.mtkpower@1.2-service.stub + +PRODUCT_PACKAGES += \ vendor.mediatek.hardware.mtkpower@1.0.vendor \ vendor.mediatek.hardware.mtkpower@1.1.vendor \ vendor.mediatek.hardware.mtkpower@1.2.vendor +PRODUCT_PACKAGES += \ + libmtkperf_client_vendor \ + libmtkperf_client + PRODUCT_COPY_FILES += \ - $(LOCAL_PATH)/configs/perf/power_app_cfg.xml:$(TARGET_COPY_OUT_VENDOR)/etc/power_app_cfg.xml \ - $(LOCAL_PATH)/configs/perf/powercontable.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powercontable.xml \ - $(LOCAL_PATH)/configs/perf/powerscntbl.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powerscntbl.xml + $(LOCAL_PATH)/configs/power/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json + # Public libraries PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/configs/public.libraries.txt:$(TARGET_COPY_OUT_VENDOR)/etc/public.libraries.txt @@ -370,20 +390,14 @@ PRODUCT_PACKAGES += \ android.hardware.radio@1.5.vendor \ android.hardware.radio@1.6.vendor -# RCS -PRODUCT_PACKAGES += \ - com.android.ims.rcsmanager \ - RcsService \ - PresencePolling - # Rootdir PRODUCT_PACKAGES += \ fstab.mt6781 \ fstab.mt6781_ramdisk \ - init.cgroup.rc \ init.connectivity.rc \ init.modem.rc \ init.mt6781.rc \ + init.mt6781.power.rc \ init.mt6781.usb.rc \ init.project.rc \ init.sensor_1_0.rc \ @@ -408,6 +422,8 @@ PRODUCT_PACKAGES += \ android.frameworks.sensorservice@1.0 \ android.frameworks.sensorservice@1.0.vendor \ android.hardware.sensors@2.0-service-multihal.spaced \ + libdumpstateutil.vendor \ + libpower.vendor:64 \ libsensorndkbridge PRODUCT_COPY_FILES += \ @@ -421,19 +437,21 @@ PRODUCT_PACKAGES += \ PRODUCT_SOONG_NAMESPACES += \ $(LOCAL_PATH) \ hardware/mediatek \ + hardware/oplus # Thermal PRODUCT_PACKAGES += \ android.hardware.thermal@2.0.vendor \ android.hardware.thermal@1.0-impl -# Touch -PRODUCT_PACKAGES += \ - vendor.lineage.touch@1.0-service.oplus - # USB PRODUCT_PACKAGES += \ - android.hardware.usb@1.3-service-mediatekv2 + android.hardware.usb@1.0.vendor \ + android.hardware.usb@1.1.vendor \ + android.hardware.usb@1.2.vendor \ + android.hardware.usb@1.3.vendor \ + android.hardware.usb.gadget@1.0.vendor \ + android.hardware.usb.gadget@1.1.vendor # Vendor service manager PRODUCT_PACKAGES += \ @@ -453,15 +471,22 @@ PRODUCT_COPY_FILES += \ prebuilts/vndk/v33/arm64/arch-arm-armv8-a/shared/vndk-core/libstagefright_foundation.so:$(TARGET_COPY_OUT_VENDOR)/lib/libstagefright_foundation-v33.so \ prebuilts/vndk/v33/arm64/arch-arm64-armv8-a/shared/vndk-core/libstagefright_foundation.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libstagefright_foundation-v33.so +PRODUCT_PACKAGES += \ + libunwindstack.vendor \ + libutilscallstack.vendor + +PRODUCT_PACKAGES += \ + libshim_ui + # Wi-Fi PRODUCT_PACKAGES += \ android.hardware.tetheroffload.config@1.0.vendor \ android.hardware.tetheroffload.control@1.0.vendor \ android.hardware.tetheroffload.control@1.1.vendor \ - android.hardware.wifi-service-lazy \ + android.hardware.wifi-service \ wpa_supplicant \ hostapd \ - libwifi-hal-mt66xx + libwifi-hal-wrapper PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/configs/wifi/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant_overlay.conf \ diff --git a/extract-files.sh b/extract-files.sh index 3d0c8cb..1aeae28 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -52,7 +52,7 @@ done function blob_fixup { case "$1" in vendor/lib64/hw/android.hardware.camera.provider@2.6-impl-mediatek.so) - grep -q "libcamera_metadata_shim.so" "${2}" || "${PATCHELF}" --add-needed "libcamera_metadata_shim.so" "${2}" + grep -q libshim_camera_metadata.so "$2" || "$PATCHELF" --add-needed libshim_camera_metadata.so "$2" ;; vendor/lib/hw/vendor.mediatek.hardware.pq@2.15-impl.so) ;& @@ -64,7 +64,7 @@ function blob_fixup { "${PATCHELF}" --replace-needed "libssl.so" "libssl-v32.so" "${2}" ;; vendor/lib*/libmtkcam_stdutils.so) - "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "$2" + "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "${2}" ;; vendor/etc/init/android.hardware.bluetooth@1.1-service-mediatek.rc) sed -i '/vts/Q' "$2" @@ -82,10 +82,23 @@ function blob_fixup { ;; vendor/bin/hw/android.hardware.media.c2@1.2-mediatek|vendor/bin/hw/android.hardware.media.c2@1.2-mediatek-64b) "${PATCHELF}" --add-needed "libstagefright_foundation-v33.so" "${2}" + "${PATCHELF}" --replace-needed libavservices_minijail_vendor.so libavservices_minijail.so "${2}" ;; lib64/libem_support_jni.so) "${PATCHELF}" --add-needed "libjni_shim.so" "${2}" ;; + vendor/lib64/libwifi-hal-mtk.so) + "${PATCHELF}" --set-soname "libwifi-hal-mtk.so" "${2}" + ;; + vendor/lib64/hw/android.hardware.thermal@2.0-impl.so) + "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "${2}" + ;; + system_ext/lib64/libsource.so) + grep -q libshim_ui.so "$2" || "$PATCHELF" --add-needed libshim_ui.so "$2" + ;; + system/lib64/libsink.so) + "${PATCHELF}" --add-needed "libshim_sink.so" "$2" + ;; esac } @@ -98,4 +111,4 @@ setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}" extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}" -"${MY_DIR}/setup-makefiles.sh" \ No newline at end of file +"${MY_DIR}/setup-makefiles.sh" diff --git a/framework_compatibility_matrix.xml b/framework_compatibility_matrix.xml index baffbe0..d81e709 100644 --- a/framework_compatibility_matrix.xml +++ b/framework_compatibility_matrix.xml @@ -144,15 +144,6 @@ default - - vendor.mediatek.hardware.aee - 1.0-1 - - IAee - AEE - default - - vendor.mediatek.hardware.apmonitor 2.0 diff --git a/libmtkperf_client/Android.bp b/libmtkperf_client/Android.bp new file mode 100644 index 0000000..86bfcb5 --- /dev/null +++ b/libmtkperf_client/Android.bp @@ -0,0 +1,22 @@ +// +// Copyright (C) 2022 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_defaults { + name: "libmtkperf_client_defaults", + srcs: ["client.c"], + shared_libs: ["liblog"], +} + +cc_library_shared { + name: "libmtkperf_client_vendor", + vendor: true, + defaults: ["libmtkperf_client_defaults"], +} + +cc_library_shared { + name: "libmtkperf_client", + defaults: ["libmtkperf_client_defaults"], +} diff --git a/libmtkperf_client/client.c b/libmtkperf_client/client.c new file mode 100644 index 0000000..8bf820a --- /dev/null +++ b/libmtkperf_client/client.c @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define LOG_TAG "libmtkperf_client" + +#include + +int perf_lock_acq(int hdl, int dur, long num, unsigned int tid) { + ALOGI("[%s] hdl: %d, dur: %d, num: %ld, tid: %u", + __func__, hdl, dur, num, tid); + if (hdl > 0) + return hdl; + + return 233; +} + +int perf_lock_rel(int hdl) { + ALOGI("[%s] hdl: %d", __func__, hdl); + return 0; +} + +int perf_cus_lock_hint(int hint, int dur) { + ALOGI("[%s], hint: %d, dur: %d", __func__, hint, dur); + return 233; +} diff --git a/libshims/Android.bp b/libshims/Android.bp new file mode 100644 index 0000000..0590cae --- /dev/null +++ b/libshims/Android.bp @@ -0,0 +1,19 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_library_shared { + name: "libshim_sink", + srcs: ["libshim_sink.cpp"], + compile_multilib: "64", + shared_libs: [ + "libaudioclient", + ], + header_libs: [ + "libaudioclient_headers", + "libmedia_headers", + ], +} + diff --git a/libshims/libshim_camera_metadata/Android.bp b/libshims/libshim_camera_metadata/Android.bp new file mode 100644 index 0000000..319511e --- /dev/null +++ b/libshims/libshim_camera_metadata/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_library { + name: "libshim_camera_metadata", + shared_libs: ["libcamera_metadata"], + srcs: ["libshim_camera_metadata.cpp"], + vendor: true +} diff --git a/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp b/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp new file mode 100644 index 0000000..f98dc7f --- /dev/null +++ b/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2022 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +extern "C" int add_camera_metadata_entry(camera_metadata_t* dst, uint32_t tag, const void* data, + size_t data_count) { + static auto add_camera_metadata_entry_orig = + reinterpret_cast( + dlsym(RTLD_NEXT, "add_camera_metadata_entry")); + + if (tag == ANDROID_REQUEST_AVAILABLE_CAPABILITIES) { + std::vector caps; + auto u8 = reinterpret_cast(data); + + for (size_t i = 0; i < data_count; i++) { + if (u8[i] != ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) { + caps.emplace_back(u8[i]); + } + } + + return add_camera_metadata_entry_orig(dst, tag, caps.data(), caps.size()); + } + + return add_camera_metadata_entry_orig(dst, tag, data, data_count); +} + +extern "C" int update_camera_metadata_entry(camera_metadata_t* dst, size_t index, const void* data, + size_t data_count, + camera_metadata_entry_t* updated_entry) { + static auto update_camera_metadata_entry_orig = + reinterpret_cast( + dlsym(RTLD_NEXT, "update_camera_metadata_entry")); + + if (camera_metadata_entry_t entry; + find_camera_metadata_entry(dst, ANDROID_REQUEST_AVAILABLE_CAPABILITIES, &entry) == 0 && + entry.index == index) { + std::vector caps; + auto u8 = reinterpret_cast(data); + + for (size_t i = 0; i < data_count; i++) { + if (u8[i] != ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) { + caps.emplace_back(u8[i]); + } + } + + return update_camera_metadata_entry_orig(dst, index, caps.data(), caps.size(), + updated_entry); + } + + return update_camera_metadata_entry_orig(dst, index, data, data_count, updated_entry); +} \ No newline at end of file diff --git a/libshims/libshim_sink.cpp b/libshims/libshim_sink.cpp new file mode 100644 index 0000000..3f490c7 --- /dev/null +++ b/libshims/libshim_sink.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2023 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +using namespace android; + +extern "C" { +void _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfi( + void *thisptr, audio_stream_type_t streamType, uint32_t sampleRate, + audio_format_t format, audio_channel_mask_t channelMask, size_t frameCount, + audio_output_flags_t flags, + const wp &callback, + int32_t notificationFrames, audio_session_t sessionId, + AudioTrack::transfer_type transferType, + const audio_offload_info_t *offloadInfo, + const AttributionSourceState &attributionSource, + const audio_attributes_t *pAttributes, bool doNotReconnect, + float maxRequiredSpeed, audio_port_handle_t selectedDeviceId); + +void _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfiRKNSt3__112basic_stringIcNSM_11char_traitsIcEENSM_9allocatorIcEEEE( + void *thisptr, audio_stream_type_t streamType, uint32_t sampleRate, + audio_format_t format, audio_channel_mask_t channelMask, size_t frameCount, + audio_output_flags_t flags, + const wp &callback, + int32_t notificationFrames, audio_session_t sessionId, + AudioTrack::transfer_type transferType, + const audio_offload_info_t *offloadInfo, + const AttributionSourceState &attributionSource, + const audio_attributes_t *pAttributes, bool doNotReconnect, + float maxRequiredSpeed, audio_port_handle_t selectedDeviceId, + const std::string& /* unknown */) { + _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfi( + thisptr, streamType, sampleRate, format, channelMask, frameCount, flags, + callback, notificationFrames, sessionId, transferType, offloadInfo, + attributionSource, pAttributes, doNotReconnect, maxRequiredSpeed, + selectedDeviceId); +} +} diff --git a/libshims/libshim_ui/Android.bp b/libshims/libshim_ui/Android.bp new file mode 100644 index 0000000..33c0dc5 --- /dev/null +++ b/libshims/libshim_ui/Android.bp @@ -0,0 +1,18 @@ +// +// Copyright (C) 2024 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +cc_library_shared { + name: "libshim_ui", + shared_libs: [ + "libui", + "libsync", + "libutils", + ], + srcs: [ + "GraphicBufferMapper.cpp", + ], + system_ext_specific: true, +} diff --git a/libshims/libshim_ui/GraphicBufferMapper.cpp b/libshims/libshim_ui/GraphicBufferMapper.cpp new file mode 100644 index 0000000..23b2c9c --- /dev/null +++ b/libshims/libshim_ui/GraphicBufferMapper.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2024 The LineageOS Project + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include + +using android::Rect; +using android::status_t; + +extern "C" { +status_t _ZN7android19GraphicBufferMapper4lockEPK13native_handlejRKNS_4RectEPPvPiS9_( + void* thisptr, buffer_handle_t handle, uint32_t usage, const Rect& bounds, void** vaddr, + int32_t* /*outBytesPerPixel*/, int32_t* /*outBytesPerStride*/) { + auto* gpm = static_cast(thisptr); + return gpm->lock(handle, usage, bounds, vaddr); +} + +status_t _ZN7android19GraphicBufferMapper6unlockEPK13native_handle(void* thisptr, + buffer_handle_t handle) { + android::base::unique_fd outFence; + auto* gpm = static_cast(thisptr); + status_t status = gpm->unlock(handle, &outFence); + if (status == android::OK && outFence.get() >= 0) { + sync_wait(outFence.get(), -1); + outFence.reset(); + } + return status; +} +} diff --git a/livedisplay/Android.bp b/livedisplay/Android.bp deleted file mode 100644 index 258d659..0000000 --- a/livedisplay/Android.bp +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2019 The LineageOS 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. - -cc_binary { - name: "vendor.lineage.livedisplay@2.1-service-spaced", - init_rc: ["vendor.lineage.livedisplay@2.1-service-spaced.rc"], - vintf_fragments: ["vendor.lineage.livedisplay@2.1-service-spaced.xml"], - vendor: true, - defaults: ["hidl_defaults"], - relative_install_path: "hw", - shared_libs: [ - "libbase", - "libbinder", - "libcutils", - "libhidlbase", - "libutils", - "vendor.lineage.livedisplay@2.0", - "vendor.lineage.livedisplay@2.1", - ], - - srcs: [ - "AntiFlicker.cpp", - "SunlightEnhancement.cpp", - "service.cpp", - ] -} diff --git a/livedisplay/AntiFlicker.cpp b/livedisplay/AntiFlicker.cpp deleted file mode 100644 index eadd7b2..0000000 --- a/livedisplay/AntiFlicker.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2022 The LineageOS 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 "vendor.lineage.livedisplay@2.1-service-spaced" - -#include -#include - -#include "AntiFlicker.h" - -using ::android::base::ReadFileToString; -using ::android::base::Trim; -using ::android::base::WriteStringToFile; - -namespace { - -constexpr const char* kDcDimmingPath = "/sys/kernel/oplus_display/dimlayer_bl_en"; - -} // anonymous namespace - -namespace vendor { -namespace lineage { -namespace livedisplay { -namespace V2_1 { -namespace implementation { - -Return AntiFlicker::isEnabled() { - std::string tmp; - int32_t contents = 0; - - if (ReadFileToString(kDcDimmingPath, &tmp)) { - contents = std::stoi(Trim(tmp)); - } - - return contents > 0; -} - -Return AntiFlicker::setEnabled(bool enabled) { - return WriteStringToFile(std::to_string(enabled), kDcDimmingPath, true); -} - -} // namespace implementation -} // namespace V2_1 -} // namespace livedisplay -} // namespace lineage -} // namespace vendor diff --git a/livedisplay/AntiFlicker.h b/livedisplay/AntiFlicker.h deleted file mode 100644 index 6dc2938..0000000 --- a/livedisplay/AntiFlicker.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2021 The LineageOS 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. - */ - -#pragma once - -#include -#include -#include - -namespace vendor { -namespace lineage { -namespace livedisplay { -namespace V2_1 { -namespace implementation { - -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::sp; - -class AntiFlicker : public IAntiFlicker { - public: - // Methods from ::vendor::lineage::livedisplay::V2_1::IAntiFlicker follow. - Return isEnabled() override; - Return setEnabled(bool enabled) override; -}; - -} // namespace implementation -} // namespace V2_1 -} // namespace livedisplay -} // namespace lineage -} // namespace vendor diff --git a/livedisplay/SunlightEnhancement.cpp b/livedisplay/SunlightEnhancement.cpp deleted file mode 100644 index c5e98ff..0000000 --- a/livedisplay/SunlightEnhancement.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2022 The LineageOS 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. - */ - -#include "SunlightEnhancement.h" -#include -#include - -using ::android::base::ReadFileToString; -using ::android::base::Trim; -using ::android::base::WriteStringToFile; - -namespace { - -constexpr const char* kHbmPath = "/sys/kernel/oplus_display/hbm"; - -} // anonymous namespace - -namespace vendor { -namespace lineage { -namespace livedisplay { -namespace V2_1 { -namespace implementation { - -Return SunlightEnhancement::isEnabled() { - std::string tmp; - int32_t contents = 0; - - if (ReadFileToString(kHbmPath, &tmp)) { - contents = std::stoi(Trim(tmp)); - } - - return contents > 0; -} - -Return SunlightEnhancement::setEnabled(bool enabled) { - return WriteStringToFile(std::to_string(enabled), kHbmPath, true); -} - -} // namespace implementation -} // namespace V2_1 -} // namespace livedisplay -} // namespace lineage -} // namespace vendor diff --git a/livedisplay/SunlightEnhancement.h b/livedisplay/SunlightEnhancement.h deleted file mode 100644 index 68a3d10..0000000 --- a/livedisplay/SunlightEnhancement.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2019-2021 The LineageOS 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. - */ - -#pragma once - -#include -#include -#include - -namespace vendor { -namespace lineage { -namespace livedisplay { -namespace V2_1 { -namespace implementation { - -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::sp; - -class SunlightEnhancement : public ISunlightEnhancement { - public: - // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow. - Return isEnabled() override; - Return setEnabled(bool enabled) override; -}; - -} // namespace implementation -} // namespace V2_1 -} // namespace livedisplay -} // namespace lineage -} // namespace vendor - diff --git a/livedisplay/service.cpp b/livedisplay/service.cpp deleted file mode 100755 index 58b068c..0000000 --- a/livedisplay/service.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2019 The LineageOS 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 "vendor.lineage.livedisplay@2.1-service-spaced" - -#include -#include -#include - -#include "AntiFlicker.h" -#include "SunlightEnhancement.h" - -using android::hardware::configureRpcThreadpool; -using android::hardware::joinRpcThreadpool; - -using ::vendor::lineage::livedisplay::V2_1::IAntiFlicker; -using ::vendor::lineage::livedisplay::V2_1::ISunlightEnhancement; -using ::vendor::lineage::livedisplay::V2_1::implementation::AntiFlicker; -using ::vendor::lineage::livedisplay::V2_1::implementation::SunlightEnhancement; - -int main() { - android::sp af = new AntiFlicker(); - android::sp se = new SunlightEnhancement(); - - configureRpcThreadpool(1, true /*callerWillJoin*/); - - if (af->registerAsService() != android::OK) { - LOG(ERROR) << "Cannot register anti flicker HAL service."; - return 1; - } - - if (se->registerAsService() != android::OK) { - LOG(ERROR) << "Cannot register sunlight enhancement HAL service."; - return 1; - } - - LOG(INFO) << "LiveDisplay HAL service is ready."; - - joinRpcThreadpool(); - - LOG(ERROR) << "LiveDisplay HAL service failed to join thread pool."; - return 1; -} diff --git a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc b/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc deleted file mode 100755 index 571cffe..0000000 --- a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc +++ /dev/null @@ -1,9 +0,0 @@ -on init - # LiveDisplay mediatek - chown system system /sys/devices/platform/mtk_disp_mgr.0/rgb - chmod 0660 /sys/devices/platform/mtk_disp_mgr.0/rgb - -service vendor.livedisplay-hal-2-1-spaced /vendor/bin/hw/vendor.lineage.livedisplay@2.1-service-spaced - class late_start - user system - group system diff --git a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml b/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml deleted file mode 100644 index d5ea09a..0000000 --- a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - vendor.lineage.livedisplay - hwbinder - 2.1 - - IAntiFlicker - default - - - ISunlightEnhancement - default - - - diff --git a/manifest.xml b/manifest.xml index 42853b4..f61b777 100644 --- a/manifest.xml +++ b/manifest.xml @@ -103,12 +103,6 @@ @1.0::IThermal/default @2.0::IThermal/default - - vendor.mediatek.hardware.aee - hwbinder - @1.1::IAee/AEE - @1.1::IAee/default - vendor.mediatek.hardware.apmonitor hwbinder diff --git a/manifest_odm.xml b/manifest_odm.xml deleted file mode 100644 index 928a70b..0000000 --- a/manifest_odm.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - vendor.lineage.touch - hwbinder - 1.0 - - IHighTouchPollingRate - default - - - ITouchscreenGesture - default - - - diff --git a/overlay/frameworks/base/core/res/res/values/dimens.xml b/overlay/frameworks/base/core/res/res/values/dimens.xml deleted file mode 100644 index 2900121..0000000 --- a/overlay/frameworks/base/core/res/res/values/dimens.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - 115.0px - 115.0px - 115.0px - - - 98.0px - - - 103.0px - - - 7.0dip - diff --git a/overlay/packages/apps/Settings/res/values/config.xml b/overlay/packages/apps/Settings/res/values/config.xml deleted file mode 100644 index fea39ec..0000000 --- a/overlay/packages/apps/Settings/res/values/config.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - true - diff --git a/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml b/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml deleted file mode 100644 index 746f8ce..0000000 --- a/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - -90 - - -85 - diff --git a/proprietary-files.txt b/proprietary-files.txt index e032fce..729b239 100644 --- a/proprietary-files.txt +++ b/proprietary-files.txt @@ -428,12 +428,6 @@ vendor/bin/autobt vendor/bin/bip vendor/etc/init/android.hardware.bluetooth@1.1-service-mediatek.rc vendor/etc/init/init.bip.rc -vendor/lib/libbluetooth_hw_test.so -vendor/lib/libbluetooth_mtk.so -vendor/lib/libbluetooth_mtk_pure.so -vendor/lib/libbluetooth_relayer.so -vendor/lib/libbluetoothem_mtk.so -vendor/lib/libbt-vendor.so vendor/lib64/hw/android.hardware.bluetooth@1.1-impl-mediatek.so vendor/lib64/libbluetooth_hw_test.so vendor/lib64/libbluetooth_mtk.so @@ -474,13 +468,11 @@ vendor/etc/init/chipinfo_init.rc odm/lib/libAlgoProcess.so odm/lib/libAncHumBokeh.so odm/lib/libAncHumVideoBase.so -odm/lib/libarcsoft_scbokeh_video.so odm/lib/libmpbase.so odm/lib/liboplus_platform_hwi.so odm/lib/libormshalclient.so odm/lib/libosensehalclient.so odm/lib/libstblur_api.so -odm/lib/vendor.oplus.hardware.engcamera@1.0.so odm/lib/vendor.oplus.hardware.osense.client@1.0.so odm/lib64/libAlgoProcess.so odm/lib64/libAncHumBokeh.so @@ -500,698 +492,6 @@ odm/lib64/vendor.oplus.hardware.engcamera@1.0.so odm/lib64/vendor.oplus.hardware.osense.client@1.0.so vendor/bin/hw/camerahalserver vendor/etc/init/camerahalserver.rc -vendor/lib/hw/vendor.mediatek.hardware.camera.atms@1.0-impl.so -vendor/lib/hw/vendor.mediatek.hardware.camera.bgservice@1.1-impl.so -vendor/lib/hw/vendor.mediatek.hardware.camera.isphal@1.0-impl.so -vendor/lib/hw/vendor.mediatek.hardware.camera.postproc@1.0-impl.so -vendor/lib/gc02m1bsy_mipi_raw_21690_IdxMgr.so -vendor/lib/gc02m1bsy_mipi_raw_21690_tuning.so -vendor/lib/gc02m1hlt_mipi_raw_21690_IdxMgr.so -vendor/lib/gc02m1hlt_mipi_raw_21690_tuning.so -vendor/lib/gc02m1shine_mipi_raw_21690_IdxMgr.so -vendor/lib/gc02m1shine_mipi_raw_21690_tuning.so -vendor/lib/hi1634q_mipi_raw_21690_IdxMgr.so -vendor/lib/hi1634q_mipi_raw_21690_tuning.so -vendor/lib/imx350_mipi_raw_IdxMgr.so -vendor/lib/imx350_mipi_raw_tuning.so -vendor/lib/imx386_mipi_mono_IdxMgr.so -vendor/lib/imx386_mipi_mono_tuning.so -vendor/lib/imx386_mipi_raw_IdxMgr.so -vendor/lib/imx386_mipi_raw_tuning.so -vendor/lib/imx398_mipi_raw_IdxMgr.so -vendor/lib/imx398_mipi_raw_tuning.so -vendor/lib/imx481_mipi_raw_IdxMgr.so -vendor/lib/imx481_mipi_raw_tuning.so -vendor/lib/imx499_mipi_raw_IdxMgr.so -vendor/lib/imx499_mipi_raw_tuning.so -vendor/lib/imx519_mipi_raw_IdxMgr.so -vendor/lib/imx519_mipi_raw_tuning.so -vendor/lib/imx586_mipi_raw_IdxMgr.so -vendor/lib/imx586_mipi_raw_tuning.so -vendor/lib/lib3a.ae.core.so -vendor/lib/lib3a.ae.so -vendor/lib/lib3a.ae.stat.so -vendor/lib/lib3a.af.assist.so -vendor/lib/lib3a.af.assist.utils.so -vendor/lib/lib3a.af.core.so -vendor/lib/lib3a.af.so -vendor/lib/lib3a.alsflicker.so -vendor/lib/lib3a.awb.core.so -vendor/lib/lib3a.ccudrv.so -vendor/lib/lib3a.ccuif.so -vendor/lib/lib3a.custom.ae.so -vendor/lib/lib3a.dce.so -vendor/lib/lib3a.flash.so -vendor/lib/lib3a.flicker.so -vendor/lib/lib3a.gma.so -vendor/lib/lib3a.lce.so -vendor/lib/lib3a.log.so -vendor/lib/lib3a.n3d3a.so -vendor/lib/lib3a.sensors.color.so -vendor/lib/lib3a.sensors.flicker.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_E2EHDR_Preview.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_E2EHDR_Video.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Face_Capture.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Flash_Capture.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Capture.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Preview.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Video.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Capture.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Preview.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Video.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_P1_YUV.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Capture.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Capture_4cell.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview_4k.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Video_1080.so -vendor/lib/libCamera_gc02m1bsymipiraw21690_Video_4k.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_E2EHDR_Preview.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_E2EHDR_Video.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Face_Capture.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Flash_Capture.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Capture.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Preview.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Video.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Capture.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Preview.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Video.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_P1_YUV.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Capture.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Capture_4cell.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview_4k.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Video_1080.so -vendor/lib/libCamera_gc02m1hltmipiraw21690_Video_4k.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_E2EHDR_Preview.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_E2EHDR_Video.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Face_Capture.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Flash_Capture.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Capture.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Preview.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Video.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Capture.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Preview.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Video.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_P1_YUV.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Capture.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Capture_4cell.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview_4k.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Video_1080.so -vendor/lib/libCamera_gc02m1shinemipiraw21690_Video_4k.so -vendor/lib/libCamera_hi1634qmipiraw21690_3HDR_Preivew.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_480P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_720P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_Other.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_480P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_720P.so -vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_Other.so -vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture_Bining.so -vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture_NoFace.so -vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Scene_Preview.so -vendor/lib/libCamera_hi1634qmipiraw21690_Face_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_Flash_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_ITS_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_Panorama.so -vendor/lib/libCamera_hi1634qmipiraw21690_Production_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Capture_Bining.so -vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Preview.so -vendor/lib/libCamera_hi1634qmipiraw21690_SuperNight_Hand_Capture.so -vendor/lib/libCamera_hi1634qmipiraw21690_SuperNight_Hand_Capture_Flash.so -vendor/lib/libCamera_hi1634qmipiraw21690_Video_Recording_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_Video_Recording_720P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_480P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_720P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_1080P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_480P.so -vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_720P.so -vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_Capture_Binning.so -vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning.so -vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning_NoFace.so -vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_Blurless.so -vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_Blurless_After.so -vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_full.so -vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_hdr.so -vendor/lib/libCamera_hi1634qmipiraw21690_portrait_preview_full.so -vendor/lib/libCamera_hi1634qmipiraw21690_zHDR_Capture_Binning.so -vendor/lib/libCamera_imx350mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx350mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx350mipiraw_Face_Capture.so -vendor/lib/libCamera_imx350mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx350mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx350mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx350mipiraw_HDR_Video.so -vendor/lib/libCamera_imx350mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx350mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx350mipiraw_N3D_Video.so -vendor/lib/libCamera_imx350mipiraw_P1_YUV.so -vendor/lib/libCamera_imx350mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx350mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx350mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx350mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx350mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx350mipiraw_Video_1080.so -vendor/lib/libCamera_imx350mipiraw_Video_4k.so -vendor/lib/libCamera_imx386mipimono_E2EHDR_Preview.so -vendor/lib/libCamera_imx386mipimono_E2EHDR_Video.so -vendor/lib/libCamera_imx386mipimono_Face_Capture.so -vendor/lib/libCamera_imx386mipimono_Flash_Capture.so -vendor/lib/libCamera_imx386mipimono_HDR_Capture.so -vendor/lib/libCamera_imx386mipimono_HDR_Preview.so -vendor/lib/libCamera_imx386mipimono_HDR_Video.so -vendor/lib/libCamera_imx386mipimono_N3D_Capture.so -vendor/lib/libCamera_imx386mipimono_N3D_Preview.so -vendor/lib/libCamera_imx386mipimono_N3D_Video.so -vendor/lib/libCamera_imx386mipimono_P1_YUV.so -vendor/lib/libCamera_imx386mipimono_Scene_Capture.so -vendor/lib/libCamera_imx386mipimono_Scene_Capture_4cell.so -vendor/lib/libCamera_imx386mipimono_Scene_Preview.so -vendor/lib/libCamera_imx386mipimono_Scene_Preview_4k.so -vendor/lib/libCamera_imx386mipimono_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx386mipimono_Video_1080.so -vendor/lib/libCamera_imx386mipimono_Video_4k.so -vendor/lib/libCamera_imx386mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx386mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx386mipiraw_Face_Capture.so -vendor/lib/libCamera_imx386mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx386mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx386mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx386mipiraw_HDR_Video.so -vendor/lib/libCamera_imx386mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx386mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx386mipiraw_N3D_Video.so -vendor/lib/libCamera_imx386mipiraw_P1_YUV.so -vendor/lib/libCamera_imx386mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx386mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx386mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx386mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx386mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx386mipiraw_Video_1080.so -vendor/lib/libCamera_imx386mipiraw_Video_4k.so -vendor/lib/libCamera_imx398mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx398mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx398mipiraw_Face_Capture.so -vendor/lib/libCamera_imx398mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx398mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx398mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx398mipiraw_HDR_Video.so -vendor/lib/libCamera_imx398mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx398mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx398mipiraw_N3D_Video.so -vendor/lib/libCamera_imx398mipiraw_P1_YUV.so -vendor/lib/libCamera_imx398mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx398mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx398mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx398mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx398mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx398mipiraw_Video_1080.so -vendor/lib/libCamera_imx398mipiraw_Video_4k.so -vendor/lib/libCamera_imx481mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx481mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx481mipiraw_Face_Capture.so -vendor/lib/libCamera_imx481mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx481mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx481mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx481mipiraw_HDR_Video.so -vendor/lib/libCamera_imx481mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx481mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx481mipiraw_N3D_Video.so -vendor/lib/libCamera_imx481mipiraw_P1_YUV.so -vendor/lib/libCamera_imx481mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx481mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx481mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx481mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx481mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx481mipiraw_Video_1080.so -vendor/lib/libCamera_imx481mipiraw_Video_4k.so -vendor/lib/libCamera_imx499mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx499mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx499mipiraw_Face_Capture.so -vendor/lib/libCamera_imx499mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx499mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx499mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx499mipiraw_HDR_Video.so -vendor/lib/libCamera_imx499mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx499mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx499mipiraw_N3D_Video.so -vendor/lib/libCamera_imx499mipiraw_P1_YUV.so -vendor/lib/libCamera_imx499mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx499mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx499mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx499mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx499mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx499mipiraw_Video_1080.so -vendor/lib/libCamera_imx499mipiraw_Video_4k.so -vendor/lib/libCamera_imx519mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx519mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx519mipiraw_Face_Capture.so -vendor/lib/libCamera_imx519mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx519mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx519mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx519mipiraw_HDR_Video.so -vendor/lib/libCamera_imx519mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx519mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx519mipiraw_N3D_Video.so -vendor/lib/libCamera_imx519mipiraw_P1_YUV.so -vendor/lib/libCamera_imx519mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx519mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx519mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx519mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx519mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx519mipiraw_Video_1080.so -vendor/lib/libCamera_imx519mipiraw_Video_4k.so -vendor/lib/libCamera_imx586mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_imx586mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_imx586mipiraw_Face_Capture.so -vendor/lib/libCamera_imx586mipiraw_Flash_Capture.so -vendor/lib/libCamera_imx586mipiraw_HDR_Capture.so -vendor/lib/libCamera_imx586mipiraw_HDR_Preview.so -vendor/lib/libCamera_imx586mipiraw_HDR_Video.so -vendor/lib/libCamera_imx586mipiraw_N3D_Capture.so -vendor/lib/libCamera_imx586mipiraw_N3D_Preview.so -vendor/lib/libCamera_imx586mipiraw_N3D_Video.so -vendor/lib/libCamera_imx586mipiraw_P1_YUV.so -vendor/lib/libCamera_imx586mipiraw_Scene_Capture.so -vendor/lib/libCamera_imx586mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_imx586mipiraw_Scene_Preview.so -vendor/lib/libCamera_imx586mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_imx586mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_imx586mipiraw_Video_1080.so -vendor/lib/libCamera_imx586mipiraw_Video_1080_60.so -vendor/lib/libCamera_imx586mipiraw_Video_4k.so -vendor/lib/libCamera_ov02b1bmipimono21690_E2EHDR_Preview.so -vendor/lib/libCamera_ov02b1bmipimono21690_E2EHDR_Video.so -vendor/lib/libCamera_ov02b1bmipimono21690_Face_Capture.so -vendor/lib/libCamera_ov02b1bmipimono21690_Flash_Capture.so -vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Capture.so -vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Preview.so -vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Video.so -vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Capture.so -vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Preview.so -vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Video.so -vendor/lib/libCamera_ov02b1bmipimono21690_P1_YUV.so -vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Capture.so -vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Capture_4cell.so -vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview.so -vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview_4k.so -vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_ov02b1bmipimono21690_Video_1080.so -vendor/lib/libCamera_ov02b1bmipimono21690_Video_4k.so -vendor/lib/libCamera_ov48bmipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_ov48bmipiraw_E2EHDR_Video.so -vendor/lib/libCamera_ov48bmipiraw_Face_Capture.so -vendor/lib/libCamera_ov48bmipiraw_Flash_Capture.so -vendor/lib/libCamera_ov48bmipiraw_HDR_Capture.so -vendor/lib/libCamera_ov48bmipiraw_HDR_Preview.so -vendor/lib/libCamera_ov48bmipiraw_HDR_Video.so -vendor/lib/libCamera_ov48bmipiraw_N3D_Capture.so -vendor/lib/libCamera_ov48bmipiraw_N3D_Preview.so -vendor/lib/libCamera_ov48bmipiraw_N3D_Video.so -vendor/lib/libCamera_ov48bmipiraw_P1_YUV.so -vendor/lib/libCamera_ov48bmipiraw_Scene_Capture.so -vendor/lib/libCamera_ov48bmipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_ov48bmipiraw_Scene_Preview.so -vendor/lib/libCamera_ov48bmipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_ov48bmipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_ov48bmipiraw_Video_1080.so -vendor/lib/libCamera_ov48bmipiraw_Video_4k.so -vendor/lib/libCamera_ov64b40mipiraw21690_E2EHDR_Preview.so -vendor/lib/libCamera_ov64b40mipiraw21690_E2EHDR_Video.so -vendor/lib/libCamera_ov64b40mipiraw21690_Face_Capture.so -vendor/lib/libCamera_ov64b40mipiraw21690_Flash_Capture.so -vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Capture.so -vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Preview.so -vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Video.so -vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Capture.so -vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Preview.so -vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Video.so -vendor/lib/libCamera_ov64b40mipiraw21690_P1_YUV.so -vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Capture.so -vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Capture_4cell.so -vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview.so -vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview_4k.so -vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_ov64b40mipiraw21690_Video_1080.so -vendor/lib/libCamera_ov64b40mipiraw21690_Video_4k.so -vendor/lib/libCamera_s5k2l7mipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_s5k2l7mipiraw_E2EHDR_Video.so -vendor/lib/libCamera_s5k2l7mipiraw_Face_Capture.so -vendor/lib/libCamera_s5k2l7mipiraw_Flash_Capture.so -vendor/lib/libCamera_s5k2l7mipiraw_HDR_Capture.so -vendor/lib/libCamera_s5k2l7mipiraw_HDR_Preview.so -vendor/lib/libCamera_s5k2l7mipiraw_HDR_Video.so -vendor/lib/libCamera_s5k2l7mipiraw_N3D_Capture.so -vendor/lib/libCamera_s5k2l7mipiraw_N3D_Preview.so -vendor/lib/libCamera_s5k2l7mipiraw_N3D_Video.so -vendor/lib/libCamera_s5k2l7mipiraw_P1_YUV.so -vendor/lib/libCamera_s5k2l7mipiraw_Scene_Capture.so -vendor/lib/libCamera_s5k2l7mipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview.so -vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_s5k2l7mipiraw_Video_1080.so -vendor/lib/libCamera_s5k2l7mipiraw_Video_4k.so -vendor/lib/libCamera_s5k2t7spmipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_s5k2t7spmipiraw_E2EHDR_Video.so -vendor/lib/libCamera_s5k2t7spmipiraw_Face_Capture.so -vendor/lib/libCamera_s5k2t7spmipiraw_Flash_Capture.so -vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Capture.so -vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Preview.so -vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Video.so -vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Capture.so -vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Preview.so -vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Video.so -vendor/lib/libCamera_s5k2t7spmipiraw_P1_YUV.so -vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Capture.so -vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview.so -vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_s5k2t7spmipiraw_Video_1080.so -vendor/lib/libCamera_s5k2t7spmipiraw_Video_4k.so -vendor/lib/libCamera_s5k3m5sxmipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_s5k3m5sxmipiraw_E2EHDR_Video.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Face_Capture.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Flash_Capture.so -vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Capture.so -vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Preview.so -vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Video.so -vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Capture.so -vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Preview.so -vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Video.so -vendor/lib/libCamera_s5k3m5sxmipiraw_P1_YUV.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Capture.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Video_1080.so -vendor/lib/libCamera_s5k3m5sxmipiraw_Video_4k.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3HDR_Preivew.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_480P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_720P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_Other.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_480P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_720P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_Other.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture_Bining.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture_NoFace.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Scene_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Face_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Flash_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_ITS_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Panorama.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Production_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Capture_Bining.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_SuperNight_Hand_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_SuperNight_Hand_Capture_Flash.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Video_Recording_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_Video_Recording_720P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_480P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_720P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_1080P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_480P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_720P.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_Capture_Binning.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning_NoFace.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_Blurless.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_Blurless_After.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_full.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_hdr.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_preview_full.so -vendor/lib/libCamera_s5k3p9spmipiraw21690_zHDR_Capture_Binning.so -vendor/lib/libCamera_s5k3p9spmipiraw_E2EHDR_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw_E2EHDR_Video.so -vendor/lib/libCamera_s5k3p9spmipiraw_Face_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw_Flash_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Video.so -vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Video.so -vendor/lib/libCamera_s5k3p9spmipiraw_P1_YUV.so -vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Capture.so -vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Capture_4cell.so -vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview.so -vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview_4k.so -vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview_ZSD_Flash.so -vendor/lib/libCamera_s5k3p9spmipiraw_Video_1080.so -vendor/lib/libCamera_s5k3p9spmipiraw_Video_4k.so -vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Video.so -vendor/lib/libCamera_s5kjn1mipiraw21690_50M_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_50M_Capture_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_CoupleHDR_EV_single.so -vendor/lib/libCamera_s5kjn1mipiraw21690_CoupleHDR_EV_single_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_E2EHDR_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_E2EHDR_Video.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Preview_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Preview_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Flash_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Flash_Capture_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Video.so -vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_single.so -vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_single_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_ITS_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Video.so -vendor/lib/libCamera_s5kjn1mipiraw21690_P1_YUV.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Panorama_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Portrait_capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Portrait_capture_hdr.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Production_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Professional_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Professional_Capture_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Remosaic_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scece_Capture_Food.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scece_Capture_Grass.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Capture_4cell.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_1080P.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_1080P_Zoom.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_720P.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_720P_Zoom.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_Zoom2x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_Zoom4x.so -vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Preview.so -vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Video.so -vendor/lib/libCamera_s5kjn1mipiraw21690_YUV_Reprocess_Capture.so -vendor/lib/libCamera_s5kjn1mipiraw21690_Zoom_Capture2.so -vendor/lib/libSQLiteModule_VER_ALL.so -vendor/lib/libSonyIMX230PdafLibrary.so -vendor/lib/libSonyIMX230PdafLibraryWrapper.so -vendor/lib/libSonyIMX338PdafLibrary.so -vendor/lib/libSonyIMX338PdafLibraryWrapper.so -vendor/lib/libSonyIMX386PdafLibrary.so -vendor/lib/libSonyIMX386PdafLibraryWrapper.so -vendor/lib/libSonyIMX519PdafLibrary.so -vendor/lib/libSonyIMX519PdafLibraryWrapper.so -vendor/lib/libaaa_ltm.so -vendor/lib/libaaa_ltmx.so -vendor/lib/libaal_cust.so -vendor/lib/libaal_key.so -vendor/lib/libaal_mtk.so -vendor/lib/libaalservice.so -vendor/lib/libaiawb_moon.so -vendor/lib/libaiawb_moon_model.so -vendor/lib/libaiawb_p1ggm.so -vendor/lib/libaiawb_sun.so -vendor/lib/libaiawb_sun_model.so -vendor/lib/libasn1c_core.so -vendor/lib/libasn1c_mapi.so -vendor/lib/libasn1c_mdmi.so -vendor/lib/libcam.afhal.so -vendor/lib/libcam.feature_utils.so -vendor/lib/libcam.hal3a.log.so -vendor/lib/libcam.hal3a.v3.ae.so -vendor/lib/libcam.hal3a.v3.ai3a.so -vendor/lib/libcam.hal3a.v3.awb.so -vendor/lib/libcam.hal3a.v3.fsmgr.so -vendor/lib/libcam.hal3a.v3.lscMgr.so -vendor/lib/libcam.hal3a.v3.lsctbl.50.so -vendor/lib/libcam.hal3a.v3.nvram.50.so -vendor/lib/libcam.hal3a.v3.platform.so -vendor/lib/libcam.hal3a.v3.resultpool.so -vendor/lib/libcam.hal3a.v3.so -vendor/lib/libcam.halisp.buf.so -vendor/lib/libcam.halsensor.hwintegration.so -vendor/lib/libcam.halsensor.so -vendor/lib/libcam.iopipe.so -vendor/lib/libcam.isptuning.so -vendor/lib/libcam.pdtblgen.so -vendor/lib/libcam.seninfn3d.so -vendor/lib/libcam.tuning.cache.so -vendor/lib/libcam.utils.sensorprovider.so -vendor/lib/libcam.vhdr.so -vendor/lib/libcamalgo.3dnr.so -vendor/lib/libcamalgo.dngop.so -vendor/lib/libcamalgo.eis.so -vendor/lib/libcamalgo.fdft.so -vendor/lib/libcamalgo.fsc.so -vendor/lib/libcamalgo.gyro.so -vendor/lib/libcamalgo.ispfeature.so -vendor/lib/libcamalgo.lmv.so -vendor/lib/libcamalgo.lsc.so -vendor/lib/libcamalgo.mfnr.so -vendor/lib/libcamalgo.nr.so -vendor/lib/libcamalgo.platform.so -vendor/lib/libcamalgo.platform2.so -vendor/lib/libcamalgo.utility.so -vendor/lib/libcamalgo.warp.so -vendor/lib/libcamdrv_imem.so -vendor/lib/libcamdrv_isp.so -vendor/lib/libcamdrv_tuning_mgr.so -vendor/lib/libcamdrv_twin.so -vendor/lib/libcamera.custom.pd_buf_mgr.so -vendor/lib/libcamera.customae.so -vendor/lib/libcamera.customaf.so -vendor/lib/libcamera.customawb.so -vendor/lib/libcamera.customflk.so -vendor/lib/libcamera2ndk_vendor.so -vendor/lib/libcamera_core_hwi.so -vendor/lib/libcameracustom.camera.3a.so -vendor/lib/libcameracustom.camera.isp.so -vendor/lib/libcameracustom.camera.sensors.so -vendor/lib/libcameracustom.eis.so -vendor/lib/libcameracustom.flashlight.so -vendor/lib/libcameracustom.lens.so -vendor/lib/libcameracustom.so -vendor/lib/libchromanr.so -vendor/lib/libcustomer_cameradata.so -vendor/lib/libcustomer_testvision.so -vendor/lib/libdip_drv.so -vendor/lib/libdip_imem.so -vendor/lib/libdip_postproc.so -vendor/lib/libdre.so -vendor/lib/libeffecthal.base.so -vendor/lib/libfeature.face.so -vendor/lib/libfeature.stereo.provider.so -vendor/lib/libfeature_3dnr.so -vendor/lib/libfeature_eis.so -vendor/lib/libfeature_fsc.so -vendor/lib/libfeature_lmv.so -vendor/lib/libfeature_rss.so -vendor/lib/libfeatureiodrv_mem.so -vendor/lib/libimagebuffer_wrapper.so -vendor/lib/libm4u.so -vendor/lib/libmtkcam.atmseventmgr.so -vendor/lib/libmtkcam.eventcallback.so -vendor/lib/libmtkcam.featurepipe.capture.so -vendor/lib/libmtkcam.featurepipe.streaming.so -vendor/lib/libmtkcam.featurepipe.vsdof_util.so -vendor/lib/libmtkcam.logicalmodule.so -vendor/lib/libmtkcam_3rdparty.core.so -vendor/lib/libmtkcam_3rdparty.customer.so -vendor/lib/libmtkcam_3rdparty.mtk.so -vendor/lib/libmtkcam_3rdparty.so -vendor/lib/libmtkcam_calibration_convertor.so -vendor/lib/libmtkcam_calibration_provider.so -vendor/lib/libmtkcam_calibration_provider.so -vendor/lib/libmtkcam_debugutils.so -vendor/lib/libmtkcam_diputils.so -vendor/lib/libmtkcam_exif.so -vendor/lib/libmtkcam_exif.so -vendor/lib/libmtkcam_fdvt.so -vendor/lib/libmtkcam_grallocutils.so -vendor/lib/libmtkcam_hwnode.so -vendor/lib/libmtkcam_hwutils.so -vendor/lib/libmtkcam_imgbuf.so -vendor/lib/libmtkcam_mapping_mgr.so -vendor/lib/libmtkcam_metadata.so -vendor/lib/libmtkcam_metastore.so -vendor/lib/libmtkcam_mfb.so -vendor/lib/libmtkcam_modulehelper.so -vendor/lib/libmtkcam_pipeline.so -vendor/lib/libmtkcam_pipeline_fbm.so -vendor/lib/libmtkcam_pipelinemodel_isp.so -vendor/lib/libmtkcam_prerelease.so -vendor/lib/libmtkcam_rsc.so -vendor/lib/libmtkcam_scenariorecorder.so -vendor/lib/libmtkcam_stdutils.so -vendor/lib/libmtkcam_streamutils.so -vendor/lib/libmtkcam_synchelper.so -vendor/lib/libmtkcam_sysutils.so -vendor/lib/libmtkcam_tuning_utils.so -vendor/lib/libmtkcam_ulog.so -vendor/lib/libmtkisp_metadata.so -vendor/lib/libnxp_extamp_intf.so -vendor/lib/libocam_common.so -vendor/lib/liboplus.aishutter.so -vendor/lib/liboplus_mtkcam_lightsensorprovider.so -vendor/lib/liboplus_platform_hwi.so -vendor/lib/libstereoinfoaccessor_vsdof.so -vendor/lib/ov02b1b_mipi_mono_21690_IdxMgr.so -vendor/lib/ov02b1b_mipi_mono_21690_tuning.so -vendor/lib/ov48b_mipi_raw_IdxMgr.so -vendor/lib/ov48b_mipi_raw_tuning.so -vendor/lib/ov64b40_mipi_raw_21690_IdxMgr.so -vendor/lib/ov64b40_mipi_raw_21690_tuning.so -vendor/lib/s5k2l7_mipi_raw_IdxMgr.so -vendor/lib/s5k2l7_mipi_raw_tuning.so -vendor/lib/s5k2t7sp_mipi_raw_IdxMgr.so -vendor/lib/s5k2t7sp_mipi_raw_tuning.so -vendor/lib/s5k3m5sx_mipi_raw_IdxMgr.so -vendor/lib/s5k3m5sx_mipi_raw_tuning.so -vendor/lib/s5k3p9sp_mipi_raw_21690_IdxMgr.so -vendor/lib/s5k3p9sp_mipi_raw_21690_tuning.so -vendor/lib/s5k3p9sp_mipi_raw_IdxMgr.so -vendor/lib/s5k3p9sp_mipi_raw_tuning.so -vendor/lib/s5kjn1_mipi_raw_21690_IdxMgr.so -vendor/lib/s5kjn1_mipi_raw_21690_tuning.so -vendor/lib/vendor.mediatek.hardware.camera.atms@1.0.so -vendor/lib/vendor.mediatek.hardware.camera.bgservice@1.0.so -vendor/lib/vendor.mediatek.hardware.camera.bgservice@1.1.so -vendor/lib/vendor.mediatek.hardware.camera.isphal@1.0.so -vendor/lib/vendor.mediatek.hardware.camera.postproc@1.0.so vendor/lib64/hw/android.hardware.camera.provider@2.6-impl-mediatek.so vendor/lib64/hw/vendor.mediatek.hardware.camera.atms@1.0-impl.so vendor/lib64/hw/vendor.mediatek.hardware.camera.bgservice@1.1-impl.so @@ -1926,7 +1226,7 @@ vendor/lib64/vendor.oplus.hardware.cameraextension@1.0.so vendor/lib64/vendor.oplus.hardware.cammidasservice@1.0.so # Camera Feature Policy - from RMX3085EEA_11_C.11 -vendor/lib64/libmtkcam_featurepolicy.so|c539aa55b40a60ac82a9f5791b0e82cc331ec2fa|54a902eb3c3ef3518b806fc0732f0af49f537500 +vendor/lib64/libmtkcam_featurepolicy.so|e3e7cdfdff5d364e0cb17d3a6373be004c6b3787 # Camera configs odm/etc/camera/tonemap/curve_lut_0 @@ -2232,22 +1532,6 @@ odm/firmware/awinic_haptic_params.bin odm/bin/hw/vendor.oplus.hardware.biometrics.fingerprint@2.1-service odm/etc/init/vendor.oplus.hardware.biometrics.fingerprint@2.1-service.rc odm/etc/vintf/manifest/manifest_oplus_fingerprint.xml -odm/lib/hw/fingerprint.goodix_G2.default.so -odm/lib/hw/fingerprint.goodix_G3.default.so -odm/lib/hw/fingerprint.goodix_G5.default.so -odm/lib/hw/fingerprint.goodix_G6.default.so -odm/lib/hw/fingerprint.goodix_G7.default.so -odm/lib/hw/fingerprint.silead.default.so -odm/lib/anc.capacitive.hal.so -odm/lib/anc.hal.so -odm/lib/libgf_hal_G2.so -odm/lib/libgf_hal_G3.so -odm/lib/libgf_hal_G5.so -odm/lib/libgf_hal_G6.so -odm/lib/libgf_hal_G7.so -odm/lib/libsl_fp_impl.so -odm/lib/vendor.oplus.hardware.biometrics.fingerprint@2.1.so -odm/lib/vendor.oplus.hardware.commondcs@1.0.so odm/lib64/hw/fingerprint.focaltech.default.so odm/lib64/hw/fingerprint.goodix_G2.default.so odm/lib64/hw/fingerprint.goodix_G3.default.so @@ -2310,51 +1594,46 @@ vendor/lib/libfgauge_gm30.so -my_product/framework/com.android.hotwordenrollment.common.util.jar:system_ext/framework/com.android.hotwordenrollment.common.util.jar -my_product/priv-app/HotwordEnrollmentOKGoogleCORTEXM4.apk:product/priv-app/HotwordEnrollmentOKGoogleCORTEXM4/HotwordEnrollmentOKGoogleCORTEXM4.apk -# IMS - from TECNO-CK9n UP1A.230519.001 +# MTK-IMS - from plato-user 14 UP1A.230620.001 V14.0.7.0.ULQMIXM release-keys +-system_ext/framework/mediatek-common.jar:system/framework/mediatek-common.jar|65cb5b86acb0eb42bb3ec2987e1d80a88ea0756a +-system_ext/framework/mediatek-framework.jar:system/framework/mediatek-framework.jar|e1820712befe75673d4efc6f4a64b86ada611084 +-system_ext/framework/mediatek-ims-base.jar:system/framework/mediatek-ims-base.jar|5ed1d48593c8965cfb4fedf85d4c4721ba258004 +-system_ext/framework/mediatek-ims-common.jar:system/framework/mediatek-ims-common.jar|14751a70a5d59f23c0f015951f7cb08922377701 +-system_ext/framework/mediatek-ims-extension-plugin.jar:system/framework/mediatek-ims-extension-plugin.jar|fbadb06fbf2762b181e15c88cbd7ae299a89be71 +-system_ext/framework/mediatek-telecom-common.jar:system/framework/mediatek-telecom-common.jar|343f45b7582f53e310c484152cbb722a45e4888a +-system_ext/framework/mediatek-telephony-base.jar:system/framework/mediatek-telephony-base.jar|c4d5b15a3457afa564b3a09b751321fc52a62c5c +-system_ext/framework/mediatek-telephony-common.jar:system/framework/mediatek-telephony-common.jar|84d7bb8cd3a845cfd8bbea3772f28371d28bbd8b system_ext/bin/vtservice|59adc81ee1ad1f3fb4942cd6e8e7100325002eb2 system_ext/etc/init/init.vtservice.rc|50a2249906edc06059b443513db47a2ddc0490dc system_ext/lib64/libcomutils.so|6d9cd979f33ef01cb26861a38a59e76e1c2a3acb -system_ext/lib64/libimsma.so|932cbe88083fae23b159bf0e3fe17d7efb93495b -system_ext/lib64/libimsma_adapt.so|754ad1c39fb4dba9d3eb69ac00112e7600d68580 -system_ext/lib64/libimsma_rtp.so|20ee91f090661fb26e6625ad2fef828441956b82 +system_ext/lib64/libimsma_adapt.so|b95939f797ba52d87bb9fa6ebf356e0fb4fcfe56 +system_ext/lib64/libimsma_rtp.so|02b33fba68211362b439bb05a965ba6e01fa3ea0 system_ext/lib64/libimsma_socketwrapper.so|1f9b83322c41e5b0a7b3130f74a38ddb14f578d8 -system_ext/lib64/libmtk_vt_service.so|302d3ab3c5b3fa0107520fe36098b32cd0a8dd96 -system_ext/lib64/libmtk_vt_wrapper.so|af4d486c516c920ea99c362aebbf04180e96035c +system_ext/lib64/libimsma.so|547ffdd8a8d57d6624b69eb27ac0e1642aab09bc +system_ext/lib64/libmtk_vt_service.so|c46d43d49fb35e21cb34cdea1f33ad4b964e2f22 +system_ext/lib64/libmtk_vt_wrapper.so|b6f8737a084431cdd8d77c9188e176b7e9364876 system_ext/lib64/libsignal.so|0f55bb64c660fe4cda2b695121580b054f026e73 -system_ext/lib64/libsink.so|6bd8c55847116a9a37e223ea2a6e5ce1379e53f7 -system_ext/lib64/libsource.so|66a481fd2e260a820899d60cf9190fb986d36768 -system_ext/lib64/libvcodec_cap.so|6973253cb2e4ddf365451ed2ac8db9d04085bc4a -system_ext/lib64/libvcodec_capenc.so|5527525dfcd25169bc380ac53d8181ffa1429c6f +system_ext/lib64/libsink.so|94972e8c36b576cbe74ecefbe72526714c1e1e16 +system_ext/lib64/libsource.so|5631ce7ae59ccd3c383b5f6d42bad8e22afd8e93 +system_ext/lib64/libvcodec_cap.so|0165b65cd33fd3905ef3f569ff36bf119b27c13d +system_ext/lib64/libvcodec_capenc.so|3b5e76522a7331248c2864493fdade2bdf73c4c3 system_ext/lib64/libvt_avsync.so|632cb05532ef2e022072d91bff3c1ae47c888b7e -system_ext/lib64/vendor.mediatek.hardware.videotelephony-V1-ndk.so|fc3f645734d4e37fa50b77233d63c7b2eb166014 -system_ext/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|aee568e770a3835af2df2262c9dc8bb2911da324 -vendor/bin/hw/vtservice_hidl|047b26f80b338b7d0869840d243eefebe82d56f5 -vendor/etc/init/init.vtservice_hidl.rc|f2e992214ed5bb99c2c2a135cf1f0996dba8a8a0 -vendor/lib64/hw/vendor.mediatek.hardware.videotelephony@1.0-impl.so|bb9ff554802e7bffb72cf24604109dafcf0019fc -vendor/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|5e228669d2c575e38fc02a13404f31bc22494b87 +system_ext/lib64/vendor.mediatek.hardware.videotelephony-V1-ndk.so|b4733a99049d5162e41955bca80cc78b8ca76c53 +system_ext/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|1385634094de90c59b9f689d313b6b3ee8770efe + +# MTK-IMS (App) - from plato-user 14 UP1A.230620.001 V14.0.7.0.ULQMIXM release-keys (patched) +system_ext/priv-app/ImsService/ImsService.apk:system/priv-app/ImsService/ImsService.apk|62e6a0c457812366623630dffef27b0bf5ca7fad # IMS --framework/mediatek-common.jar --framework/mediatek-framework.jar -framework/mediatek-gwsd.jar -framework/mediatek-gwsdv2.jar --framework/mediatek-ims-base.jar --framework/mediatek-ims-common.jar -framework/mediatek-ims-extension-plugin.jar --framework/mediatek-telecom-common.jar --framework/mediatek-telephony-base.jar --framework/mediatek-telephony-common.jar odm/lib/vendor.oplus.hardware.ims@1.0.so odm/lib64/vendor.oplus.hardware.ims@1.0.so vendor/bin/hw/vendor.mediatek.hardware.mmagent@1.1-service +vendor/bin/hw/vtservice_hidl vendor/bin/ipsec_mon vendor/bin/lbs_hidl_service -vendor/bin/rcs_volte_stack -vendor/bin/volte_clientapi_ua vendor/bin/volte_imcb vendor/bin/volte_imsm_93 vendor/bin/volte_md_status -vendor/bin/volte_rcs_ua vendor/bin/volte_stack vendor/bin/volte_ua vendor/bin/xcap @@ -2363,22 +1642,19 @@ vendor/etc/init/init.volte_imsm_93.rc vendor/etc/init/init.volte_md_status.rc vendor/etc/init/init.volte_stack.rc vendor/etc/init/init.volte_ua.rc +vendor/etc/init/init.vtservice_hidl.rc vendor/etc/init/init.xcap.rc vendor/etc/init/ipsec_mon.rc vendor/etc/init/lbs_hidl_service.rc vendor/etc/init/vendor.mediatek.hardware.mmagent@1.1-service.rc -vendor/etc/init/volte_clientapi_ua.rc -vendor/etc/vintf/manifest/lbs_hidl_service@1.0.xml vendor/lib/libipsec_ims_shr.so vendor/lib/librcs_interface.so -vendor/lib/librcs_volte_core.so vendor/lib/libverno.so vendor/lib/libvolte_core_shr.so vendor/lib/libvolte_xdmc_shr.so vendor/lib/libvt_custom.so -vendor/lib/vendor.mediatek.hardware.rcs@2.0.so vendor/lib64/lbs_hidl_service-impl.so -vendor/lib64/libipsec_ims_shr.so vendor/lib64/libmmagent.so vendor/lib64/libmtklimiter_vendor.so vendor/lib64/libmtknetcap.so @@ -2387,13 +1663,12 @@ vendor/lib64/libmtkshifter_vendor.so vendor/lib64/libmtkspparser.so vendor/lib64/libmtksysutils.so vendor/lib64/libverno.so -vendor/lib64/vendor.mediatek.hardware.clientapi@1.0.so +vendor/lib64/libipsec_ims_shr.so +vendor/lib64/hw/vendor.mediatek.hardware.videotelephony@1.0-impl.so vendor/lib64/vendor.mediatek.hardware.lbs@1.0.so vendor/lib64/vendor.mediatek.hardware.mmagent@1.0.so vendor/lib64/vendor.mediatek.hardware.mmagent@1.1.so - -# ImsService --priv-app/ImsService/ImsService.apk|738b92467c052c0e95ee3fd748bde51ab0b90336 +vendor/lib64/vendor.mediatek.hardware.videotelephony@1.0.so # Keymaster vendor/bin/hw/android.hardware.keymaster@4.1-service.trustonic @@ -2626,26 +1901,8 @@ vendor/lib64/vendor.mediatek.hardware.nvram@1.0.so vendor/lib64/vendor.mediatek.hardware.nvram@1.1.so # Power -odm/etc/powerhal/power_app_cfg.xml -vendor/bin/hw/vendor.mediatek.hardware.mtkpower@1.0-service -vendor/etc/init/bootperf.rc -vendor/etc/init/vendor.mediatek.hardware.mtkpower@1.0-init.rc -vendor/etc/init/vendor.mediatek.hardware.mtkpower@1.0-service.rc -vendor/lib/hw/vendor.mediatek.hardware.mtkpower@1.2-impl.so -vendor/lib/libperfctl_vendor.so -vendor/lib/libpower_timer.so -vendor/lib/libpowerhal.so -vendor/lib/libpowerhalwrap_vendor.so -vendor/lib/vendor.mediatek.hardware.power@1.1.so -vendor/lib/vendor.mediatek.hardware.power@2.0.so -vendor/lib64/hw/vendor.mediatek.hardware.mtkpower@1.2-impl.so -vendor/lib64/libmtkperf_client_vendor.so -vendor/lib64/libperfctl_vendor.so -vendor/lib64/libpower_timer.so -vendor/lib64/libpowerhal.so -vendor/lib64/libpowerhalwrap_vendor.so -vendor/lib64/vendor.mediatek.hardware.power@1.1.so -vendor/lib64/vendor.mediatek.hardware.power@2.0.so +-vendor/lib64/vendor.mediatek.hardware.power@1.1.so +-vendor/lib64/vendor.mediatek.hardware.power@2.0.so # Protobuf - from redfin - TQ3A.230901.001/10750268 vendor/lib64/libprotobuf-cpp-lite-3.9.1.so|4f4ad5b013daabbbfbf7be7419fb60c28a59c36c @@ -2728,7 +1985,6 @@ vendor/lib/libmtkcutils.so vendor/lib/libmtkhardware_legacy.so vendor/lib/libmtklimiter_vendor.so vendor/lib/libmtknetutils.so -vendor/lib/libmtkperf_client_vendor.so vendor/lib/libmtkproperty.so vendor/lib/libmtkrillog.so vendor/lib/libmtkshifter_vendor.so @@ -2920,6 +2176,11 @@ vendor/lib64/libTEECommon.so vendor/lib64/libgz_gp_client.so vendor/lib64/libgz_uree.so +# USB +vendor/bin/hw/android.hardware.usb@1.2-service-mediatekv2 +vendor/etc/init/android.hardware.usb@1.2-service-mediatekv2.rc +-vendor/etc/vintf/manifest/android.hardware.usb@1.2-service-mediatekv2.xml + # WiFi odm/etc/wifi/txpowerctrl.cfg odm/etc/wifi/wifi.cfg @@ -2943,6 +2204,7 @@ vendor/lib/libwo.so vendor/lib/vendor.mediatek.hardware.apmonitor@2.0.so vendor/lib/vendor.mediatek.hardware.mdmonitor@1.0.so vendor/lib/vendor.mediatek.hardware.netdagent@1.0.so +vendor/lib64/libwifi-hal.so:vendor/lib64/libwifi-hal-mtk.so vendor/lib64/libapmonitor_vendor.so vendor/lib64/libforkexecwrap.so vendor/lib64/libwo.so diff --git a/rootdir/Android.mk b/rootdir/Android.mk index df84d72..d4e9c5b 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -10,10 +10,10 @@ LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/init include $(BUILD_PREBUILT) include $(CLEAR_VARS) -LOCAL_MODULE := init.cgroup.rc +LOCAL_MODULE := init.mt6781.power.rc LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC -LOCAL_SRC_FILES := etc/init.cgroup.rc +LOCAL_SRC_FILES := etc/init.mt6781.power.rc LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/init/hw include $(BUILD_PREBUILT) diff --git a/rootdir/etc/init.cgroup.rc b/rootdir/etc/init.cgroup.rc deleted file mode 100644 index 5119d80..0000000 --- a/rootdir/etc/init.cgroup.rc +++ /dev/null @@ -1,72 +0,0 @@ - -on post-fs - - # boot perf. tune - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "0 100" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "1 100" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "2 100" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "3 100" - -on init - - # Create energy-aware scheduler tuning nodes - mkdir /dev/stune/foreground - mkdir /dev/stune/background - mkdir /dev/stune/top-app - mkdir /dev/stune/rt - chown system system /dev/stune - chown system system /dev/stune/foreground - chown system system /dev/stune/background - chown system system /dev/stune/top-app - chown system system /dev/stune/rt - chown system system /dev/stune/tasks - chown system system /dev/stune/foreground/tasks - chown system system /dev/stune/background/tasks - chown system system /dev/stune/top-app/tasks - chown system system /dev/stune/rt/tasks - chmod 0664 /dev/stune/tasks - chmod 0664 /dev/stune/foreground/tasks - chmod 0664 /dev/stune/background/tasks - chmod 0664 /dev/stune/top-app/tasks - chmod 0664 /dev/stune/rt/tasks - - # Reset stune group setting for NNAPI HAL processes - write /dev/stune/nnapi-hal/schedtune.boost 0 - write /dev/stune/nnapi-hal/schedtune.prefer_idle 0 - - # create an stune group for camera-specific processes - mkdir /dev/stune/camera-daemon - write /dev/stune/camera-daemon/schedtune.prefer_idle 0 - write /dev/stune/camera-daemon/schedtune.boost 0 - chown system system /dev/stune/camera-daemon - chown system system /dev/stune/camera-daemon/tasks - chmod 0664 /dev/stune/camera-daemon/tasks - - # create io boost group - mkdir /dev/stune/io - chown system system /dev/stune/io - chown system system /dev/stune/io/tasks - chmod 0666 /dev/stune/io/tasks - -on property:sys.boot_completed=1 - - write /sys/devices/system/cpu/eas/enable 2 - write /proc/cpufreq/cpufreq_sched_disable 0 - - chown system system /dev/stune/foreground/schedtune.prefer_idle - chown system system /dev/stune/top-app/schedtune.prefer_idle - chown system system /dev/stune/rt/schedtune.prefer_idle - write /dev/stune/foreground/schedtune.prefer_idle 0 - write /dev/stune/top-app/schedtune.prefer_idle 0 - write /dev/stune/rt/schedtune.prefer_idle 0 - write /dev/stune/top-app/schedtune.boost 1 - write /proc/sys/kernel/sched_migration_cost_ns 200000 - write /proc/perfmgr/boost_ctrl/eas_ctrl/sched_big_task_rotation 1 - - # restore perf. parameters - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "0 0" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "1 0" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "2 0" - write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "3 0" - write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "-1 -1 -1 -1 -1 -1" - write /sys/devices/platform/boot_dramboost/dramboost/dramboost 0 diff --git a/rootdir/etc/init.mt6781.power.rc b/rootdir/etc/init.mt6781.power.rc new file mode 100644 index 0000000..58e706d --- /dev/null +++ b/rootdir/etc/init.mt6781.power.rc @@ -0,0 +1,62 @@ +on init + # Disable UFS powersaving + write /sys/devices/platform/11270000.ufshci/clkgate_enable 0 + + # Boot time FS tuning + write /sys/block/mmcblk0/queue/iostats 0 + write /sys/block/mmcblk0/queue/nr_requests 256 + write /sys/block/sdc/queue/iostats 0 + write /sys/block/sdc/queue/nr_requests 256 + + # Update fastcharge firmware + write /proc/fastchg_fw_update 1 + + # Configure governor settings for little cluster + write /sys/devices/system/cpu/cpufreq/policy0/scaling_governor "schedutil" + write /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us 500 + write /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us 20000 + + # Configure governor settings for big cluster + write /sys/devices/system/cpu/cpufreq/policy6/scaling_governor "schedutil" + write /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us 500 + write /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us 20000 + + # update cpus for cpuset cgroup + write /dev/cpuset/foreground/cpus 0-7 + write /dev/cpuset/foreground/boost/cpus 0-7 + write /dev/cpuset/background/cpus 0-3 + write /dev/cpuset/system-background/cpus 0-3 + write /dev/cpuset/top-app/cpus 0-7 + +on enable-low-power + # Enable UFS powersaving + write /sys/devices/platform/11270000.ufshci/clkgate_enable 1 + + # Runtime FS tuning + # we should adjust the setting upon boot_complete for runtime performance + write /sys/block/mmcblk0/queue/iostats 1 + write /sys/block/mmcblk0/queue/read_ahead_kb 512 + write /sys/block/mmcblk0/queue/nr_requests 128 + write /sys/block/sdc/queue/iostats 1 + write /sys/block/sdc/queue/read_ahead_kb 512 + write /sys/block/sdc/queue/nr_requests 128 + write /sys/block/dm-0/queue/read_ahead_kb 128 + write /sys/block/dm-1/queue/read_ahead_kb 128 + write /sys/block/dm-2/queue/read_ahead_kb 128 + write /sys/block/dm-3/queue/read_ahead_kb 128 + write /sys/block/dm-4/queue/read_ahead_kb 128 + write /sys/block/dm-5/queue/read_ahead_kb 128 + + write /proc/cpufreq/cpufreq_sched_disable 0 + write /proc/sys/kernel/sched_migration_cost_ns 200000 + + # Configure DVFS + write /sys/kernel/ged/hal/dvfs_margin_value 130 + write /sys/kernel/ged/hal/timer_base_dvfs_margin 798 + write /sys/kernel/ged/hal/loading_base_dvfs_step 4 + + # Enable PowerHAL hint processing + setprop vendor.powerhal.init 1 + +on property:sys.boot_completed=1 + trigger enable-low-power diff --git a/rootdir/etc/init.mt6781.rc b/rootdir/etc/init.mt6781.rc index 486422b..da2c420 100644 --- a/rootdir/etc/init.mt6781.rc +++ b/rootdir/etc/init.mt6781.rc @@ -1,13 +1,11 @@ import /vendor/etc/init/hw/init.connectivity.rc +import /vendor/etc/init/hw/init.mt6781.power.rc import /vendor/etc/init/hw/init.mt6781.usb.rc import /vendor/etc/init/hw/init.project.rc import /vendor/etc/init/hw/init.sensor_1_0.rc -import /vendor/etc/init/hw/init.cgroup.rc import /vendor/etc/init/hw/init.modem.rc on early-init - write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "0 0 0 0" - write /sys/devices/platform/boot_dramboost/dramboost/dramboost 1 write /proc/sys/kernel/firmware_config/force_sysfs_fallback 1 on init @@ -20,13 +18,6 @@ on init write /proc/sys/net/core/wmem_max 8388608 write /proc/sys/net/core/rmem_max 8388608 - # update cpus for cpuset cgroup - write /dev/cpuset/foreground/cpus 0-7 - write /dev/cpuset/foreground/boost/cpus 0-7 - write /dev/cpuset/background/cpus 0-3 - write /dev/cpuset/system-background/cpus 0-3 - write /dev/cpuset/top-app/cpus 0-7 - # Set permissions on oplus_chg nodes chown system system /sys/class/oplus_chg/battery/short_c_hw_status chown system system /sys/class/oplus_chg/battery/short_c_hw_feature @@ -78,11 +69,7 @@ on late-init write /sys/kernel/rcu_expedited 1 on charger - write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "-1 -1 -1 -1" - write /sys/devices/platform/boot_dramboost/dramboost/dramboost 0 - exec /system/bin/e2fsck -f -p /dev/block/platform/bootdevice/by-name/cache - mount ext4 /dev/block/platform/bootdevice/by-name/cache /cache rw wait chmod 0660 /dev/spm chown system system /dev/spm start spm_script @@ -110,27 +97,19 @@ on charger start fuelgauged start fuelgauged_nvram - chown system system /sys/class/leds/lcd-backlight/brightness - chown system system /sys/class/leds/red/brightness - chown system system /sys/class/leds/green/brightness - - start vendor.light-default - # switch to sched-dvfs - write /sys/devices/system/cpu/cpufreq/policy0/scaling_governor "schedutil" - write /sys/devices/system/cpu/cpufreq/policy6/scaling_governor "schedutil" - on fs wait_for_prop hwservicemanager.ready "true" mount_all --early write /sys/block/zram0/comp_algorithm lz4 write /proc/sys/vm/page-cluster 0 - write /proc/sys/vm/swappiness 60 - write /proc/sys/vm/direct_swappiness 50 + write /proc/sys/vm/swappiness 100 write /sys/kernel/mm/swap/vma_ra_enabled false swapon_all /vendor/etc/fstab.mt6781 + # Update touchpanel firmware in case we ship newer firmware in /odm + write /proc/touchpanel/tp_fw_update 0 + on late-fs - wait_for_prop hwservicemanager.ready "true" mount_all --late on post-fs @@ -142,20 +121,6 @@ on post-fs chmod 0770 /mnt/vendor/protect_s on post-fs-data - # boot time fs tune - write /sys/block/mmcblk0/queue/iostats 0 - write /sys/block/mmcblk0/queue/read_ahead_kb 2048 - write /sys/block/mmcblk0/queue/nr_requests 256 - write /sys/block/sdc/queue/iostats 0 - write /sys/block/sdc/queue/read_ahead_kb 2048 - write /sys/block/sdc/queue/nr_requests 256 - write /sys/block/dm-0/queue/read_ahead_kb 2048 - write /sys/block/dm-1/queue/read_ahead_kb 2048 - write /sys/block/dm-2/queue/read_ahead_kb 2048 - write /sys/block/dm-3/queue/read_ahead_kb 2048 - write /sys/block/dm-4/queue/read_ahead_kb 2048 - write /sys/block/dm-5/queue/read_ahead_kb 2048 - chown system system /mnt/vendor/nvcfg chmod 0771 /mnt/vendor/nvcfg restorecon_recursive /mnt/vendor/nvcfg @@ -811,21 +776,14 @@ on property:vold.decrypt=trigger_shutdown_framework setprop dev.bootcomplete 0 on property:sys.boot_completed=1 - write /sys/block/mmcblk0/queue/iostats 1 - write /sys/block/mmcblk0/queue/read_ahead_kb 512 - write /sys/block/mmcblk0/queue/nr_requests 128 - write /sys/block/sdc/queue/iostats 1 - write /sys/block/sdc/queue/read_ahead_kb 512 - write /sys/block/sdc/queue/nr_requests 128 - write /sys/block/dm-0/queue/read_ahead_kb 128 - write /sys/block/dm-1/queue/read_ahead_kb 128 - write /sys/block/dm-2/queue/read_ahead_kb 128 - write /sys/block/dm-3/queue/read_ahead_kb 128 - write /sys/block/dm-4/queue/read_ahead_kb 128 - write /sys/block/dm-5/queue/read_ahead_kb 128 - write /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_req_ddr_opp -1 + # Disable edge limit control interface + write /proc/touchpanel/oplus_tp_limit_enable 0 + + # Enable oppo touchpanel direction + write /proc/touchpanel/oplus_tp_direction 1 + # OTG write /sys/devices/virtual/oplus_chg/usb/otg_switch 1 @@ -884,3 +842,13 @@ service mtk_secure_element_hal_service /vendor/bin/hw/android.hardware.secure_el class hal user secure_element group secure_element + +service charger /system/bin/charger + class charger + user system + group system graphics wakelock input + capabilities SYS_BOOT + file /dev/kmsg w + file /sys/fs/pstore/console-ramoops-0 r + file /sys/fs/pstore/console-ramoops r + file /proc/last_kmsg r diff --git a/rootdir/etc/ueventd.oplus.rc b/rootdir/etc/ueventd.oplus.rc index f948b2e..ab0489b 100644 --- a/rootdir/etc/ueventd.oplus.rc +++ b/rootdir/etc/ueventd.oplus.rc @@ -4,8 +4,6 @@ # SPDX-License-Identifier: Apache-2.0 # -# Charger -/sys/class/oplus_chg/* mmi_charging_enable 0660 system system - # WiFi firmware_directories /odm/etc/wifi/ + diff --git a/rro_overlays/CarrierConfigOverlay/Android.bp b/rro_overlays/CarrierConfigOverlay/Android.bp deleted file mode 100644 index 2dbdc6c..0000000 --- a/rro_overlays/CarrierConfigOverlay/Android.bp +++ /dev/null @@ -1,7 +0,0 @@ -runtime_resource_overlay { - name: "CarrierConfigOverlay", - theme: "CarrierConfigOverlay", - certificate: "platform", - sdk_version: "current", - product_specific: true -} diff --git a/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml b/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml deleted file mode 100644 index e452c74..0000000 --- a/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml b/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml deleted file mode 100644 index ca47fe5..0000000 --- a/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml +++ /dev/null @@ -1,6003 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Telstra [B] [M] [A] [S] - +61101 - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[A]_[S] - - - - - - - - - - - - - +64222022002 - - - - - - - - - - - - - - - - +6483083210 - - - - - - - - - - - - - - - +64204864236 - - - - - - - - - - - - - - - - - - +6421700700 - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - +64284808808 - - - - - - - - - - 1416 - - - - - 1416 - 19,20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Y!mobile - 1416 - - - - - - - - - - - - - - - - - - 1417 - - - - - - - - - - [B] [M] - connected_mmwave:5G,connected:5G,not_restricted_rrc_idle:5G - connected_mmwave,legacy,31;connected,legacy,31;connected_mmwave,not_restricted_rrc_con,31;connected,not_restricted_rrc_con,31;not_restricted_rrc_idle,not_restricted_rrc_con,15 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M] - - - - - - - - - 1417 - - - - - - - - - UQ mobile - - - - - - - - - povo - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +41794997979 - 30047 - - vvm_type_omtp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WiFi Calling - - - - - - - - - - - - - - - com.google.android.ims - 242 - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - com.google.android.ims - - - - - - 123 - - - - - - - - - - - - - - - - - - com.google.android.ims - - - - - - - - - - - com.google.android.ims - - - - - - - - - [B]_[M]_[S] - 22177 - - - - - - - - - vodafone ES WiFi Call - - - - - - - - - - - - [B] [M] [S] - 22123 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +34633633633 - - - - - - - - - 121 - - - - - - 2211 - - - - - - 2211 - - - - - - - 2211 - - - - - - 2211 - - - - - - 1210 - - - - - - - - - - - - - - - - - - - - - - - 1210 - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - com.google.android.ims - 888 - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M] - 1417 - - - - - - - - - - +33660660001 - - 22344 - vvm_type_omtp - fr.bouyguestelecom.vvmandroid - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - com.google.android.ims - 123 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 223 - vvm_type_omtp - - - - - - - - - - - - - - - 223 - vvm_type_omtp - - - - - - - - - - - - - - - 223 - vvm_type_omtp - - - - - - - - - - - - - - - - 223 - vvm_type_omtp - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 41919 - - - - - - - - - - - - - - - - [B]_[M]_[S] - 42020 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +447953222222 - [B]_[M]_[S] - com.google.android.ims - - - - - - - - - - - - - - [B]_[M]_[S] - +447782333123 - - - - - - - - - - - - - - - - [B] [M] [S] - 901 - com.google.android.ims - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - 121 - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - WiFiCall - - - - - - - - - - - - - - [B]_[M]_[S] - WiFiCall - - - - - - - - - - - - - - - - - - - - - - - 905 - - - - - - - - - - - [B]_[V] - - 759 - 07488222000 - Sky WiFiCall - - - - - - - - - - - - - 443 - - - - - - - - - - - 443 - - - - - - - - - [B]_[M]_[S] - +31624001233 - - - - - - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +31654501233 - - - - - - - - - - - - - - - - [B]_[M]_[S] - +31624001233 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1233 - +31612001233 - - - - - - - - - - - - - - - - - - 1233 - - - - - - - - - - +31624001233 - - - - - - - - - - - - - +31624001233 - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10 - - - - - - connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10 - - Tele2 NL WiFi - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - +48790200200 - - - - - - - - - - - [B]_[V] - - - - - - - - - Mobile Vikings WiFi Calling - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - 501501501 - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +48602950000 - - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - - - - - - - - - - connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10 - - - - - - - - - [B]_[M]_[S] - +48601222222 - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +905427542000 - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +40722033334 - - - - - - - - - - - - - [B]_[M]_[S] - +40766177177 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - 123 - - - - - - - - - - - - - - +351962000000 - - - - - - - - - - - - - - - - - - - [B]_[M]_[A]_[S]_[D] - 133 - - - - - - - - - [B]_[M]_[A]_[S]_[D] - 133 - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - 5555 - - - - - - - - - - - - - - [B]_[P]_[H] - - - - - - - - - [B]_[P]_[H] - - - - - - - - - - - [B]_[V] 3gpp-gba - PRD-IR92/15 term-[B]/[P]model device-type/smart-phone mno-custom/ProximusXCAPv2 ;3gpp-gba - +32475151969 - - - - - - - - - - - - [B]_[P]_[H] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - 5500 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - 3311 - - - - - - - - - - - - - - - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3311 - - - - - - - - - - - - - - - - - - - - - - +491793000333 - - - - - - - - - - - - - - - - [B] [M] [S] - - - - - - - - - - - - [B]_[M]_[S] - 171 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 171 - - - - - - - - - 171 - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30047 - - vvm_type_omtp - - - - - [B]_[M]_[S] - +41794997979 - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +38598151100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B] [M] [S] - *99 - - - - - - - - - - - - [B]_[M]_[S] - +420608989898 - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - [B]_[M]_[S] - +420603123311 - - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - [B]_[M]_[S] - 121 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - +306971000123 - - - COSMOTE WiFi Calling - - - - - - - - - - - - - - - - - - - - - - - 170 - [B]_[M]_[S] - - - - - - - - - - - - - - +36209400400 - [B]_[V] - - - - - - - - - - [B]_[M]_[S] - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - - - [B] [M] [S] - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - [B]_[M]_[S] - +421903333999 - [B]_[M]_[A]_[S]_[D] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +436762200 - [B]_[M]_[S] - WLAN-Call - - - - - - - - - - - - - - - - - - - - - - - - 66477 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - [B]_[M]_[S] - +38970121212 - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - [B]_[V] - - - - - - - - - - [M] [P] [V] - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - [B]_[V] - - 759 - 07488222000 - Sky WiFiCall - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[L]_[T] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[L]_[T] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[L]_[T] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[L]_[T] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[L]_[T] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - - - - - - - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - - 444 - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - 808 - - - - - - - - 808 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - stc KW - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - 132 - - - - - - - - - - - - - - - - - - - - - 132 - WiFi call - - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PRD-IR92/13 term-[B]/[P]-[V] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.google.android.ims - - [B]_[M]/AMX_MEX - *86 - - - - - - - - - - - - - - - - - - com.google.android.ims - - - - - - - *86 - - - - - - - - - - *86 - - [B]_[M]_[S] - - - - - - - - - - - - - - - - - - com.google.android.ims - *86 - - - - - - - 31654501233 - Verizon - - - - - - 31654501233 - Verizon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sprint - - us-sprint_cid_1788 - - - - - - - - - - - - - - - - - - - - - - - - - - TMO - PRD-[U] CPM/[C] RCS-client/[R] [B]/[M] client-[B]/[X][F] OS-Android/[E] cc/[G] - - - - - rscp - - - - T-Mobile - - - - - - - us-tmobile - 19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.metropcs.service.vvm - Metro by T-Mobile - 19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Assurance Wireless - 19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ultra - - - - - - - - Mint - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Verizon - - - 3 - - - - - - - - - - - - - - - - - [B]---[P]---[V] - - - - - *86 - - - - - - - - - - - Visible - - x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE## - - - - - - Visible - - - - - x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cricket - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [B] [V] - +16473832355 - - - - - - - - - - - +16473832355 - - - - - - +16473832333 - - - - - - - - *111 - - - - - - - - - - - - - - - *80 - - [B]_[M]/AMX GTM - - - - - - - - *77 - - - - - - - - - - *80 - - - - - [B]_[M]/AMX HND - - - - - - *80 - - - - - - *80 - - - - - - - *123 - - - - - - *86 - - - - - - *80 - - - - - - - - - *111 - - - - - - *90 - - - - - - - - - - - *80 - - [B]_[M]/AMX CRI - - - - - - - 600 - - - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - 500 - - - - - - - - - - - - - - - - - - [B]_[M]_[S] ReadyEMGIMS - - - - - - - - - - - - [B]_[M]/AMX_CHL - *20 - - - - - - - - - - - - - - - - - - - - - - - [B]_[M]_[S] - *123 - - - - - - - - *123 - - - - - - - - - 3508888888 - - - - - - - - - - - [B]_[M]/AMX_COL - - - - - - - *123 - - - - - - - - - - - - - - - +573025001000 - - - - - - - - - - - [B]_[V] - - - > - - - - - - - - - - - - - - [B]_[M]_[S] - - - > - - - *169 - - - - - - - - - - 131 - - [B]_[M]/AMX_PER - - - - - - - - - - - - - *555 - - - - - - - - - - - *100 - - [B]_[M]/AMX_BRA - - - - - - - - - *100 - - - - - - - - - *289 - - - - - - - - - - - - - - - - - 1190 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rro_overlays/CarrierConfigOverlaySpaced/Android.bp b/rro_overlays/CarrierConfigOverlaySpaced/Android.bp new file mode 100644 index 0000000..8fc5745 --- /dev/null +++ b/rro_overlays/CarrierConfigOverlaySpaced/Android.bp @@ -0,0 +1,11 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "CarrierConfigOverlaySpaced", + sdk_version: "current", + product_specific: true, +} diff --git a/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml b/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..e9efabb --- /dev/null +++ b/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml b/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml new file mode 100644 index 0000000..874e6c2 --- /dev/null +++ b/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml @@ -0,0 +1,1568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.google.android.ims + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.google.android.ims + + + + + + + + + + + + + + + + + + + + + 170 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 42020 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PRD-IR92/13 [B]/[P]-[O] device-type/smart-phone mno-custom/[N] + PRD-IR92/13 [B]/[P]-[O] device-type/smart-phone mno-custom/[N] + + + + + + + + + + + + + + + + + + + + +48602950000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40722033334 + + + + + + + + + + + + + + + + + + + + + + + + + 121 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vodafone ES WiFi Call + + + + + + + + + + 123 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [B]_[P]_[H] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rro_overlays/FrameworksResOverlaySpaced/Android.bp b/rro_overlays/FrameworksResOverlaySpaced/Android.bp new file mode 100644 index 0000000..566426a --- /dev/null +++ b/rro_overlays/FrameworksResOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "FrameworksResOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} \ No newline at end of file diff --git a/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml b/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..5b0b04c --- /dev/null +++ b/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml similarity index 88% rename from overlay/frameworks/base/core/res/res/values/config.xml rename to rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml index 68833a2..04d27f3 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml @@ -369,6 +369,12 @@ true + + /sys/class/oplus_chg/battery/voocchg_ing + + + 1 + true @@ -444,4 +450,67 @@ rates are available from hardware composer. Only has an effect if the value is non-zero. --> 120 + + + true + + + true + + + true + + + 1 + + + + 0 + 90 + + + + + 0 + 70 + + + + + 0 + 50 + 150 + 50 + + + + + 0 + 40 + 160 + 165 + 500 + 600 + + + + true + + + true + + + 0 diff --git a/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml b/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml new file mode 100644 index 0000000..28bbfa3 --- /dev/null +++ b/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml @@ -0,0 +1,41 @@ + + + + + + + 115px + + + 110.0px + 110.0px + 110.0px + + + 20px + + + 81.0px + + + 12dp + diff --git a/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/rro_overlays/FrameworksResOverlaySpaced/res/xml/power_profile.xml similarity index 100% rename from overlay/frameworks/base/core/res/res/xml/power_profile.xml rename to rro_overlays/FrameworksResOverlaySpaced/res/xml/power_profile.xml diff --git a/rro_overlays/OplusDozeOverlaySpaced/Android.bp b/rro_overlays/OplusDozeOverlaySpaced/Android.bp new file mode 100644 index 0000000..d751fa6 --- /dev/null +++ b/rro_overlays/OplusDozeOverlaySpaced/Android.bp @@ -0,0 +1,10 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "OplusDozeOverlaySpaced", + product_specific: true, +} \ No newline at end of file diff --git a/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml b/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..21cc174 --- /dev/null +++ b/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/overlay/hardware/oplus/doze/res/values/config.xml b/rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml similarity index 98% rename from overlay/hardware/oplus/doze/res/values/config.xml rename to rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml index fd7b651..7e3f60d 100644 --- a/overlay/hardware/oplus/doze/res/values/config.xml +++ b/rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml @@ -19,5 +19,4 @@ 0.0 5.0 - - + \ No newline at end of file diff --git a/rro_overlays/SettingsOverlaySpaced/Android.bp b/rro_overlays/SettingsOverlaySpaced/Android.bp new file mode 100644 index 0000000..21cfd9b --- /dev/null +++ b/rro_overlays/SettingsOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "SettingsOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} \ No newline at end of file diff --git a/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml b/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..182d26f --- /dev/null +++ b/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/rro_overlays/SettingsOverlaySpaced/res/values/config.xml b/rro_overlays/SettingsOverlaySpaced/res/values/config.xml new file mode 100644 index 0000000..1fbc04b --- /dev/null +++ b/rro_overlays/SettingsOverlaySpaced/res/values/config.xml @@ -0,0 +1,33 @@ + + + + + true + + + 3 + diff --git a/rro_overlays/SystemUIOverlaySpaced/Android.bp b/rro_overlays/SystemUIOverlaySpaced/Android.bp new file mode 100644 index 0000000..d031bd0 --- /dev/null +++ b/rro_overlays/SystemUIOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "SystemUIOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} \ No newline at end of file diff --git a/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml b/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..2d0e4c0 --- /dev/null +++ b/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/config.xml similarity index 78% rename from overlay/frameworks/base/packages/SystemUI/res/values/config.xml rename to rro_overlays/SystemUIOverlaySpaced/res/values/config.xml index b9e5f8b..3434fea 100644 --- a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml +++ b/rro_overlays/SystemUIOverlaySpaced/res/values/config.xml @@ -31,4 +31,10 @@ 24.0px + + 60 + + + false diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/dimens.xml similarity index 100% rename from overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml rename to rro_overlays/SystemUIOverlaySpaced/res/values/dimens.xml diff --git a/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml new file mode 100644 index 0000000..1aaa55d --- /dev/null +++ b/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml @@ -0,0 +1,13 @@ + + + + + + 19 + + diff --git a/rro_overlays/TelephonyOverlaySpaced/Android.bp b/rro_overlays/TelephonyOverlaySpaced/Android.bp new file mode 100644 index 0000000..9524a66 --- /dev/null +++ b/rro_overlays/TelephonyOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "TelephonyOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} \ No newline at end of file diff --git a/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml b/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..38898eb --- /dev/null +++ b/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/overlay/packages/services/Telephony/res/values/config.xml b/rro_overlays/TelephonyOverlaySpaced/res/values/config.xml similarity index 99% rename from overlay/packages/services/Telephony/res/values/config.xml rename to rro_overlays/TelephonyOverlaySpaced/res/values/config.xml index 1f95aa7..77ccc35 100644 --- a/overlay/packages/services/Telephony/res/values/config.xml +++ b/rro_overlays/TelephonyOverlaySpaced/res/values/config.xml @@ -24,4 +24,4 @@ com.mediatek.ims - + \ No newline at end of file diff --git a/rro_overlays/TetheirngOverlay/Android.bp b/rro_overlays/TetheirngOverlay/Android.bp deleted file mode 100644 index feaaf46..0000000 --- a/rro_overlays/TetheirngOverlay/Android.bp +++ /dev/null @@ -1,7 +0,0 @@ -runtime_resource_overlay { - name: "TetheringConfigOverlay", - theme: "TetheringConfigOverlay", - certificate: "platform", - sdk_version: "current", - product_specific: true -} diff --git a/rro_overlays/TetheringResOverlaySpaced/Android.bp b/rro_overlays/TetheringResOverlaySpaced/Android.bp new file mode 100644 index 0000000..be41f95 --- /dev/null +++ b/rro_overlays/TetheringResOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "TetheringResOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} diff --git a/rro_overlays/TetheirngOverlay/AndroidManifest.xml b/rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml similarity index 59% rename from rro_overlays/TetheirngOverlay/AndroidManifest.xml rename to rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml index 15d9835..844f49a 100644 --- a/rro_overlays/TetheirngOverlay/AndroidManifest.xml +++ b/rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml @@ -1,11 +1,16 @@ + + + package="com.android.networkstack.tethering.spaced"> + - + \ No newline at end of file diff --git a/rro_overlays/TetheirngOverlay/res/values/config.xml b/rro_overlays/TetheringResOverlaySpaced/res/values/config.xml similarity index 100% rename from rro_overlays/TetheirngOverlay/res/values/config.xml rename to rro_overlays/TetheringResOverlaySpaced/res/values/config.xml diff --git a/rro_overlays/WifiOverlay/Android.bp b/rro_overlays/WifiOverlay/Android.bp deleted file mode 100644 index 5407765..0000000 --- a/rro_overlays/WifiOverlay/Android.bp +++ /dev/null @@ -1,7 +0,0 @@ -runtime_resource_overlay { - name: "WifiOverlay", - theme: "WifiOverlay", - certificate: "platform", - sdk_version: "current", - product_specific: true -} diff --git a/rro_overlays/WifiOverlay/AndroidManifest.xml b/rro_overlays/WifiOverlay/AndroidManifest.xml deleted file mode 100644 index 4a18feb..0000000 --- a/rro_overlays/WifiOverlay/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/rro_overlays/WifiResOverlaySpaced/Android.bp b/rro_overlays/WifiResOverlaySpaced/Android.bp new file mode 100644 index 0000000..b7b3055 --- /dev/null +++ b/rro_overlays/WifiResOverlaySpaced/Android.bp @@ -0,0 +1,12 @@ +// +// Copyright (C) 2023 The LineageOS Project +// +// SPDX-License-Identifier: Apache-2.0 +// + +runtime_resource_overlay { + name: "WifiResOverlaySpaced", + sdk_version: "current", + resource_dirs: ["res"], + vendor: true, +} diff --git a/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml b/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml new file mode 100644 index 0000000..b8fc4bb --- /dev/null +++ b/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/rro_overlays/WifiOverlay/res/values/config.xml b/rro_overlays/WifiResOverlaySpaced/res/values/config.xml similarity index 100% rename from rro_overlays/WifiOverlay/res/values/config.xml rename to rro_overlays/WifiResOverlaySpaced/res/values/config.xml diff --git a/sepolicy/vendor/file.te b/sepolicy/vendor/file.te index 1a96c2e..52afb22 100644 --- a/sepolicy/vendor/file.te +++ b/sepolicy/vendor/file.te @@ -25,6 +25,14 @@ type factorytestreport_vendor_data_file, data_file_type, file_type; type oplus_fingerprint_file, data_file_type, file_type; type vendor_proc_fingerprint, fs_type, proc_type; +# Latency +type latency_device, dev_type; +type sysfs_mtk_cpufreq, fs_type, sysfs_type; +type sysfs_mtk_gpufreq, fs_type, sysfs_type; + +# PPS +type pps_socket, file_type; + # NFC type vendor_proc_nfc_chipset, fs_type, proc_type; @@ -42,6 +50,8 @@ type oplus_block_device, dev_type; type vendor_proc_oplus_version, fs_type, proc_type; # Performance -type proc_vm_dirty, fs_type, proc_type; type proc_sched_stune, fs_type, proc_type; type proc_sched_assist, fs_type, proc_type; + +# GPU +type vendor_sysfs_gpu, fs_type, sysfs_type; diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 4cd0b1e..406849b 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -5,6 +5,7 @@ # Charging /dev/oplus_chg u:object_r:oplus_charger_device:s0 +/sys/class/oplus_chg/battery/voocchg_ing u:object_r:vendor_sysfs_battery_supply:s0 /(odm|vendor/odm)/bin/hw/vendor\.oplus\.hardware\.charger@1\.0-service u:object_r:hal_charger_oplus_exec:s0 # Display @@ -13,9 +14,6 @@ # Light /(vendor|system/vendor)/bin/hw/android\.hardware\.light-service\.spaced u:object_r:hal_light_default_exec:s0 -# LiveDisplay -/(vendor|system/vendor)/bin/hw/vendor\.lineage\.livedisplay@2\.1-service-spaced u:object_r:hal_lineage_livedisplay_spaced_exec:s0 - # Sensors /(vendor|system/vendor)/bin/hw/android\.hardware\.sensors@2\.0-service-multihal\.spaced u:object_r:mtk_hal_sensors_exec:s0 /(odm|vendor/odm)/bin/hw/vendor\.oplus\.hardware\.oplusSensor@1\.0-service u:object_r:mtk_hal_sensors_exec:s0 @@ -41,6 +39,9 @@ /(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.3-service\.oplus u:object_r:hal_fingerprint_default_exec:s0 /vendor/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-silead u:object_r:hal_fingerprint_default_exec:s0 +# Latency +/dev/cpu_dma_latency u:object_r:latency_device:s0 + # Firmwares /odm/vendor/firmware(/.*)? u:object_r:vendor_firmware_file:s0 /odm/firmware(/.*)? u:object_r:vendor_firmware_file:s0 @@ -48,8 +49,8 @@ # NFC /dev/pn553 u:object_r:nfc_device:s0 -# Touch -/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@[0-9]\.[0-9]-service\.oplus u:object_r:hal_lineage_touch_default_exec:s0 +# Perfmgr +/(vendor|system/vendor)/bin/hw/android\.hardware\.power-service\.spaced-libperfmgr u:object_r:hal_power_default_exec:s0 # Vibrator /vendor/bin/hw/android\.hardware\.vibrator-service\.mediatek u:object_r:hal_vibrator_default_exec:s0 diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts index 31e2245..a711ff6 100644 --- a/sepolicy/vendor/genfs_contexts +++ b/sepolicy/vendor/genfs_contexts @@ -15,6 +15,8 @@ genfscon proc /wireless genfscon sysfs /class/oplus_chg u:object_r:vendor_sysfs_usb_supply:s0 genfscon sysfs /devices/virtual/oplus_chg u:object_r:vendor_sysfs_usb_supply:s0 genfscon sysfs /devices/platform/extcon_usb/extcon u:object_r:sysfs_extcon:s0 +genfscon sysfs /devices/system/cpu/cpufreq/mtk/.cluster_(min|max)_freq u:object_r:sysfs_mtk_cpufreq:s0 +genfscon sysfs /kernel/gpu/gpu_(min|max)_clock u:object_r:sysfs_mtk_gpufreq:s0 # Display genfscon proc /devinfo/lcd u:object_r:vendor_proc_display:s0 @@ -43,8 +45,6 @@ genfscon sysfs /class/oplus_sensor u:object_r:vendor_sysfs_oplu genfscon proc /oplusVersion u:object_r:vendor_proc_oplus_version:s0 # Performance -genfscon proc /sys/vm/dirty_writeback_centisecs u:object_r:proc_vm_dirty:s0 -genfscon proc /sys/kernel/sched_stune_task_threshold u:object_r:proc_sched_stune:s0 genfscon proc /sys/kernel/sched_assist_enabled u:object_r:proc_sched_assist:s0 genfscon proc /sys/kernel/sched_assist_scene u:object_r:proc_sched_assist:s0 diff --git a/sepolicy/vendor/hal_lineage_health.te b/sepolicy/vendor/hal_lineage_health.te deleted file mode 100644 index 53cd888..0000000 --- a/sepolicy/vendor/hal_lineage_health.te +++ /dev/null @@ -1 +0,0 @@ -rw_dir_file(hal_lineage_health_default, vendor_sysfs_usb_supply) diff --git a/sepolicy/vendor/hal_lineage_livedisplay.te b/sepolicy/vendor/hal_lineage_livedisplay.te deleted file mode 100644 index cc7c993..0000000 --- a/sepolicy/vendor/hal_lineage_livedisplay.te +++ /dev/null @@ -1,11 +0,0 @@ -type hal_lineage_livedisplay_spaced, domain; -hal_server_domain(hal_lineage_livedisplay_spaced, hal_lineage_livedisplay) - -type hal_lineage_livedisplay_spaced_exec, exec_type, vendor_file_type, file_type; -init_daemon_domain(hal_lineage_livedisplay_spaced) - -# Allow LiveDisplay HAL's default implementation to use vendor-binder service -vndbinder_use(hal_lineage_livedisplay_spaced) - -allow hal_lineage_livedisplay_spaced vendor_sysfs_graphics:file rw_file_perms; -allow hal_lineage_livedisplay_spaced vendor_sysfs_graphics:dir search; \ No newline at end of file diff --git a/sepolicy/vendor/hal_lineage_touch_default.te b/sepolicy/vendor/hal_lineage_touch_default.te deleted file mode 100644 index cb7e3bd..0000000 --- a/sepolicy/vendor/hal_lineage_touch_default.te +++ /dev/null @@ -1,2 +0,0 @@ -allow hal_lineage_touch_default vendor_proc_display:dir search; -allow hal_lineage_touch_default vendor_proc_display:file rw_file_perms; diff --git a/sepolicy/vendor/hal_power_default.te b/sepolicy/vendor/hal_power_default.te new file mode 100644 index 0000000..ce94424 --- /dev/null +++ b/sepolicy/vendor/hal_power_default.te @@ -0,0 +1,55 @@ +typeattribute hal_power_default mlstrustedsubject; + +allow hal_power_default sysfs_devices_system_cpu:file rw_file_perms; +allow hal_power_default cgroup:dir search; +allow hal_power_default cgroup:file rw_file_perms; +allow hal_power_default vendor_sysfs_gpu:dir search; +allow hal_power_default vendor_sysfs_gpu:file rw_file_perms; + +# To get/set powerhal state property +set_prop(hal_power_default, vendor_power_prop) + +# Rule for hal_power_default to access graphics composer process +unix_socket_connect(hal_power_default, pps, hal_graphics_composer_default); + +# Set scheduling info for apps (for adpf) +allow hal_power_default appdomain:process { getsched setsched }; +allow hal_power_default self:capability sys_nice; + +# Set scheduling info for system_server (for adpf) +allow hal_power_default system_server:process setsched; + +# Set CPU frequency +allow hal_power_default sysfs_mtk_cpufreq:file rw_file_perms; +allow hal_power_default sysfs_devices_system_cpu:file rw_file_perms; + +# Set GPU frequency +allow hal_power_default sysfs_mtk_gpufreq:file rw_file_perms; +allow hal_power_default sysfs_gpu:dir r_dir_perms; +allow hal_power_default sysfs_gpu:file rw_file_perms; + +# Set perfmgr nodes +allow hal_power_default proc_perfmgr:dir r_dir_perms; +allow hal_power_default sysfs_fpsgo:file w_file_perms; +allow hal_power_default proc_ppm:dir r_dir_perms; +allow hal_power_default proc_ppm:file rw_file_perms; +allow hal_power_default proc_cpufreq:dir r_dir_perms; +allow hal_power_default proc_cpufreq:file rw_file_perms; +allow hal_power_default proc_hps:dir r_dir_perms; +allow hal_power_default proc_hps:file rw_file_perms; +allow hal_power_default proc_cm_mgr:dir r_dir_perms; +allow hal_power_default proc_cm_mgr:file rw_file_perms; +allow hal_power_default proc_fliperfs:dir r_dir_perms; +allow hal_power_default proc_fliperfs:file rw_file_perms; +allow hal_power_default sysfs_fbt_cpu:dir r_dir_perms; +allow hal_power_default sysfs_fbt_cpu:file rw_file_perms; +allow hal_power_default sysfs_fbt_fteh:dir r_dir_perms; +allow hal_power_default sysfs_fbt_fteh:file rw_file_perms; +allow hal_power_default sysfs_fpsgo:dir r_dir_perms; +allow hal_power_default sysfs_fpsgo:file rw_file_perms; +allow hal_power_default vendor_sysfs_gpu:dir search; +allow hal_power_default vendor_sysfs_gpu:file rw_file_perms; + +# Display +allow hal_power_default vendor_proc_display:dir r_dir_perms; +allow hal_power_default vendor_proc_display:file rw_file_perms; diff --git a/sepolicy/vendor/mtk_hal_power.te b/sepolicy/vendor/mtk_hal_power.te deleted file mode 100644 index 5ed0d7d..0000000 --- a/sepolicy/vendor/mtk_hal_power.te +++ /dev/null @@ -1,2 +0,0 @@ -allow mtk_hal_power vendor_proc_display:dir search; -allow mtk_hal_power vendor_proc_display:file w_file_perms; diff --git a/sepolicy/vendor/system_server.te b/sepolicy/vendor/system_server.te new file mode 100644 index 0000000..a313e39 --- /dev/null +++ b/sepolicy/vendor/system_server.te @@ -0,0 +1,2 @@ +allow system_server vendor_sysfs_battery_supply:file r_file_perms; +allow system_server vendor_sysfs_usb_supply:file r_file_perms; diff --git a/sepolicy/vendor/vendor_init.te b/sepolicy/vendor/vendor_init.te index 77d1a89..1e333fb 100644 --- a/sepolicy/vendor/vendor_init.te +++ b/sepolicy/vendor/vendor_init.te @@ -11,4 +11,4 @@ allow vendor_init vendor_sysfs_otg_switch:file w_file_perms; get_prop(vendor_init, vendor_variant_prop) -set_prop(vendor_init, vendor_mtk_pq_prop) +set_prop(vendor_init, vendor_mtk_pq_prop) \ No newline at end of file diff --git a/system.prop b/system.prop index 87fa846..d4838a5 100644 --- a/system.prop +++ b/system.prop @@ -13,6 +13,9 @@ Build.BRAND=MTK # Camera oplus.camera.packname=com.oplus.camera +# Charger +ro.charger.enable_suspend=true + # Display ro.opengles.version=196610 diff --git a/update-sha1sums.py b/update-sha1sums.py new file mode 100755 index 0000000..628f76e --- /dev/null +++ b/update-sha1sums.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# +# Copyright (C) 2016 The CyanogenMod Project +# Copyright (C) 2017-2018 The LineageOS 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. +# + +from hashlib import sha1 +import sys + +device='spaced' +vendor='realme' + +lines = [ line for line in open('proprietary-files.txt', 'r') ] +vendorPath = '../../../vendor/' + vendor + '/' + device + '/proprietary' +needSHA1 = False + +def cleanup(): + for index, line in enumerate(lines): + # Remove '\n' character + line = line[:-1] + + # Skip empty or commented lines + if len(line) == 0 or line[0] == '#': + continue + + # Drop SHA1 hash, if existing + if '|' in line: + line = line.split('|')[0] + lines[index] = '%s\n' % (line) + +def update(): + for index, line in enumerate(lines): + # Remove '\n' character + line = line[:-1] + + # Skip empty lines + if len(line) == 0: + continue + + # Check if we need to set SHA1 hash for the next files + if line[0] == '#': + needSHA1 = (' - from' in line) + continue + + if needSHA1: + # Remove existing SHA1 hash + line = line.split('|')[0] + filePath = line.split(':')[1] if len(line.split(':')) == 2 else line + + if filePath[0] == '-': + file = open('%s/%s' % (vendorPath, filePath[1:]), 'rb').read() + else: + file = open('%s/%s' % (vendorPath, filePath), 'rb').read() + + hash = sha1(file).hexdigest() + lines[index] = '%s|%s\n' % (line, hash) + +if len(sys.argv) == 2 and sys.argv[1] == '-c': + cleanup() +else: + update() + +with open('proprietary-files.txt', 'w') as file: + for line in lines: + file.write(line) + + file.close() diff --git a/vendor.prop b/vendor.prop index 2cb8598..8ae39c4 100644 --- a/vendor.prop +++ b/vendor.prop @@ -96,8 +96,8 @@ debug.sf.early.sf.duration=27600000 debug.sf.early.app.duration=20000000 debug.sf.earlyGl.sf.duration=27600000 debug.sf.earlyGl.app.duration=20000000 -debug.sf.hwc.min.duration=23000000 -debug.sf.latch_unsignaled=true +debug.sf.hwc.min.duration=17000000 +debug.sf.auto_latch_unsignaled=0 # DRAM ro.vendor.mtk_config_max_dram_size=0x800000000 @@ -243,6 +243,11 @@ ro.vendor.mtk_nn_baseline_support=1 debug.mtk_tflite.target_nnapi=29 ro.vendor.mtk_nn_quant_preferred=1 +# Vibrator +ro.vendor.vibrator.hal.click.duration=70 +ro.vendor.vibrator.hal.tick.duration=60 +ro.vendor.vibrator.hal.texture_tick.duration=40 + # WFD ro.vendor.mtk_wfd_support=1 ro.vendor.wfd.dummy.enable=0 @@ -255,6 +260,9 @@ ro.vendor.mediatek.version.branch=alps-mp-s0.mp1.tc16sp-pr9 ro.vendor.mediatek.version.release=alps-mp-s0.mp1.tc16sp-pr9-V1 ro.vendor.mtk_gamehdr_support=1 +# VNDK +ro.vndk.version=35 + # WiFi ro.vendor.wifi.sap.interface=ap0 ro.vendor.mtk_wappush_support=1 diff --git a/vendorsetup.sh b/vendorsetup.sh new file mode 100644 index 0000000..e44a806 --- /dev/null +++ b/vendorsetup.sh @@ -0,0 +1,20 @@ +echo start cloning repos +VT=vendor/realme/spaced/spaced-vendor.mk +if ! [ -a $VT ]; then git clone https://github.com/realme-mt6781-dev/android_vendor_realme_spaced vendor/realme/spaced +fi +KT=kernel/realme/mt6781/build.sh +if ! [ -a $KT ]; then git clone --depth=1 https://github.com/HELLINFIX/android_kernel_realme_mt6781.git kernel/realme/mt6781 +fi +MTK_SEPOLICY=device/mediatek/sepolicy_vndr/SEPolicy.mk +if ! [ -a $MTK_SEPOLICY ]; then git clone https://github.com/realme-mt6781-dev/android_device_mediatek_sepolicy_vndr device/mediatek/sepolicy_vndr +fi +MTK=hardware/mediatek/Android.bp +if ! [ -a $MTK ]; then git clone https://github.com/realme-mt6781-dev/android_hardware_mediatek hardware/mediatek +fi +OPLUS=hardware/oplus/Android.bp +if ! [ -a $OPLUS ]; then git clone https://github.com/LineageOS/android_hardware_oplus hardware/oplus +fi +CLANG17=prebuilts/clang/host/linux-x86/clang-r487747/bin/clang +if ! [ -a $CLANG17 ]; then git clone --depth=1 git clone https://gitlab.com/projectelixiros/android_prebuilts_clang_host_linux-x86_clang-r487747 prebuilts/clang/host/linux-x86/clang-r487747 +fi +echo end cloning