Loading...
--- libmalloc/libmalloc-166.251.2/tests/memory_pressure.c
+++ libmalloc/libmalloc-374.40.6/tests/memory_pressure.c
@@ -4,6 +4,10 @@
#include <os/lock.h>
#include <stdlib.h>
#include <sys/queue.h>
+
+#if TARGET_OS_WATCH
+#define TEST_TIMEOUT 1200
+#endif // TARGET_OS_WATCH
TAILQ_HEAD(thead, entry);
struct entry {
@@ -31,7 +35,73 @@
}
}
+T_DECL(tiny_mem_pressure, "tiny memory pressure",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
+ T_META_ENVVAR("MallocDebugReport=stderr"),
+ T_META_ENVVAR("MallocScribble=1"),
+ T_META_ENVVAR("MallocSpaceEfficient=1"),
+ T_META_ENVVAR("MallocMaxMagazines=1"),
+ T_META_CHECK_LEAKS(false))
+{
+ dispatch_queue_t q = dispatch_queue_create("pressure queue", 0); // serial
+ dispatch_async(q, ^{
+ while (1) {
+ malloc_zone_pressure_relief(0, 0);
+ usleep(100000);
+ }
+ });
+ stress(128, 50000);
+ T_PASS("didn't crash");
+}
+
+T_DECL(small_mem_pressure, "small memory pressure thread",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
+ T_META_ENVVAR("MallocDebugReport=stderr"),
+ T_META_ENVVAR("MallocScribble=1"),
+ T_META_ENVVAR("MallocSpaceEfficient=1"),
+ T_META_ENVVAR("MallocMaxMagazines=1"),
+ T_META_CHECK_LEAKS(false))
+{
+ dispatch_queue_t q = dispatch_queue_create("pressure queue", 0); // serial
+ dispatch_async(q, ^{
+ while (1) {
+ malloc_zone_pressure_relief(0, 0);
+ usleep(10000);
+ }
+ });
+ stress(512, 20000);
+ T_PASS("didn't crash");
+}
+
+T_DECL(medium_mem_pressure, "medium memory pressure thread",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
+ T_META_ENVVAR("MallocDebugReport=stderr"),
+ T_META_ENVVAR("MallocScribble=1"),
+ T_META_ENVVAR("MallocSpaceEfficient=1"),
+ T_META_ENVVAR("MallocMaxMagazines=1"),
+ T_META_CHECK_LEAKS(false))
+{
+ dispatch_queue_t q = dispatch_queue_create("pressure queue", 0); // serial
+ dispatch_async(q, ^{
+ while (1) {
+ malloc_zone_pressure_relief(0, 0);
+ usleep(100000);
+ }
+ });
+ stress(64*1024, 1000);
+ T_PASS("didn't crash");
+}
+
T_DECL(tiny_mem_pressure_multi, "test memory pressure in tiny on threads",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
T_META_CHECK_LEAKS(false)) {
dispatch_group_t g = dispatch_group_create();
for (int i=0; i<16; i++) {
@@ -53,6 +123,9 @@
}
T_DECL(small_mem_pressure_multi, "test memory pressure in small on threads",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
T_META_CHECK_LEAKS(false)) {
dispatch_group_t g = dispatch_group_create();
for (int i=0; i<3; i++) {
@@ -74,6 +147,9 @@
}
T_DECL(medium_mem_pressure_multi, "test memory pressure in medium on threads",
+#if TARGET_OS_WATCH
+ T_META_TIMEOUT(TEST_TIMEOUT),
+#endif // TARGET_OS_WATCH
T_META_CHECK_LEAKS(false)) {
dispatch_group_t g = dispatch_group_create();
for (int i=0; i<30; i++) {