diff --git a/CMakeLists.txt b/CMakeLists.txt index 3399ea1c56..116e81f08d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,7 +139,6 @@ project (Jerry CXX C ASM) COMPACT_PROFILE COMPACT_PROFILE_MINIMAL FULL_PROFILE - MINIMAL_FOOTPRINT MEMORY_STATISTICS) # Profiles @@ -152,22 +151,20 @@ project (Jerry CXX C ASM) # Minimal compact profile set(MODIFIER_SUFFIX_COMPACT_PROFILE_MINIMAL -cp_minimal) - # Minimal footprint - set(MODIFIER_SUFFIX_MINIMAL_FOOTPRINT -mfp) - # Memory statistics set(MODIFIER_SUFFIX_MEMORY_STATISTICS -mem_stats) + # Memory management stress-test mode + set(MODIFIER_SUFFIX_MEM_STRESS_TEST -mem_stress_test) + # Modifier lists # Linux set(MODIFIERS_LISTS_LINUX "FULL_PROFILE" + "FULL_PROFILE MEM_STRESS_TEST" "COMPACT_PROFILE" "COMPACT_PROFILE_MINIMAL" - "FULL_PROFILE MINIMAL_FOOTPRINT" - "FULL_PROFILE MINIMAL_FOOTPRINT MEMORY_STATISTICS" "FULL_PROFILE MEMORY_STATISTICS" - "COMPACT_PROFILE_MINIMAL MINIMAL_FOOTPRINT" "COMPACT_PROFILE_MINIMAL MEMORY_STATISTICS") # MCU diff --git a/Makefile b/Makefile index 2ace4fbbbc..1ba82dfa37 100644 --- a/Makefile +++ b/Makefile @@ -97,7 +97,7 @@ export TARGET_RELEASE_MODES = release export TARGET_PC_SYSTEMS = linux -export TARGET_PC_MODS = cp cp_minimal mem_stats mfp cp_minimal-mfp mfp-mem_stats +export TARGET_PC_MODS = cp cp_minimal mem_stats mem_stress_test export TARGET_MCU_MODS = cp cp_minimal diff --git a/jerry-core/CMakeLists.txt b/jerry-core/CMakeLists.txt index 21cd5f89d3..40dfc8989e 100644 --- a/jerry-core/CMakeLists.txt +++ b/jerry-core/CMakeLists.txt @@ -70,10 +70,9 @@ project (JerryCore CXX C ASM) CONFIG_ECMA_COMPACT_PROFILE_DISABLE_MATH_BUILTIN CONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN) - # Minimal footprint - set(DEFINES_MINIMAL_FOOTPRINT - CONFIG_ECMA_LCACHE_DISABLE - CONFIG_VM_RUN_GC_AFTER_EACH_OPCODE) + # Memory management stress-test mode + set(DEFINES_MEM_STRESS_TEST + MEM_GC_BEFORE_EACH_ALLOC) # Memory statistics set(DEFINES_MEMORY_STATISTICS MEM_STATS) diff --git a/jerry-core/mem/mem-heap.cpp b/jerry-core/mem/mem-heap.cpp index e08529fefc..8e6c61e1e1 100644 --- a/jerry-core/mem/mem-heap.cpp +++ b/jerry-core/mem/mem-heap.cpp @@ -489,6 +489,10 @@ mem_heap_alloc_block_try_give_memory_back (size_t size_in_bytes, /**< size of re * (one-chunked or general) */ mem_heap_alloc_term_t alloc_term) /**< expected allocation term */ { +#ifdef MEM_GC_BEFORE_EACH_ALLOC + mem_run_try_to_give_memory_back_callbacks (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL); +#endif /* MEM_GC_BEFORE_EACH_ALLOC */ + size_t chunks = mem_get_block_chunks_count_from_data_size (size_in_bytes); if ((mem_heap_allocated_chunks + chunks) * MEM_HEAP_CHUNK_SIZE >= mem_heap_limit) { diff --git a/jerry-core/mem/mem-poolman.cpp b/jerry-core/mem/mem-poolman.cpp index 09076f88de..96ff7ed29f 100644 --- a/jerry-core/mem/mem-poolman.cpp +++ b/jerry-core/mem/mem-poolman.cpp @@ -24,14 +24,15 @@ * Memory pool manager implementation */ -#define JERRY_MEM_POOL_INTERNAL - #include "jrt.h" #include "jrt-libc-includes.h" #include "mem-allocator.h" #include "mem-heap.h" #include "mem-poolman.h" +#define MEM_ALLOCATOR_INTERNAL +#include "mem-allocator-internal.h" + /** * Size of a pool */ @@ -521,6 +522,10 @@ mem_pools_alloc_longpath (void) uint8_t* __attr_always_inline___ mem_pools_alloc (void) { +#ifdef MEM_GC_BEFORE_EACH_ALLOC + mem_run_try_to_give_memory_back_callbacks (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL); +#endif /* MEM_GC_BEFORE_EACH_ALLOC */ + mem_check_pools (); do