diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 545b355..dd21905 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -80,6 +80,10 @@ BOARD_KERNEL_CMDLINE += video=vfb:640x400,bpp=32,memsize=3072000 DEVICE_MANIFEST_FILE := $(COMMON_PATH)/manifest.xml DEVICE_MATRIX_FILE := $(COMMON_PATH)/compatibility_matrix.xml +# Init +TARGET_INIT_VENDOR_LIB := //$(COMMON_PATH):libinit_xiaomi_sm6250 +TARGET_RECOVERY_DEVICE_MODULES := libinit_xiaomi_sm6250 + # Partitions BOARD_BOOTIMAGE_PARTITION_SIZE := 134217728 BOARD_CACHEIMAGE_PARTITION_SIZE := 402653184 diff --git a/init/Android.bp b/init/Android.bp new file mode 100644 index 0000000..200b9e1 --- /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_sm6250", + 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..6196206 --- /dev/null +++ b/init/init.cpp @@ -0,0 +1,75 @@ +/* + * 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"; + } +} + +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); +}