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 ();
|
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
|
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 */
|
/* Freeing as much memory as we currently can */
|
||||||
ecma_lcache_invalidate_all ();
|
ecma_lcache_invalidate_all ();
|
||||||
|
|||||||
@@ -62,17 +62,15 @@ typedef uint16_t mem_cpointer_t;
|
|||||||
* Severity of a 'try give memory back' request
|
* Severity of a 'try give memory back' request
|
||||||
*
|
*
|
||||||
* The request are posted sequentially beginning from
|
* 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.
|
* then the engine is shut down with ERR_OUT_OF_MEMORY.
|
||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_LOW, /* 'low' severity */
|
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_HIGH, /* 'high' severity */
|
||||||
MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL /* 'critical' severity */
|
|
||||||
} mem_try_give_memory_back_severity_t;
|
} 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;
|
VALGRIND_FREYA_CHECK_MEMPOOL_REQUEST;
|
||||||
|
|
||||||
#ifdef MEM_GC_BEFORE_EACH_ALLOC
|
#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 */
|
#endif /* MEM_GC_BEFORE_EACH_ALLOC */
|
||||||
|
|
||||||
size_t chunks = mem_get_block_chunks_count_from_data_size (size_in_bytes);
|
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;
|
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))
|
severity = (mem_try_give_memory_back_severity_t) (severity + 1))
|
||||||
{
|
{
|
||||||
mem_run_try_to_give_memory_back_callbacks (severity);
|
mem_run_try_to_give_memory_back_callbacks (severity);
|
||||||
|
|
||||||
data_space_p = mem_heap_alloc_block_internal (size_in_bytes, length_type, alloc_term);
|
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);
|
VALGRIND_FREYA_MALLOCLIKE_SPACE (data_space_p, size_in_bytes);
|
||||||
return data_space_p;
|
return data_space_p;
|
||||||
|
|||||||
@@ -536,7 +536,7 @@ uint8_t* __attr_always_inline___
|
|||||||
mem_pools_alloc (void)
|
mem_pools_alloc (void)
|
||||||
{
|
{
|
||||||
#ifdef MEM_GC_BEFORE_EACH_ALLOC
|
#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 */
|
#endif /* MEM_GC_BEFORE_EACH_ALLOC */
|
||||||
|
|
||||||
mem_check_pools ();
|
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 */
|
/* 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)
|
if (reset_peak_before)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -42,17 +42,9 @@ test_heap_give_some_memory_back (mem_try_give_memory_back_severity_t severity)
|
|||||||
{
|
{
|
||||||
p = 8;
|
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
|
else
|
||||||
{
|
{
|
||||||
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_CRITICAL);
|
JERRY_ASSERT (severity == MEM_TRY_GIVE_MEMORY_BACK_SEVERITY_HIGH);
|
||||||
|
|
||||||
p = 1;
|
p = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user