From 50f3bfa31a0cb82c1bbc0667cb431564e03f6678 Mon Sep 17 00:00:00 2001 From: roynatech2544 Date: Mon, 10 Oct 2022 22:16:39 +0900 Subject: [PATCH] universal7885: parts-aidl: Refactor swap impl --- .../eurekateam/samsungextras/BootReceiver.kt | 1 - .../samsungextras/interfaces/Swap.kt | 3 +- .../samsungextras/swap/SwapFragment.kt | 14 ++++-- .../vendor.eureka.hardware.parts/1/.hash | 2 +- .../eureka/hardware/parts/ISwapOnData.aidl | 2 +- .../eureka/hardware/parts/ISwapOnData.aidl | 2 +- .../apps/aidl-support/parts/default/Swap.cpp | 46 +++++++++++++------ .../apps/aidl-support/parts/default/Swap.h | 2 +- .../eureka/hardware/parts/ISwapOnData.aidl | 2 +- 9 files changed, 49 insertions(+), 25 deletions(-) diff --git a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/BootReceiver.kt b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/BootReceiver.kt index 0249de1..5cc5d68 100644 --- a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/BootReceiver.kt +++ b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/BootReceiver.kt @@ -41,7 +41,6 @@ class BootReceiver : BroadcastReceiver() { // ZRAM val mSwap = Swap() - mSwap.setSize(mSharedPreferences.getInt(SwapFragment.PREF_SWAP_SIZE, 50)) mSwap.setSwapOn(mSharedPreferences.getBoolean(SwapFragment.PREF_SWAP_ENABLE, false)) // Display diff --git a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/interfaces/Swap.kt b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/interfaces/Swap.kt index ff8d16e..8230eda 100644 --- a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/interfaces/Swap.kt +++ b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/interfaces/Swap.kt @@ -27,7 +27,8 @@ class Swap { } fun setSwapOn(mEnabled: Boolean) = if (mEnabled) mSwap.setSwapOn() else mSwap.setSwapOff() - fun setSize(mSize: Int) = mSwap.setSwapSize(mSize) + fun mkFile(mSize: Int) = mSwap.makeSwapFile(mSize) + fun delFile() = mSwap.removeSwapFile() external fun getFreeSpace(): Double external fun getSwapSize(): Long } diff --git a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/swap/SwapFragment.kt b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/swap/SwapFragment.kt index d8c07ae..a5caaa1 100644 --- a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/swap/SwapFragment.kt +++ b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/swap/SwapFragment.kt @@ -17,6 +17,8 @@ package com.eurekateam.samsungextras.swap import android.content.SharedPreferences import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.widget.Switch import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -34,6 +36,8 @@ class SwapFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeLi private lateinit var mSwapEnable: MainSwitchPreference private lateinit var mFreeSpace: Preference private lateinit var mSwapFileSize: Preference + private var mSwapSize = 0 + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { val mSwap = Swap() addPreferencesFromResource(R.xml.swap_settings) @@ -57,10 +61,12 @@ class SwapFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeLi val mSwap = Swap() if (preference == mSwapSizePref) { val value = newValue as Int - mSwap.setSize(value) + mSwapSize = value mSharedPreferences.edit().putInt(PREF_SWAP_SIZE, value).apply() mFreeSpace.summary = "${mSwap.getFreeSpace()} GB" - mSwapFileSize.summary = "${mSwap.getSwapSize()} MB" + val mHandler = Handler(Looper.getMainLooper()) + mSwapFileSize.summary = "${mSwapSize * 10} MB applied on next enable" + mHandler.postDelayed({ mSwapFileSize.summary = "${mSwap.getSwapSize()} MB" }, 1500) return true } return false @@ -69,13 +75,15 @@ class SwapFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeLi override fun onSwitchChanged(switchView: Switch, isChecked: Boolean) { mSwapEnable.isEnabled = false val mSwap = Swap() + if (isChecked) mSwap.mkFile(mSwapSize) else mSwap.delFile() mSwap.setSwapOn(isChecked) mSwapEnable.isEnabled = true mSharedPreferences.edit().putBoolean(PREF_SWAP_ENABLE, isChecked).apply() mSwapSizePref.isEnabled = !isChecked mFreeSpace.summary = "${mSwap.getFreeSpace()} GB" mSwapFileSize.summary = "${mSwap.getSwapSize()} MB" - } + } + companion object { const val PREF_SWAP_SIZE = "swap_size" const val PREF_SWAP_ENABLE = "swap_enable" diff --git a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/.hash b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/.hash index b9f2b69..68d064b 100644 --- a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/.hash +++ b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/.hash @@ -1 +1 @@ -330aae72d01c9055be476b739e8c01df433f0ea2 +d1cebfb943ba21a23e9c502b43d6c2766f6e608d diff --git a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/vendor/eureka/hardware/parts/ISwapOnData.aidl b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/vendor/eureka/hardware/parts/ISwapOnData.aidl index 73a69a1..aa98e39 100644 --- a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/vendor/eureka/hardware/parts/ISwapOnData.aidl +++ b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/1/vendor/eureka/hardware/parts/ISwapOnData.aidl @@ -26,5 +26,5 @@ interface ISwapOnData { oneway void setSwapOn(); - oneway void setSwapSize(in int size); + oneway void makeSwapFile(in int size); } diff --git a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/current/vendor/eureka/hardware/parts/ISwapOnData.aidl b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/current/vendor/eureka/hardware/parts/ISwapOnData.aidl index 2ecce88..b83d5b0 100644 --- a/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/current/vendor/eureka/hardware/parts/ISwapOnData.aidl +++ b/universal7885-common/apps/aidl-support/parts/aidl_api/vendor.eureka.hardware.parts/current/vendor/eureka/hardware/parts/ISwapOnData.aidl @@ -37,5 +37,5 @@ interface ISwapOnData { oneway void removeSwapFile(); oneway void setSwapOff(); oneway void setSwapOn(); - oneway void setSwapSize(in int size); + oneway void makeSwapFile(in int size); } diff --git a/universal7885-common/apps/aidl-support/parts/default/Swap.cpp b/universal7885-common/apps/aidl-support/parts/default/Swap.cpp index 6819639..90084a0 100644 --- a/universal7885-common/apps/aidl-support/parts/default/Swap.cpp +++ b/universal7885-common/apps/aidl-support/parts/default/Swap.cpp @@ -20,7 +20,6 @@ #include #include -static int mSwapSize = 100; extern int mkswap(const char *filename); extern void mkfile(int filesize, const char *name); @@ -32,41 +31,58 @@ static std::mutex thread_lock; static bool swapOnRes = false; -::ndk::ScopedAStatus SwapOnData::setSwapSize(int32_t size) { - mSwapSize = size; +static inline bool swapfile_exist(void) { + return access(SWAP_PATH, F_OK) == 0; +} + +static void makeFile(int32_t mSwapSize) { + const std::lock_guard lock(thread_lock); + mkfile(mSwapSize * 10, SWAP_PATH); + mkswap(SWAP_PATH); +} + +::ndk::ScopedAStatus SwapOnData::makeSwapFile(int32_t size) { + if (swapfile_exist()) return ::ndk::ScopedAStatus::ok(); + std::thread makefile_thread(makeFile, size); + makefile_thread.detach(); + return ::ndk::ScopedAStatus::ok(); } +static void rmswap(void) { + const std::lock_guard lock(thread_lock); + std::remove(SWAP_PATH); +} + ::ndk::ScopedAStatus SwapOnData::removeSwapFile(void) { - const std::lock_guard lock(thread_lock); - std::remove(SWAP_PATH); + if (!swapfile_exist()) return ::ndk::ScopedAStatus::ok(); + std::thread rmswap_thread(rmswap); + rmswap_thread.detach(); return ::ndk::ScopedAStatus::ok(); } -static void mkfile_swapon_thread(void) { +static void swapon_func(void) { const std::lock_guard lock(thread_lock); - if (access(SWAP_PATH, F_OK) != 0) { - mkfile(mSwapSize * 10, SWAP_PATH); - mkswap(SWAP_PATH); - } int res = swapon(SWAP_PATH, (10 << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK); swapOnRes = res == 0; } ::ndk::ScopedAStatus SwapOnData::setSwapOn() { - const std::lock_guard lock(thread_lock); - std::thread mkswapfile(mkfile_swapon_thread); + if (!swapfile_exist()) return ::ndk::ScopedAStatus::ok(); + std::thread swapon_thread(swapon_func); + swapon_thread.detach(); return ::ndk::ScopedAStatus::ok(); } -static void swapoff_thread(void) { +static void swapoff_func(void) { + if (!swapfile_exist()) return; const std::lock_guard lock(thread_lock); swapoff(SWAP_PATH); } ::ndk::ScopedAStatus SwapOnData::setSwapOff() { - const std::lock_guard lock(thread_lock); - std::thread swapoff(swapoff_thread); + std::thread swapoff_thread(swapoff_func); + swapoff_thread.detach(); return ::ndk::ScopedAStatus::ok(); } diff --git a/universal7885-common/apps/aidl-support/parts/default/Swap.h b/universal7885-common/apps/aidl-support/parts/default/Swap.h index 6125766..5c4b714 100644 --- a/universal7885-common/apps/aidl-support/parts/default/Swap.h +++ b/universal7885-common/apps/aidl-support/parts/default/Swap.h @@ -21,7 +21,7 @@ namespace aidl::vendor::eureka::hardware::parts { struct SwapOnData : public BnSwapOnData { // Methods from ::aidl::vendor::eureka::hardware::parts::ISwapOnData // follow. - ::ndk::ScopedAStatus setSwapSize(int32_t size); + ::ndk::ScopedAStatus makeSwapFile(int32_t size); ::ndk::ScopedAStatus setSwapOn(void); ::ndk::ScopedAStatus removeSwapFile(void); ::ndk::ScopedAStatus setSwapOff(void); diff --git a/universal7885-common/apps/aidl-support/parts/vendor/eureka/hardware/parts/ISwapOnData.aidl b/universal7885-common/apps/aidl-support/parts/vendor/eureka/hardware/parts/ISwapOnData.aidl index 73a69a1..aa98e39 100644 --- a/universal7885-common/apps/aidl-support/parts/vendor/eureka/hardware/parts/ISwapOnData.aidl +++ b/universal7885-common/apps/aidl-support/parts/vendor/eureka/hardware/parts/ISwapOnData.aidl @@ -26,5 +26,5 @@ interface ISwapOnData { oneway void setSwapOn(); - oneway void setSwapSize(in int size); + oneway void makeSwapFile(in int size); }