From 984575d584d73df88e87fc1d9be72a728e91111e Mon Sep 17 00:00:00 2001 From: Demon000 Date: Sun, 10 Oct 2021 16:14:41 +0100 Subject: [PATCH] rosemary: init: override dalvik heap config based on total RAM Change-Id: I5ff7bdc9ab610415093ff6535c34f0013154b8cf --- BoardConfig.mk | 4 +++ init/Android.bp | 27 ++++++++++++++++ init/init.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 init/Android.bp create mode 100644 init/init.cpp diff --git a/BoardConfig.mk b/BoardConfig.mk index 9e2466e..5053bee 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -67,6 +67,10 @@ BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION) BOARD_KERNEL_CMDLINE := bootopt=64S3,32N2,64N2 BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive +# Init +TARGET_INIT_VENDOR_LIB := //$(DEVICE_PATH):libinit_xiaomi_rosemary +TARGET_RECOVERY_DEVICE_MODULES := libinit_xiaomi_rosemary + # Kernel TARGET_KERNEL_ARCH := arm64 TARGET_KERNEL_HEADER_ARCH := arm64 diff --git a/init/Android.bp b/init/Android.bp new file mode 100644 index 0000000..e96f555 --- /dev/null +++ b/init/Android.bp @@ -0,0 +1,27 @@ +// +// 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. +// + +cc_library_static { + name: "libinit_xiaomi_rosemary", + recovery_available: true, + srcs: [ + "init.cpp" + ], + include_dirs: [ + "system/core/base/include", + "system/core/init" + ] +} diff --git a/init/init.cpp b/init/init.cpp new file mode 100644 index 0000000..a1a7465 --- /dev/null +++ b/init/init.cpp @@ -0,0 +1,83 @@ +/* + * 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 +#include +#include +#include +#include + +#include +#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ +#include + +#include "vendor_init.h" +#include "property_service.h" + +using android::base::GetProperty; +using android::init::property_set; + +char const *heapstartsize; +char const *heapgrowthlimit; +char const *heapsize; +char const *heapminfree; +char const *heapmaxfree; +char const *heaptargetutilization; + +void check_device() +{ + struct sysinfo sys; + + sysinfo(&sys); + + if (sys.totalram >= 5ull * 1024 * 1024 * 1024) { + // from - phone-xhdpi-6144-dalvik-heap.mk + heapstartsize = "16m"; + heapgrowthlimit = "256m"; + heapsize = "512m"; + heaptargetutilization = "0.5"; + heapminfree = "8m"; + heapmaxfree = "32m"; + } else if (sys.totalram >= 3ull * 1024 * 1024 * 1024) { + // from - phone-xhdpi-4096-dalvik-heap.mk + heapstartsize = "8m"; + heapgrowthlimit = "192m"; + heapsize = "512m"; + heaptargetutilization = "0.6"; + heapminfree = "8m"; + heapmaxfree = "16m"; + } else { + // from - phone-xhdpi-2048-dalvik-heap.mk + heapstartsize = "8m"; + heapgrowthlimit = "192m"; + heapsize = "512m"; + heaptargetutilization = "0.75"; + heapminfree = "512k"; + heapmaxfree = "8m"; + } +} + +void vendor_load_properties() +{ + check_device(); + + property_set("dalvik.vm.heapstartsize", heapstartsize); + property_set("dalvik.vm.heapgrowthlimit", heapgrowthlimit); + property_set("dalvik.vm.heapsize", heapsize); + property_set("dalvik.vm.heaptargetutilization", heaptargetutilization); + property_set("dalvik.vm.heapminfree", heapminfree); + property_set("dalvik.vm.heapmaxfree", heapmaxfree); +}