aboutsummaryrefslogtreecommitdiff
path: root/libinit/libinit_dalvik_heap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libinit/libinit_dalvik_heap.cpp')
-rw-r--r--libinit/libinit_dalvik_heap.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/libinit/libinit_dalvik_heap.cpp b/libinit/libinit_dalvik_heap.cpp
new file mode 100644
index 0000000..b3b24ba
--- /dev/null
+++ b/libinit/libinit_dalvik_heap.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2022 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <sys/sysinfo.h>
+#include <libinit_utils.h>
+
+#include <libinit_dalvik_heap.h>
+
+#define HEAPSTARTSIZE_PROP "dalvik.vm.heapstartsize"
+#define HEAPGROWTHLIMIT_PROP "dalvik.vm.heapgrowthlimit"
+#define HEAPSIZE_PROP "dalvik.vm.heapsize"
+#define HEAPMINFREE_PROP "dalvik.vm.heapminfree"
+#define HEAPMAXFREE_PROP "dalvik.vm.heapmaxfree"
+#define HEAPTARGETUTILIZATION_PROP "dalvik.vm.heaptargetutilization"
+
+#define GB(b) (b * 1024ull * 1024 * 1024)
+
+static const dalvik_heap_info_t dalvik_heap_info_6144 = {
+ .heapstartsize = "16m",
+ .heapgrowthlimit = "256m",
+ .heapsize = "512m",
+ .heapminfree = "8m",
+ .heapmaxfree = "32m",
+ .heaptargetutilization = "0.5",
+};
+
+static const dalvik_heap_info_t dalvik_heap_info_4096 = {
+ .heapstartsize = "8m",
+ .heapgrowthlimit = "256m",
+ .heapsize = "512m",
+ .heapminfree = "8m",
+ .heapmaxfree = "16m",
+ .heaptargetutilization = "0.6",
+};
+
+static const dalvik_heap_info_t dalvik_heap_info_2048 = {
+ .heapstartsize = "8m",
+ .heapgrowthlimit = "192m",
+ .heapsize = "512m",
+ .heapminfree = "512k",
+ .heapmaxfree = "8m",
+ .heaptargetutilization = "0.75",
+};
+
+void set_dalvik_heap() {
+ struct sysinfo sys;
+ const dalvik_heap_info_t *dhi;
+
+ sysinfo(&sys);
+
+ if (sys.totalram > GB(5))
+ dhi = &dalvik_heap_info_6144;
+ else if (sys.totalram > GB(3))
+ dhi = &dalvik_heap_info_4096;
+ else
+ dhi = &dalvik_heap_info_2048;
+
+ property_override(HEAPSTARTSIZE_PROP, dhi->heapstartsize);
+ property_override(HEAPGROWTHLIMIT_PROP, dhi->heapgrowthlimit);
+ property_override(HEAPSIZE_PROP, dhi->heapsize);
+ property_override(HEAPTARGETUTILIZATION_PROP, dhi->heaptargetutilization);
+ property_override(HEAPMINFREE_PROP, dhi->heapminfree);
+ property_override(HEAPMAXFREE_PROP, dhi->heapmaxfree);
+}