struct AndroidConfig {
using SizeClassMap = AndroidSizeClassMap;
#if SCUDO_CAN_USE_PRIMARY64
- // 128MB regions
- typedef SizeClassAllocator64<SizeClassMap, 27U,
+ // 256MB regions
+ typedef SizeClassAllocator64<SizeClassMap, 28U,
/*MaySupportMemoryTagging=*/true>
Primary;
#else
- // 512KB regions
- typedef SizeClassAllocator32<SizeClassMap, 19U> Primary;
+ // 256KB regions
+ typedef SizeClassAllocator32<SizeClassMap, 18U> Primary;
#endif
- typedef MapAllocator<MapAllocatorCache<>> Secondary;
+ // Cache blocks up to 2MB
+ typedef MapAllocator<MapAllocatorCache<32U, 2UL << 20>> Secondary;
template <class A>
using TSDRegistryT = TSDRegistrySharedT<A, 2U>; // Shared, max 2 TSDs.
};
static const uptr PrimarySize = RegionSize * NumClasses;
// Call map for user memory with at least this size.
- static const uptr MapSizeIncrement = 1UL << 17;
+ static const uptr MapSizeIncrement = 1UL << 18;
// Fill at most this number of batches from the newly map'd memory.
static const u32 MaxNumBatches = 8U;
// TODO(kostyak): further tune class maps for Android & Fuchsia.
#if SCUDO_WORDSIZE == 64U
typedef SizeClassMap<4, 4, 8, 14, 4, 10> SvelteSizeClassMap;
-typedef SizeClassMap<3, 5, 8, 17, 14, 14> AndroidSizeClassMap;
+typedef SizeClassMap<2, 5, 9, 16, 14, 14> AndroidSizeClassMap;
#else
typedef SizeClassMap<4, 3, 7, 14, 5, 10> SvelteSizeClassMap;
-typedef SizeClassMap<3, 5, 8, 17, 14, 14> AndroidSizeClassMap;
+typedef SizeClassMap<2, 5, 9, 16, 14, 14> AndroidSizeClassMap;
#endif
} // namespace scudo