Reduce advertised sys mem on 32 bit Android
This CL reduces the advertised system memory amount in 32 bit Android
builds to address some memory fragmentation issues in certain tests
that rely on the advertised memory amount.
Affects:
dEQP-VK.api.buffer.suballocation.*
dEQP-VK.api.buffer.dedicated_alloc.*
dEQP-VK.api.object_management.*
dEQP-VK.memory.allocation.*
dEQP-VK.memory.device_group_allocation.*
dEQP-VK.pipeline.render_to_image.*.small.*
dEQP-VK.pipeline.render_to_image.*.huge.*
Components: Framework, Vulkan
VK-GL-CTS issue: 3586
Change-Id: I15ef027e3f69ddbb87e8704d0cff479782b6bda6
diff --git a/framework/platform/android/tcuAndroidPlatform.cpp b/framework/platform/android/tcuAndroidPlatform.cpp
index f671854..a78d832 100644
--- a/framework/platform/android/tcuAndroidPlatform.cpp
+++ b/framework/platform/android/tcuAndroidPlatform.cpp
@@ -337,7 +337,20 @@
// Worst-case estimates
const size_t MiB = (size_t)(1<<20);
const size_t baseMemUsage = 400*MiB;
+
+#if (DE_PTR_SIZE == 4)
+ // Some tests, such as:
+ //
+ // dEQP-VK.api.object_management.max_concurrent.*
+ // dEQP-VK.memory.allocation.random.*
+ //
+ // when run in succession, can lead to system memory fragmentation. It depends on the allocator, and on some 32-bit
+ // systems can lead to out of memory errors. As a workaround, we use a smaller amount of memory on 32-bit systems,
+ // as this typically avoids out of memory errors caused by fragmentation.
+ const double safeUsageRatio = 0.1;
+#else
const double safeUsageRatio = 0.25;
+#endif
limits.totalSystemMemory = de::max((size_t)(double(deInt64(m_totalSystemMemory)-deInt64(baseMemUsage)) * safeUsageRatio), 16*MiB);