Skip to content

Commit e4f59a9

Browse files
Jyri Sarhakv2019i
authored andcommitted
modules: Add high water mark to module_adapter_heap_usage()
Add heap usage high water mark to module_adapter_heap_usage() and shell's "sof module_heap_usage" command. Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
1 parent 4bbf5a1 commit e4f59a9

4 files changed

Lines changed: 19 additions & 13 deletions

File tree

src/audio/module_adapter/module/generic.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ int module_init(struct processing_module *mod)
9595
list_init(&md->resources.mem_list);
9696
list_init(&md->resources.free_cont_list);
9797
list_init(&md->resources.cont_chunk_list);
98+
md->resources.heap_usage = 0;
99+
md->resources.heap_high_water_mark = 0;
98100

99101
/* Now we can proceed with module specific initialization */
100102
ret = interface->init(mod);
@@ -189,6 +191,10 @@ void *mod_alloc_align(struct processing_module *mod, uint32_t size, uint32_t ali
189191
container->size = size;
190192
list_item_prepend(&container->mem_list, &res->mem_list);
191193

194+
res->heap_usage += size;
195+
if (res->heap_usage > res->heap_high_water_mark)
196+
res->heap_high_water_mark = res->heap_usage;
197+
192198
return ptr;
193199
}
194200
EXPORT_SYMBOL(mod_alloc_align);
@@ -247,6 +253,7 @@ int mod_free(struct processing_module *mod, void *ptr)
247253
mem = container_of(mem_list, struct module_memory, mem_list);
248254
if (mem->ptr == ptr) {
249255
rfree(mem->ptr);
256+
res->heap_usage -= mem->size;
250257
list_item_del(&mem->mem_list);
251258
container_put(mod, mem);
252259
return 0;

src/audio/module_adapter/module_adapter.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,19 +1290,14 @@ void module_adapter_free(struct comp_dev *dev)
12901290
}
12911291
EXPORT_SYMBOL(module_adapter_free);
12921292

1293-
size_t module_adapter_heap_usage(struct processing_module *mod)
1293+
size_t module_adapter_heap_usage(struct processing_module *mod, size_t *hwm)
12941294
{
12951295
struct module_resources *res = &mod->priv.resources;
1296-
struct list_item *mem_list, *_mem_list;
1297-
size_t size = 0;
12981296

1299-
list_for_item_safe(mem_list, _mem_list, &res->mem_list) {
1300-
struct module_memory *mem = container_of(mem_list, struct module_memory, mem_list);
1297+
if (hwm)
1298+
*hwm = res->heap_high_water_mark;
13011299

1302-
size += mem->size;
1303-
}
1304-
1305-
return size;
1300+
return res->heap_usage;
13061301
}
13071302
EXPORT_SYMBOL(module_adapter_heap_usage);
13081303

src/include/sof/audio/module_adapter/module/generic.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ struct module_resources {
125125
struct list_item mem_list; /**< Allocad memory containers */
126126
struct list_item free_cont_list; /**< Unused memory containers */
127127
struct list_item cont_chunk_list; /**< Memory container chunks */
128+
size_t heap_usage;
129+
size_t heap_high_water_mark;
128130
};
129131

130132
/**
@@ -247,7 +249,7 @@ int module_adapter_trigger(struct comp_dev *dev, int cmd);
247249
void module_adapter_free(struct comp_dev *dev);
248250
int module_adapter_reset(struct comp_dev *dev);
249251

250-
size_t module_adapter_heap_usage(struct processing_module *mod);
252+
size_t module_adapter_heap_usage(struct processing_module *mod, size_t *hwm);
251253

252254
#if CONFIG_IPC_MAJOR_3
253255
static inline

zephyr/sof_shell.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,15 @@ static int cmd_sof_module_heap_usage(const struct shell *sh,
5555
}
5656

5757
list_for_item_safe(clist, _clist, &ipc->comp_list) {
58+
size_t usage, hwm;
59+
5860
icd = container_of(clist, struct ipc_comp_dev, list);
5961
if (icd->type != COMP_TYPE_COMPONENT)
6062
continue;
6163

62-
shell_print(sh, "comp id 0x%08x\t%8zu bytes\t(%zu max)", icd->id,
63-
module_adapter_heap_usage(comp_mod(icd->cd)),
64-
comp_mod(icd->cd)->priv.cfg.heap_bytes);
64+
usage = module_adapter_heap_usage(comp_mod(icd->cd), &hwm);
65+
shell_print(sh, "comp id 0x%08x%9zu usage%9zu hwm %9zu max\tbytes",
66+
icd->id, usage, hwm, comp_mod(icd->cd)->priv.cfg.heap_bytes);
6567
}
6668
return 0;
6769
}

0 commit comments

Comments
 (0)