From d62b074e317f392d9b7ddf94b562fa8d6ed7c13e Mon Sep 17 00:00:00 2001 From: Baofeng Tian Date: Wed, 28 Sep 2022 10:27:29 +0800 Subject: [PATCH] Component: move comp_copy from header file to source file an On sof zephyr ipc4 build, component performance profiling logs can't be enabled due to current xcc compiler does not support inline logging in header file, logs as below: log_level undeclared (first use in this function) log_current_const_data undeclared (first use in this function) Move comp_copy to component.c can resolve this limitation. However, this brings another cmocka issue for mixer unit test, this patch also fixed cmocka mixer unit test issue. BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786 Signed-off-by: Baofeng Tian --- src/audio/component.c | 24 +++++++++++++++ src/audio/mixer/mixer.c | 5 +++- src/include/sof/audio/component_ext.h | 29 +------------------ src/include/sof/audio/mixer.h | 1 + test/cmocka/src/audio/buffer/CMakeLists.txt | 4 +++ test/cmocka/src/audio/mixer/CMakeLists.txt | 1 + test/cmocka/src/audio/mixer/comp_mock.c | 2 +- test/cmocka/src/audio/mixer/comp_mock.h | 1 + test/cmocka/src/audio/mixer/mixer_test.c | 10 +++++-- test/cmocka/src/audio/pipeline/CMakeLists.txt | 6 ++++ test/cmocka/src/audio/selector/CMakeLists.txt | 1 + test/cmocka/src/audio/volume/CMakeLists.txt | 1 + test/cmocka/src/math/fft/CMakeLists.txt | 1 + 13 files changed, 54 insertions(+), 32 deletions(-) diff --git a/src/audio/component.c b/src/audio/component.c index 05ae5060a49f..4f617f6ddc04 100644 --- a/src/audio/component.c +++ b/src/audio/component.c @@ -234,3 +234,27 @@ void audio_stream_copy_to_linear(const struct audio_stream __sparse_cache *sourc snk += bytes_copied; } } + +/** See comp_ops::copy */ +int comp_copy(struct comp_dev *dev) +{ + int ret = 0; + + assert(dev->drv->ops.copy); + + /* copy only if we are the owner of the component */ + if (cpu_is_me(dev->ipc_config.core)) { +#if CONFIG_PERFORMANCE_COUNTERS + perf_cnt_init(&dev->pcd); +#endif + + ret = dev->drv->ops.copy(dev); + +#if CONFIG_PERFORMANCE_COUNTERS + perf_cnt_stamp(&dev->pcd, comp_perf_info, dev); + perf_cnt_average(&dev->pcd, comp_perf_avg_info, dev); +#endif + } + + return ret; +} diff --git a/src/audio/mixer/mixer.c b/src/audio/mixer/mixer.c index a0664e07b55b..345a4648e731 100644 --- a/src/audio/mixer/mixer.c +++ b/src/audio/mixer/mixer.c @@ -470,7 +470,10 @@ static const struct comp_driver comp_mixer = { }, }; -static SHARED_DATA struct comp_driver_info comp_mixer_info = { +#ifndef UNIT_TEST +static +#endif +SHARED_DATA struct comp_driver_info comp_mixer_info = { .drv = &comp_mixer, }; diff --git a/src/include/sof/audio/component_ext.h b/src/include/sof/audio/component_ext.h index 8dba1d7df043..42dea60f9548 100644 --- a/src/include/sof/audio/component_ext.h +++ b/src/include/sof/audio/component_ext.h @@ -171,35 +171,8 @@ static inline int comp_prepare(struct comp_dev *dev) return 0; } -/** See comp_ops::copy */ -static inline int comp_copy(struct comp_dev *dev) -{ - int ret = 0; - - assert(dev->drv->ops.copy); - - /* copy only if we are the owner of the component */ - if (cpu_is_me(dev->ipc_config.core)) { -/* BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786 - * TODO: Remove this once the bug gets fixed. - */ -#ifndef __ZEPHYR__ - perf_cnt_init(&dev->pcd); -#endif - - ret = dev->drv->ops.copy(dev); +int comp_copy(struct comp_dev *dev); -/* BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786 - * TODO: Remove this once the bug gets fixed. - */ -#ifndef __ZEPHYR__ - perf_cnt_stamp(&dev->pcd, comp_perf_info, dev); - perf_cnt_average(&dev->pcd, comp_perf_avg_info, dev); -#endif - } - - return ret; -} /** See comp_ops::get_attribute */ static inline int comp_get_attribute(struct comp_dev *dev, uint32_t type, diff --git a/src/include/sof/audio/mixer.h b/src/include/sof/audio/mixer.h index 752453867fa9..455c4884c0aa 100644 --- a/src/include/sof/audio/mixer.h +++ b/src/include/sof/audio/mixer.h @@ -17,6 +17,7 @@ #ifdef UNIT_TEST void sys_comp_mixer_init(void); +extern struct comp_driver_info comp_mixer_info; #endif #define MIXER_GENERIC diff --git a/test/cmocka/src/audio/buffer/CMakeLists.txt b/test/cmocka/src/audio/buffer/CMakeLists.txt index d6419f3cb2fc..403b5f7d8498 100644 --- a/test/cmocka/src/audio/buffer/CMakeLists.txt +++ b/test/cmocka/src/audio/buffer/CMakeLists.txt @@ -12,6 +12,7 @@ cmocka_test(buffer_copy ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_new @@ -27,6 +28,7 @@ cmocka_test(buffer_new ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_wrap @@ -42,6 +44,7 @@ cmocka_test(buffer_wrap ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(buffer_write @@ -57,4 +60,5 @@ cmocka_test(buffer_write ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) diff --git a/test/cmocka/src/audio/mixer/CMakeLists.txt b/test/cmocka/src/audio/mixer/CMakeLists.txt index 1de8de608b12..55f0129ab9a1 100644 --- a/test/cmocka/src/audio/mixer/CMakeLists.txt +++ b/test/cmocka/src/audio/mixer/CMakeLists.txt @@ -3,6 +3,7 @@ cmocka_test(mixer mixer_test.c comp_mock.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/test/cmocka/src/notifier_mocks.c ${PROJECT_SOURCE_DIR}/src/audio/buffer.c ${PROJECT_SOURCE_DIR}/src/audio/mixer/mixer.c diff --git a/test/cmocka/src/audio/mixer/comp_mock.c b/test/cmocka/src/audio/mixer/comp_mock.c index 75cb747de363..c3aab9544a23 100644 --- a/test/cmocka/src/audio/mixer/comp_mock.c +++ b/test/cmocka/src/audio/mixer/comp_mock.c @@ -79,6 +79,6 @@ static struct comp_driver_info comp_mock_info = { void sys_comp_mock_init(void) { - comp_register(&comp_mock_info); + mock_comp_register(&comp_mock_info); } diff --git a/test/cmocka/src/audio/mixer/comp_mock.h b/test/cmocka/src/audio/mixer/comp_mock.h index 63e78e16009a..9a83c5a84c24 100644 --- a/test/cmocka/src/audio/mixer/comp_mock.h +++ b/test/cmocka/src/audio/mixer/comp_mock.h @@ -11,3 +11,4 @@ #define SOF_COMP_MOCK ((uint32_t)-1) void sys_comp_mock_init(void); +int mock_comp_register(struct comp_driver_info *info); diff --git a/test/cmocka/src/audio/mixer/mixer_test.c b/test/cmocka/src/audio/mixer/mixer_test.c index 38c994132c2b..877fb9237dfc 100644 --- a/test/cmocka/src/audio/mixer/mixer_test.c +++ b/test/cmocka/src/audio/mixer/mixer_test.c @@ -39,7 +39,7 @@ struct comp_dev *post_mixer_comp; struct comp_buffer *post_mixer_buf; /* Mocking comp_register here so we can register our components properly */ -int comp_register(struct comp_driver_info *info) +int mock_comp_register(struct comp_driver_info *info) { void *dst; int err; @@ -63,6 +63,12 @@ int comp_register(struct comp_driver_info *info) return err; } +static void ut_comp_mixer_init(void) +{ + mock_comp_register(platform_shared_get(&comp_mixer_info, + sizeof(comp_mixer_info))); +} + struct source { struct comp_dev *comp; struct comp_buffer *buf; @@ -180,7 +186,7 @@ static void activate_periph_comps(struct mix_test_case *tc) static int test_group_setup(void **state) { - sys_comp_mixer_init(); + ut_comp_mixer_init(); sys_comp_mock_init(); return 0; diff --git a/test/cmocka/src/audio/pipeline/CMakeLists.txt b/test/cmocka/src/audio/pipeline/CMakeLists.txt index f636407f51f9..f1cff35f5ffa 100644 --- a/test/cmocka/src/audio/pipeline/CMakeLists.txt +++ b/test/cmocka/src/audio/pipeline/CMakeLists.txt @@ -19,6 +19,7 @@ endif() cmocka_test(pipeline_new pipeline_new.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -29,11 +30,13 @@ cmocka_test(pipeline_new ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(pipeline_connect_upstream pipeline_connect_upstream.c pipeline_connection_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -44,11 +47,13 @@ cmocka_test(pipeline_connect_upstream ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) cmocka_test(pipeline_free pipeline_free.c pipeline_connection_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c @@ -59,4 +64,5 @@ cmocka_test(pipeline_free ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) diff --git a/test/cmocka/src/audio/selector/CMakeLists.txt b/test/cmocka/src/audio/selector/CMakeLists.txt index e173216a6e3b..301373c37689 100644 --- a/test/cmocka/src/audio/selector/CMakeLists.txt +++ b/test/cmocka/src/audio/selector/CMakeLists.txt @@ -25,6 +25,7 @@ add_library(audio_for_selector STATIC ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) sof_append_relative_path_definitions(audio_for_selector) diff --git a/test/cmocka/src/audio/volume/CMakeLists.txt b/test/cmocka/src/audio/volume/CMakeLists.txt index 8e25f1685ad8..ecd8ae6f8701 100644 --- a/test/cmocka/src/audio/volume/CMakeLists.txt +++ b/test/cmocka/src/audio/volume/CMakeLists.txt @@ -27,6 +27,7 @@ add_library(audio_for_volume STATIC ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c ) sof_append_relative_path_definitions(audio_for_volume) diff --git a/test/cmocka/src/math/fft/CMakeLists.txt b/test/cmocka/src/math/fft/CMakeLists.txt index 3786223ab244..b9e2b1cf076f 100644 --- a/test/cmocka/src/math/fft/CMakeLists.txt +++ b/test/cmocka/src/math/fft/CMakeLists.txt @@ -16,4 +16,5 @@ cmocka_test(fft ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c ${PROJECT_SOURCE_DIR}/test/cmocka/src/common_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c )