Simplify severity mechanism in mem allocator.
Related issue: #63 JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com
This commit is contained in:
@@ -580,14 +580,9 @@ ecma_try_to_give_back_some_memory (mem_try_give_memory_back_severity_t severity)
|
||||
ecma_gc_run ();
|
||||
}
|
||||
}
|
||||
else if (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_MEDIUM
|
||||
|| severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH)
|
||||
{
|
||||
ecma_gc_run ();
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL);
|
||||
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||
|
||||
/* Freeing as much memory as we currently can */
|
||||
ecma_lcache_invalidate_all ();
|
||||
|
||||
@@ -62,17 +62,15 @@ typedef uint16_t mem_cpointer_t;
|
||||
* Severity of a 'try give memory back' request
|
||||
*
|
||||
* The request are posted sequentially beginning from
|
||||
* low to critical until enough memory is freed.
|
||||
* low to high until enough memory is freed.
|
||||
*
|
||||
* If not enough memory is freed upon a critical request
|
||||
* If not enough memory is freed upon a high request
|
||||
* then the engine is shut down with ERR_OUT_OF_MEMORY.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_LOW, /* 'low' severity */
|
||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_MEDIUM, /* 'medium' severity */
|
||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH, /* 'high' severity */
|
||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL /* 'critical' severity */
|
||||
} mem_try_give_memory_back_severity_t;
|
||||
|
||||
/**
|
||||
|
||||
@@ -531,7 +531,7 @@ mem_heap_alloc_block_try_give_memory_back (size_t size_in_bytes, /**< size of re
|
||||
VALGRIND_FREYA_CHECK_MEMPOOL_REQUEST;
|
||||
|
||||
#ifdef MEM_GC_BEFORE_EACH_ALLOC
|
||||
mem_run_try_to_give_memory_back_callbacks (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL);
|
||||
mem_run_try_to_give_memory_back_callbacks (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||
#endif /* MEM_GC_BEFORE_EACH_ALLOC */
|
||||
|
||||
size_t chunks = mem_get_block_chunks_count_from_data_size (size_in_bytes);
|
||||
@@ -549,14 +549,14 @@ mem_heap_alloc_block_try_give_memory_back (size_t size_in_bytes, /**< size of re
|
||||
}
|
||||
|
||||
for (mem_try_give_memory_back_severity_t severity = MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_LOW;
|
||||
severity <= MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL;
|
||||
severity <= MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH;
|
||||
severity = (mem_try_give_memory_back_severity_t) (severity + 1))
|
||||
{
|
||||
mem_run_try_to_give_memory_back_callbacks (severity);
|
||||
|
||||
data_space_p = mem_heap_alloc_block_internal (size_in_bytes, length_type, alloc_term);
|
||||
|
||||
if (data_space_p != NULL)
|
||||
if (likely (data_space_p != NULL))
|
||||
{
|
||||
VALGRIND_FREYA_MALLOCLIKE_SPACE (data_space_p, size_in_bytes);
|
||||
return data_space_p;
|
||||
|
||||
@@ -536,7 +536,7 @@ 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);
|
||||
mem_run_try_to_give_memory_back_callbacks (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||
#endif /* MEM_GC_BEFORE_EACH_ALLOC */
|
||||
|
||||
mem_check_pools ();
|
||||
|
||||
@@ -103,7 +103,7 @@ interp_mem_get_stats (mem_heap_stats_t *out_heap_stats_p,
|
||||
}
|
||||
|
||||
/* Requesting to free as much memory as we currently can */
|
||||
ecma_try_to_give_back_some_memory (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL);
|
||||
ecma_try_to_give_back_some_memory (MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||
|
||||
if (reset_peak_before)
|
||||
{
|
||||
|
||||
@@ -42,17 +42,9 @@ test_heap_give_some_memory_back (mem_try_give_memory_back_severity_t severity)
|
||||
{
|
||||
p = 8;
|
||||
}
|
||||
else if (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_MEDIUM)
|
||||
{
|
||||
p = 4;
|
||||
}
|
||||
else if (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH)
|
||||
{
|
||||
p = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL);
|
||||
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||
|
||||
p = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user