Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/audio/module_adapter/module/generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ static void mod_resource_init(struct processing_module *mod)
list_init(&md->resources.cont_chunk_list);
md->resources.heap_usage = 0;
md->resources.heap_high_water_mark = 0;
md->resources.container_usage = 0;
md->resources.container_high_water_mark = 0;
}

int module_init(struct processing_module *mod)
Expand Down Expand Up @@ -154,6 +156,9 @@ static struct module_resource *container_get(struct processing_module *mod)

container = list_first_item(&res->free_cont_list, struct module_resource, list);
list_item_del(&container->list);
res->container_usage++;
if (res->container_usage > res->container_high_water_mark)
res->container_high_water_mark = res->container_usage;
return container;
}

Expand All @@ -162,6 +167,7 @@ static void container_put(struct processing_module *mod, struct module_resource
struct module_resources *res = &mod->priv.resources;

list_item_append(&container->list, &res->free_cont_list);
res->container_usage--;
}

/**
Expand Down
11 changes: 11 additions & 0 deletions src/audio/module_adapter/module_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1303,6 +1303,17 @@ size_t module_adapter_heap_usage(struct processing_module *mod, size_t *hwm)
}
EXPORT_SYMBOL(module_adapter_heap_usage);

size_t module_adapter_container_usage(struct processing_module *mod, size_t *hwm)
{
struct module_resources *res = &mod->priv.resources;

if (hwm)
*hwm = res->container_high_water_mark;

return res->container_usage;
}
EXPORT_SYMBOL(module_adapter_container_usage);

/*
* \brief Get DAI hw params
* \param[in] dev - component device pointer
Expand Down
3 changes: 3 additions & 0 deletions src/include/sof/audio/module_adapter/module/generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ struct module_resources {
struct list_item cont_chunk_list; /**< Memory container chunks */
size_t heap_usage;
size_t heap_high_water_mark;
size_t container_usage;
size_t container_high_water_mark;
#if CONFIG_MODULE_MEMORY_API_DEBUG && defined(__ZEPHYR__)
k_tid_t rsrc_mngr;
#endif
Expand Down Expand Up @@ -297,6 +299,7 @@ void module_adapter_free(struct comp_dev *dev);
int module_adapter_reset(struct comp_dev *dev);

size_t module_adapter_heap_usage(struct processing_module *mod, size_t *hwm);
size_t module_adapter_container_usage(struct processing_module *mod, size_t *hwm);

#if CONFIG_IPC_MAJOR_3
static inline
Expand Down
30 changes: 30 additions & 0 deletions zephyr/sof_shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,32 @@ static int cmd_sof_module_heap_usage(const struct shell *sh,
return 0;
}

static int cmd_sof_module_container_usage(const struct shell *sh,
size_t argc, char *argv[])
{
struct ipc *ipc = sof_get()->ipc;
struct list_item *clist, *_clist;
struct ipc_comp_dev *icd;

if (!ipc) {
shell_print(sh, "No IPC");
return 0;
}

list_for_item_safe(clist, _clist, &ipc->comp_list) {
size_t usage, hwm;

icd = container_of(clist, struct ipc_comp_dev, list);
if (icd->type != COMP_TYPE_COMPONENT)
continue;

usage = module_adapter_container_usage(comp_mod(icd->cd), &hwm);
shell_print(sh, "comp id 0x%08x%9zu usage%9zu hwm",
icd->id, usage, hwm);
}
return 0;
}

SHELL_STATIC_SUBCMD_SET_CREATE(sof_commands,
SHELL_CMD(test_inject_sched_gap, NULL,
"Inject a gap to audio scheduling\n",
Expand All @@ -77,6 +103,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(sof_commands,
"Print heap memory usage of each module\n",
cmd_sof_module_heap_usage),

SHELL_CMD(module_container_usage, NULL,
"Print resource tracking container usage of each module\n",
cmd_sof_module_container_usage),

SHELL_SUBCMD_SET_END
);

Expand Down
Loading