mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-30 05:22:05 +00:00
lvgl heap: Align addresses & sizes to cache line size
This commit is contained in:
parent
ec10b572d1
commit
b61b212218
1 changed files with 13 additions and 26 deletions
|
@ -34,13 +34,14 @@
|
||||||
|
|
||||||
#if LV_ENABLE_GC == 0 /*gc custom allocations must not include header*/
|
#if LV_ENABLE_GC == 0 /*gc custom allocations must not include header*/
|
||||||
|
|
||||||
/*The size of this union must be 4 bytes (uint32_t)*/
|
/*The size of this union must be 32 bytes (uint32_t * 8)*/
|
||||||
typedef union {
|
typedef union {
|
||||||
struct {
|
struct {
|
||||||
MEM_UNIT used: 1; //1: if the entry is used
|
MEM_UNIT used: 1; //1: if the entry is used
|
||||||
MEM_UNIT d_size: 31; //Size off the data (1 means 4 bytes)
|
MEM_UNIT d_size: 31; //Size off the data (1 means 4 bytes)
|
||||||
};
|
};
|
||||||
MEM_UNIT header; //The header (used + d_size)
|
MEM_UNIT header; //The header (used + d_size)
|
||||||
|
uint32_t align[7]; //Align header size to 32 bytes
|
||||||
} lv_mem_header_t;
|
} lv_mem_header_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -109,19 +110,12 @@ void * lv_mem_alloc(uint32_t size)
|
||||||
return &zero_mem;
|
return &zero_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LV_MEM_ENV64
|
/*Round the size up to 32*/
|
||||||
/*Round the size up to 8*/
|
if(size & 0x1F) {
|
||||||
if(size & 0x7) {
|
size = size & (~0x1F);
|
||||||
size = size & (~0x7);
|
size += 0x20;
|
||||||
size += 8;
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/*Round the size up to 4*/
|
|
||||||
if(size & 0x3) {
|
|
||||||
size = size & (~0x3);
|
|
||||||
size += 4;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
void * alloc = NULL;
|
void * alloc = NULL;
|
||||||
|
|
||||||
#if LV_MEM_CUSTOM == 0 /*Use the allocation from dyn_mem*/
|
#if LV_MEM_CUSTOM == 0 /*Use the allocation from dyn_mem*/
|
||||||
|
@ -339,7 +333,7 @@ void lv_mem_monitor(lv_mem_monitor_t * mon_p)
|
||||||
e = ent_get_next(e);
|
e = ent_get_next(e);
|
||||||
}
|
}
|
||||||
mon_p->total_size = LV_MEM_SIZE;
|
mon_p->total_size = LV_MEM_SIZE;
|
||||||
mon_p->used_pct = 100 - (100U * mon_p->free_size) / mon_p->total_size;
|
mon_p->used_pct = 100 - ((uint64_t)100U * mon_p->free_size) / mon_p->total_size;
|
||||||
mon_p->frag_pct = (uint32_t)mon_p->free_biggest_size * 100U / mon_p->free_size;
|
mon_p->frag_pct = (uint32_t)mon_p->free_biggest_size * 100U / mon_p->free_size;
|
||||||
mon_p->frag_pct = 100 - mon_p->frag_pct;
|
mon_p->frag_pct = 100 - mon_p->frag_pct;
|
||||||
#endif
|
#endif
|
||||||
|
@ -430,19 +424,12 @@ static void * ent_alloc(lv_mem_ent_t * e, uint32_t size)
|
||||||
*/
|
*/
|
||||||
static void ent_trunc(lv_mem_ent_t * e, uint32_t size)
|
static void ent_trunc(lv_mem_ent_t * e, uint32_t size)
|
||||||
{
|
{
|
||||||
#ifdef LV_MEM_ENV64
|
|
||||||
/*Round the size up to 8*/
|
/*Round the size up to 32*/
|
||||||
if(size & 0x7) {
|
if(size & 0x1F) {
|
||||||
size = size & (~0x7);
|
size = size & (~0x1F);
|
||||||
size += 8;
|
size += 0x20;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/*Round the size up to 4*/
|
|
||||||
if(size & 0x3) {
|
|
||||||
size = size & (~0x3);
|
|
||||||
size += 4;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*Don't let empty space only for a header without data*/
|
/*Don't let empty space only for a header without data*/
|
||||||
if(e->header.d_size == size + sizeof(lv_mem_header_t)) {
|
if(e->header.d_size == size + sizeof(lv_mem_header_t)) {
|
||||||
|
|
Loading…
Reference in a new issue