From fb75e4ec6457e835d53eb602a840a3de7024259e Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Thu, 16 Apr 2026 12:46:58 +0530 Subject: [PATCH 01/11] Update main.cpp --- media/server/service/source/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/media/server/service/source/main.cpp b/media/server/service/source/main.cpp index 94c7e5138..31b00e61d 100644 --- a/media/server/service/source/main.cpp +++ b/media/server/service/source/main.cpp @@ -56,8 +56,10 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - appSessionServer->startService(); + GstPerf* rialto_perf = new GstPerf("rialtoseesionserver_perf"); + appSessionServer->startService(); + delete rialto_perf; #ifdef FREE_MEM_BEFORE_EXIT RIALTO_SERVER_LOG_INFO("Calling ShutdownProtobufLibrary"); google::protobuf::ShutdownProtobufLibrary(); From 4974a1b254a60fc4b3518e115c6f062d0089f6f5 Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Thu, 16 Apr 2026 18:11:08 +0530 Subject: [PATCH 02/11] Update main.cpp --- media/server/service/source/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/media/server/service/source/main.cpp b/media/server/service/source/main.cpp index 31b00e61d..756ee2d6b 100644 --- a/media/server/service/source/main.cpp +++ b/media/server/service/source/main.cpp @@ -23,6 +23,7 @@ #include "IApplicationSessionServer.h" #include "IGstInitialiser.h" #include "RialtoServerLogging.h" +#include "rdk_perf.h" // NOLINT(build/filename_format) From 8b0ec4ec8d22a359ce6ddf6954b80d1ef4ec3145 Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Thu, 16 Apr 2026 19:32:23 +0530 Subject: [PATCH 03/11] Update CMakeLists.txt --- common/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 42d7a115f..ba12d4c26 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -27,7 +27,7 @@ add_subdirectory(public) add_library( RialtoCommon STATIC - + source/EventThread.cpp source/LinuxUtils.cpp source/Timer.cpp @@ -43,6 +43,7 @@ target_include_directories( RialtoCommon PUBLIC + interface $ @@ -52,7 +53,8 @@ target_include_directories( target_link_libraries ( RialtoCommon - + PUBLIC + rdkperf perftool PRIVATE RialtoLogging ) From 9dfc5746cffb6e5b5355fa2e0f8897ffd9e0dfab Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Mon, 20 Apr 2026 19:10:59 +0530 Subject: [PATCH 04/11] Update main.cpp --- media/server/service/source/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/media/server/service/source/main.cpp b/media/server/service/source/main.cpp index 756ee2d6b..b56a98ec8 100644 --- a/media/server/service/source/main.cpp +++ b/media/server/service/source/main.cpp @@ -32,6 +32,7 @@ int main(int argc, char *argv[]) const char kSrcRev[] = SRCREV; const char kTags[] = TAGS; + RDKPerf perf(__FUNCTION__); if (std::strlen(kSrcRev) > 0) { if (std::strlen(kTags) > 0) @@ -58,9 +59,9 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - GstPerf* rialto_perf = new GstPerf("rialtoseesionserver_perf"); + appSessionServer->startService(); - delete rialto_perf; + #ifdef FREE_MEM_BEFORE_EXIT RIALTO_SERVER_LOG_INFO("Calling ShutdownProtobufLibrary"); google::protobuf::ShutdownProtobufLibrary(); From 66d18c81f3def5e55b494446163a0e5e848371d3 Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Fri, 24 Apr 2026 19:29:38 +0530 Subject: [PATCH 05/11] Update CMakeLists.txt --- common/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index ba12d4c26..ac7d23953 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -54,7 +54,7 @@ target_include_directories( target_link_libraries ( RialtoCommon PUBLIC - rdkperf perftool + rdkperf PRIVATE RialtoLogging ) From 98c8280d89a49cc7b22872268c9b152959431c03 Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Mon, 27 Apr 2026 13:43:42 +0530 Subject: [PATCH 06/11] Update GstGenericPlayer.cpp --- media/server/gstplayer/source/GstGenericPlayer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/media/server/gstplayer/source/GstGenericPlayer.cpp b/media/server/gstplayer/source/GstGenericPlayer.cpp index ef9e985b8..b3805d097 100644 --- a/media/server/gstplayer/source/GstGenericPlayer.cpp +++ b/media/server/gstplayer/source/GstGenericPlayer.cpp @@ -35,6 +35,7 @@ #include "Utils.h" #include "WorkerThread.h" #include "tasks/generic/GenericPlayerTaskFactory.h" +#include "rdk_perf.h" namespace { @@ -1410,6 +1411,7 @@ bool GstGenericPlayer::setCodecData(GstCaps *caps, const std::shared_ptrsecond) From 858f6fc9ac9f0f890e9921ab6cafba57639c807f Mon Sep 17 00:00:00 2001 From: balasaraswathy-n Date: Mon, 27 Apr 2026 13:45:56 +0530 Subject: [PATCH 07/11] Update AttachSamples.cpp --- .../server/gstplayer/source/tasks/generic/AttachSamples.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp b/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp index a9049f44b..e09d24fb6 100644 --- a/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp +++ b/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp @@ -23,6 +23,8 @@ #include "RialtoServerLogging.h" #include "TypeConverters.h" #include +#include "rdk_perf.h" + namespace firebolt::rialto::server::tasks::generic { @@ -85,7 +87,8 @@ AttachSamples::~AttachSamples() void AttachSamples::execute() const { - RIALTO_SERVER_LOG_DEBUG("Executing AttachSamples"); + RDKPerf perf(__FUNCTION__); + RIALTO_SERVER_LOG_DEBUG("Executing AttachSamples"); for (AudioData audioData : m_audioData) { m_player.updateAudioCaps(audioData.rate, audioData.channels, audioData.codecData); From eeb74da0568f7770c143c7b286062b4fce273ceb Mon Sep 17 00:00:00 2001 From: Marcin Wojciechowski Date: Tue, 28 Apr 2026 13:56:27 +0200 Subject: [PATCH 08/11] wrapper impl --- common/CMakeLists.txt | 6 +- media/server/CMakeLists.txt | 2 + .../gstplayer/include/GstGenericPlayer.h | 10 +++ .../tasks/generic/GenericPlayerTaskFactory.h | 3 + .../generic/ReadShmDataAndAttachSamples.h | 9 ++- .../gstplayer/source/GstGenericPlayer.cpp | 22 ++++--- .../source/tasks/generic/AttachSamples.cpp | 5 +- .../generic/GenericPlayerTaskFactory.cpp | 7 +- .../generic/ReadShmDataAndAttachSamples.cpp | 5 +- media/server/service/source/main.cpp | 7 +- wrappers/CMakeLists.txt | 6 +- wrappers/include/FactoryAccessor.h | 2 + wrappers/include/RdkPerfWrapper.h | 49 ++++++++++++++ wrappers/interface/IFactoryAccessor.h | 8 +++ wrappers/interface/IRdkPerfWrapper.h | 66 +++++++++++++++++++ wrappers/source/FactoryAccessor.cpp | 12 ++++ wrappers/source/RdkPerfWrapper.cpp | 31 +++++++++ .../source/RdkPerfWrapperFactoryAccessor.cpp | 29 ++++++++ 18 files changed, 252 insertions(+), 27 deletions(-) create mode 100644 wrappers/include/RdkPerfWrapper.h create mode 100644 wrappers/interface/IRdkPerfWrapper.h create mode 100644 wrappers/source/RdkPerfWrapper.cpp create mode 100644 wrappers/source/RdkPerfWrapperFactoryAccessor.cpp diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index ac7d23953..42d7a115f 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -27,7 +27,7 @@ add_subdirectory(public) add_library( RialtoCommon STATIC - + source/EventThread.cpp source/LinuxUtils.cpp source/Timer.cpp @@ -43,7 +43,6 @@ target_include_directories( RialtoCommon PUBLIC - interface $ @@ -53,8 +52,7 @@ target_include_directories( target_link_libraries ( RialtoCommon - PUBLIC - rdkperf + PRIVATE RialtoLogging ) diff --git a/media/server/CMakeLists.txt b/media/server/CMakeLists.txt index 05d4ec2a2..a8855817b 100644 --- a/media/server/CMakeLists.txt +++ b/media/server/CMakeLists.txt @@ -47,6 +47,7 @@ target_include_directories ( $ $ $ + $ ) set_target_properties( @@ -61,6 +62,7 @@ target_link_libraries( RialtoServerIpc RialtoServerMain RialtoServerService + RialtoWrappers protobuf::libprotobuf ) diff --git a/media/server/gstplayer/include/GstGenericPlayer.h b/media/server/gstplayer/include/GstGenericPlayer.h index 93e163f5a..cb8892470 100644 --- a/media/server/gstplayer/include/GstGenericPlayer.h +++ b/media/server/gstplayer/include/GstGenericPlayer.h @@ -31,6 +31,7 @@ #include "IGstProtectionMetadataHelperFactory.h" #include "IGstSrc.h" #include "IGstWrapper.h" +#include "IRdkPerfWrapper.h" #include "ITimer.h" #include "IWorkerThread.h" #include "tasks/IGenericPlayerTaskFactory.h" @@ -80,6 +81,8 @@ class GstGenericPlayer : public IGstGenericPlayer, public IGstGenericPlayerPriva * @param[in] videoRequirements : The video requirements for the playback. * @param[in] gstWrapper : The gstreamer wrapper. * @param[in] glibWrapper : The glib wrapper. + * @param[in] rdkGstreamerUtilsWrapper : The rdk gstreamer utils wrapper + * @param[in] rdkPerfWrapperFactory : The rdk perf wrapper factory * @param[in] gstInitialiser : The gst initialiser * @param[in] flushWatcher : The flush watcher * @param[in] gstSrcFactory : The gstreamer rialto src factory. @@ -87,12 +90,14 @@ class GstGenericPlayer : public IGstGenericPlayer, public IGstGenericPlayerPriva * @param[in] taskFactory : The task factory * @param[in] workerThreadFactory : The worker thread factory * @param[in] gstDispatcherThreadFactory : The gst dispatcher thread factory + * @param[in] gstProtectionMetadataFactory : The gst protection metadata helper factory */ GstGenericPlayer(IGstGenericPlayerClient *client, IDecryptionService &decryptionService, MediaType type, const VideoRequirements &videoRequirements, const std::shared_ptr &gstWrapper, const std::shared_ptr &glibWrapper, const std::shared_ptr &rdkGstreamerUtilsWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, const IGstInitialiser &gstInitialiser, std::unique_ptr &&flushWatcher, const std::shared_ptr &gstSrcFactory, std::shared_ptr timerFactory, @@ -431,6 +436,11 @@ class GstGenericPlayer : public IGstGenericPlayer, public IGstGenericPlayerPriva */ std::shared_ptr m_rdkGstreamerUtilsWrapper; + /** + * @brief The rdk perf wrapper factory object + */ + std::shared_ptr m_rdkPerfWrapperFactory; + /** * @brief Thread for handling player tasks. */ diff --git a/media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h b/media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h index 79e31838b..74eb02b8f 100644 --- a/media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h +++ b/media/server/gstplayer/include/tasks/generic/GenericPlayerTaskFactory.h @@ -26,6 +26,7 @@ #include "IGstTextTrackSinkFactory.h" #include "IGstWrapper.h" #include "IMediaPipeline.h" +#include "IRdkPerfWrapper.h" #include #include @@ -38,6 +39,7 @@ class GenericPlayerTaskFactory : public IGenericPlayerTaskFactory IGstGenericPlayerClient *client, const std::shared_ptr &gstWrapper, const std::shared_ptr &glibWrapper, const std::shared_ptr &rdkGstreamerUtilsWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, const std::shared_ptr &gstTextTrackSinkFactory); ~GenericPlayerTaskFactory() override = default; @@ -140,6 +142,7 @@ class GenericPlayerTaskFactory : public IGenericPlayerTaskFactory std::shared_ptr m_gstWrapper; std::shared_ptr m_glibWrapper; std::shared_ptr m_rdkGstreamerUtilsWrapper; + std::shared_ptr m_rdkPerfWrapperFactory; std::shared_ptr m_gstTextTrackSinkFactory; }; } // namespace firebolt::rialto::server diff --git a/media/server/gstplayer/include/tasks/generic/ReadShmDataAndAttachSamples.h b/media/server/gstplayer/include/tasks/generic/ReadShmDataAndAttachSamples.h index 4f26fad65..6b9b17668 100644 --- a/media/server/gstplayer/include/tasks/generic/ReadShmDataAndAttachSamples.h +++ b/media/server/gstplayer/include/tasks/generic/ReadShmDataAndAttachSamples.h @@ -25,6 +25,7 @@ #include "IGstGenericPlayerPrivate.h" #include "IGstWrapper.h" #include "IPlayerTask.h" +#include "IRdkPerfWrapper.h" #include namespace firebolt::rialto::server::tasks::generic @@ -32,9 +33,10 @@ namespace firebolt::rialto::server::tasks::generic class ReadShmDataAndAttachSamples : public IPlayerTask { public: - ReadShmDataAndAttachSamples(GenericPlayerContext &context, - const std::shared_ptr &gstWrapper, - IGstGenericPlayerPrivate &player, const std::shared_ptr &dataReader); + ReadShmDataAndAttachSamples( + GenericPlayerContext &context, const std::shared_ptr &gstWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, + IGstGenericPlayerPrivate &player, const std::shared_ptr &dataReader); ~ReadShmDataAndAttachSamples() override; void execute() const override; @@ -42,6 +44,7 @@ class ReadShmDataAndAttachSamples : public IPlayerTask void attachData(const firebolt::rialto::MediaSourceType mediaType, GstBuffer *buffer) const; GenericPlayerContext &m_context; std::shared_ptr m_gstWrapper; + std::shared_ptr m_rdkPerfWrapperFactory; IGstGenericPlayerPrivate &m_player; std::shared_ptr m_dataReader; }; diff --git a/media/server/gstplayer/source/GstGenericPlayer.cpp b/media/server/gstplayer/source/GstGenericPlayer.cpp index 786603184..83f9b92cd 100644 --- a/media/server/gstplayer/source/GstGenericPlayer.cpp +++ b/media/server/gstplayer/source/GstGenericPlayer.cpp @@ -34,8 +34,8 @@ #include "TypeConverters.h" #include "Utils.h" #include "WorkerThread.h" -#include "tasks/generic/GenericPlayerTaskFactory.h" #include "rdk_perf.h" +#include "tasks/generic/GenericPlayerTaskFactory.h" namespace { @@ -90,6 +90,7 @@ std::unique_ptr GstGenericPlayerFactory::createGstGenericPlay { auto gstWrapperFactory = firebolt::rialto::wrappers::IGstWrapperFactory::getFactory(); auto glibWrapperFactory = firebolt::rialto::wrappers::IGlibWrapperFactory::getFactory(); + auto rdkPerfWrapperFactory = firebolt::rialto::wrappers::IRdkPerfWrapperFactory::createFactory(); std::shared_ptr gstWrapper; std::shared_ptr glibWrapper; std::shared_ptr rdkGstreamerUtilsWrapper; @@ -106,12 +107,17 @@ std::unique_ptr GstGenericPlayerFactory::createGstGenericPlay { throw std::runtime_error("Cannot create RdkGstreamerUtilsWrapper"); } + if (!rdkPerfWrapperFactory) + { + throw std::runtime_error("Cannot create RdkPerfWrapperFactory"); + } gstPlayer = std::make_unique< GstGenericPlayer>(client, decryptionService, type, videoRequirements, gstWrapper, glibWrapper, - rdkGstreamerUtilsWrapper, IGstInitialiser::instance(), std::make_unique(), - IGstSrcFactory::getFactory(), common::ITimerFactory::getFactory(), + rdkGstreamerUtilsWrapper, rdkPerfWrapperFactory, IGstInitialiser::instance(), + std::make_unique(), IGstSrcFactory::getFactory(), + common::ITimerFactory::getFactory(), std::make_unique(client, gstWrapper, glibWrapper, - rdkGstreamerUtilsWrapper, + rdkGstreamerUtilsWrapper, rdkPerfWrapperFactory, IGstTextTrackSinkFactory::createFactory()), std::make_unique(), std::make_unique(), IGstProtectionMetadataHelperFactory::createFactory()); @@ -130,14 +136,15 @@ GstGenericPlayer::GstGenericPlayer( const std::shared_ptr &gstWrapper, const std::shared_ptr &glibWrapper, const std::shared_ptr &rdkGstreamerUtilsWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, const IGstInitialiser &gstInitialiser, std::unique_ptr &&flushWatcher, const std::shared_ptr &gstSrcFactory, std::shared_ptr timerFactory, std::unique_ptr taskFactory, std::unique_ptr workerThreadFactory, std::unique_ptr gstDispatcherThreadFactory, std::shared_ptr gstProtectionMetadataFactory) : m_gstPlayerClient(client), m_gstWrapper{gstWrapper}, m_glibWrapper{glibWrapper}, - m_rdkGstreamerUtilsWrapper{rdkGstreamerUtilsWrapper}, m_timerFactory{timerFactory}, - m_taskFactory{std::move(taskFactory)}, m_flushWatcher{std::move(flushWatcher)} + m_rdkGstreamerUtilsWrapper{rdkGstreamerUtilsWrapper}, m_rdkPerfWrapperFactory{rdkPerfWrapperFactory}, + m_timerFactory{timerFactory}, m_taskFactory{std::move(taskFactory)}, m_flushWatcher{std::move(flushWatcher)} { RIALTO_SERVER_LOG_DEBUG("GstGenericPlayer is constructed."); @@ -1463,7 +1470,6 @@ bool GstGenericPlayer::setCodecData(GstCaps *caps, const std::shared_ptrcreateRdkPerfWrapper(__FUNCTION__); pushAdditionalSegmentIfRequired(source); for (const auto &[position, resetTime, appliedRate, stopPosition] : initialPosition->second) diff --git a/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp b/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp index e09d24fb6..a9049f44b 100644 --- a/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp +++ b/media/server/gstplayer/source/tasks/generic/AttachSamples.cpp @@ -23,8 +23,6 @@ #include "RialtoServerLogging.h" #include "TypeConverters.h" #include -#include "rdk_perf.h" - namespace firebolt::rialto::server::tasks::generic { @@ -87,8 +85,7 @@ AttachSamples::~AttachSamples() void AttachSamples::execute() const { - RDKPerf perf(__FUNCTION__); - RIALTO_SERVER_LOG_DEBUG("Executing AttachSamples"); + RIALTO_SERVER_LOG_DEBUG("Executing AttachSamples"); for (AudioData audioData : m_audioData) { m_player.updateAudioCaps(audioData.rate, audioData.channels, audioData.codecData); diff --git a/media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp b/media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp index a7886a335..a465472dd 100644 --- a/media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp +++ b/media/server/gstplayer/source/tasks/generic/GenericPlayerTaskFactory.cpp @@ -66,9 +66,11 @@ GenericPlayerTaskFactory::GenericPlayerTaskFactory( IGstGenericPlayerClient *client, const std::shared_ptr &gstWrapper, const std::shared_ptr &glibWrapper, const std::shared_ptr &rdkGstreamerUtilsWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, const std::shared_ptr &gstTextTrackSinkFactory) : m_client{client}, m_gstWrapper{gstWrapper}, m_glibWrapper{glibWrapper}, - m_rdkGstreamerUtilsWrapper{rdkGstreamerUtilsWrapper}, m_gstTextTrackSinkFactory{gstTextTrackSinkFactory} + m_rdkGstreamerUtilsWrapper{rdkGstreamerUtilsWrapper}, m_rdkPerfWrapperFactory{rdkPerfWrapperFactory}, + m_gstTextTrackSinkFactory{gstTextTrackSinkFactory} { } @@ -144,7 +146,8 @@ std::unique_ptr GenericPlayerTaskFactory::createPlay(IGstGenericPla std::unique_ptr GenericPlayerTaskFactory::createReadShmDataAndAttachSamples( GenericPlayerContext &context, IGstGenericPlayerPrivate &player, const std::shared_ptr &dataReader) const { - return std::make_unique(context, m_gstWrapper, player, dataReader); + return std::make_unique(context, m_gstWrapper, m_rdkPerfWrapperFactory, + player, dataReader); } std::unique_ptr GenericPlayerTaskFactory::createReportPosition(GenericPlayerContext &context, diff --git a/media/server/gstplayer/source/tasks/generic/ReadShmDataAndAttachSamples.cpp b/media/server/gstplayer/source/tasks/generic/ReadShmDataAndAttachSamples.cpp index 1df7213a7..304e74fb1 100644 --- a/media/server/gstplayer/source/tasks/generic/ReadShmDataAndAttachSamples.cpp +++ b/media/server/gstplayer/source/tasks/generic/ReadShmDataAndAttachSamples.cpp @@ -29,8 +29,10 @@ namespace firebolt::rialto::server::tasks::generic { ReadShmDataAndAttachSamples::ReadShmDataAndAttachSamples( GenericPlayerContext &context, const std::shared_ptr &gstWrapper, + const std::shared_ptr &rdkPerfWrapperFactory, IGstGenericPlayerPrivate &player, const std::shared_ptr &dataReader) - : m_context{context}, m_gstWrapper{gstWrapper}, m_player{player}, m_dataReader{dataReader} + : m_context{context}, m_gstWrapper{gstWrapper}, m_rdkPerfWrapperFactory{rdkPerfWrapperFactory}, m_player{player}, + m_dataReader{dataReader} { RIALTO_SERVER_LOG_DEBUG("Constructing ReadShmDataAndAttachSamples"); } @@ -43,6 +45,7 @@ ReadShmDataAndAttachSamples::~ReadShmDataAndAttachSamples() void ReadShmDataAndAttachSamples::execute() const { RIALTO_SERVER_LOG_DEBUG("Executing ReadShmDataAndAttachSamples"); + auto perf = m_rdkPerfWrapperFactory->createRdkPerfWrapper(__FUNCTION__); // Read media segments from shared memory IMediaPipeline::MediaSegmentVector mediaSegments = m_dataReader->readData(); diff --git a/media/server/service/source/main.cpp b/media/server/service/source/main.cpp index b56a98ec8..bfebadb86 100644 --- a/media/server/service/source/main.cpp +++ b/media/server/service/source/main.cpp @@ -22,8 +22,8 @@ #include "IApplicationSessionServer.h" #include "IGstInitialiser.h" +#include "IRdkPerfWrapper.h" #include "RialtoServerLogging.h" -#include "rdk_perf.h" // NOLINT(build/filename_format) @@ -32,7 +32,7 @@ int main(int argc, char *argv[]) const char kSrcRev[] = SRCREV; const char kTags[] = TAGS; - RDKPerf perf(__FUNCTION__); + auto perf = firebolt::rialto::wrappers::IRdkPerfWrapperFactory::createFactory()->createRdkPerfWrapper(__FUNCTION__); if (std::strlen(kSrcRev) > 0) { if (std::strlen(kTags) > 0) @@ -59,9 +59,8 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - appSessionServer->startService(); - + #ifdef FREE_MEM_BEFORE_EXIT RIALTO_SERVER_LOG_INFO("Calling ShutdownProtobufLibrary"); google::protobuf::ShutdownProtobufLibrary(); diff --git a/wrappers/CMakeLists.txt b/wrappers/CMakeLists.txt index 3be841fd1..dc2135964 100644 --- a/wrappers/CMakeLists.txt +++ b/wrappers/CMakeLists.txt @@ -56,6 +56,7 @@ if( NOT CMAKE_BUILD_FLAG STREQUAL "UnitTests" AND NOT CMAKE_BUILD_FLAG STREQUAL ${OCdm_INCLUDE_DIRS} ${WPEFRAMEWORK_CORE_INCLUDE_DIRS} ${WPEFRAMEWORK_COM_INCLUDE_DIRS} + ${rdkperf_INCLUDE_DIRS} ) set(WRAPPER_LIBS @@ -63,6 +64,7 @@ if( NOT CMAKE_BUILD_FLAG STREQUAL "UnitTests" AND NOT CMAKE_BUILD_FLAG STREQUAL ocdm::ocdm WPEFrameworkCore::WPEFrameworkCore WPEFrameworkCOM::WPEFrameworkCOM + rdkperf ${CMAKE_DL_LIBS}) set(WRAPPER_SOURCES @@ -76,7 +78,9 @@ if( NOT CMAKE_BUILD_FLAG STREQUAL "UnitTests" AND NOT CMAKE_BUILD_FLAG STREQUAL source/RdkGstreamerUtilsWrapper.cpp source/TextTrackPluginWrapper.cpp source/TextTrackWrapper.cpp - source/ThunderWrapper.cpp) + source/ThunderWrapper.cpp + source/RdkPerfWrapper.cpp + source/RdkPerfWrapperFactoryAccessor.cpp) endif() add_library( diff --git a/wrappers/include/FactoryAccessor.h b/wrappers/include/FactoryAccessor.h index 16f338ecc..2ce18fda0 100644 --- a/wrappers/include/FactoryAccessor.h +++ b/wrappers/include/FactoryAccessor.h @@ -39,6 +39,7 @@ class FactoryAccessor : public IFactoryAccessor std::shared_ptr &rdkGstreamerUtilsWrapperFactory() override; std::shared_ptr &textTrackPluginWrapperFactory() override; std::shared_ptr &thunderWrapperFactory() override; + std::shared_ptr &rdkPerfWrapperFactory() override; private: std::shared_ptr m_glibWrapperFactory{nullptr}; @@ -49,6 +50,7 @@ class FactoryAccessor : public IFactoryAccessor std::shared_ptr m_rdkGstreamerUtilsWrapperFactory{nullptr}; std::shared_ptr m_textTrackPluginWrapperFactory{nullptr}; std::shared_ptr m_thunderWrapperFactory{nullptr}; + std::shared_ptr m_rdkPerfWrapperFactory{nullptr}; }; } // namespace firebolt::rialto::wrappers diff --git a/wrappers/include/RdkPerfWrapper.h b/wrappers/include/RdkPerfWrapper.h new file mode 100644 index 000000000..55e34f99a --- /dev/null +++ b/wrappers/include/RdkPerfWrapper.h @@ -0,0 +1,49 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_H_ +#define FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_H_ + +#include "IRdkPerfWrapper.h" +#include "rdk_perf.h" +#include + +namespace firebolt::rialto::wrappers +{ +class RdkPerfWrapperFactory : public IRdkPerfWrapperFactory +{ +public: + RdkPerfWrapperFactory() = default; + ~RdkPerfWrapperFactory() override = default; + + std::unique_ptr createRdkPerfWrapper(const char *szName) const override; +}; + +class RdkPerfWrapper : public IRdkPerfWrapper +{ +public: + RdkPerfWrapper(const char *szName); + ~RdkPerfWrapper() override = default; + +private: + RDKPerf m_perf; +}; +} // namespace firebolt::rialto::wrappers + +#endif // FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_H_ diff --git a/wrappers/interface/IFactoryAccessor.h b/wrappers/interface/IFactoryAccessor.h index bc60cd06b..ddbf50b4c 100644 --- a/wrappers/interface/IFactoryAccessor.h +++ b/wrappers/interface/IFactoryAccessor.h @@ -26,6 +26,7 @@ #include "IOcdm.h" #include "IOcdmSystem.h" #include "IRdkGstreamerUtilsWrapper.h" +#include "IRdkPerfWrapper.h" #include "ITextTrackPluginWrapper.h" #include "IThunderWrapper.h" #include @@ -110,6 +111,13 @@ class IFactoryAccessor */ virtual std::shared_ptr &thunderWrapperFactory() = 0; + /** + * @brief Access the IRdkPerfWrapperFactory instance. + * + * @retval non-const (by purpose) reference to the factory instance ptr + */ + virtual std::shared_ptr &rdkPerfWrapperFactory() = 0; + protected: /** * @brief Default constructor diff --git a/wrappers/interface/IRdkPerfWrapper.h b/wrappers/interface/IRdkPerfWrapper.h new file mode 100644 index 000000000..26a6dcdf6 --- /dev/null +++ b/wrappers/interface/IRdkPerfWrapper.h @@ -0,0 +1,66 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FIREBOLT_RIALTO_WRAPPERS_I_RDK_PERF_WRAPPER_H_ +#define FIREBOLT_RIALTO_WRAPPERS_I_RDK_PERF_WRAPPER_H_ + +#include + +namespace firebolt::rialto::wrappers +{ +class IRdkPerfWrapper; + +/** + * @brief IRdkPerfWrapperFactory factory class, returns a concrete implementation of IRdkPerfWrapper + */ +class IRdkPerfWrapperFactory +{ +public: + IRdkPerfWrapperFactory() = default; + virtual ~IRdkPerfWrapperFactory() = default; + + /** + * @brief Creates a IRdkPerfWrapperFactory instance. + * + * @retval the factory instance or null on error. + */ + static std::shared_ptr createFactory(); + + /** + * @brief Creates an IRdkPerfWrapper object. + * + * @retval the new RDK Perf wrapper instance or null on error. + */ + virtual std::unique_ptr createRdkPerfWrapper(const char *szName) const = 0; +}; + +class IRdkPerfWrapper +{ +public: + IRdkPerfWrapper() = default; + virtual ~IRdkPerfWrapper() = default; + + IRdkPerfWrapper(const IRdkPerfWrapper &) = delete; + IRdkPerfWrapper &operator=(const IRdkPerfWrapper &) = delete; + IRdkPerfWrapper(IRdkPerfWrapper &&) = delete; + IRdkPerfWrapper &operator=(IRdkPerfWrapper &&) = delete; +}; +} // namespace firebolt::rialto::wrappers + +#endif // FIREBOLT_RIALTO_WRAPPERS_I_RDK_PERF_WRAPPER_H_ diff --git a/wrappers/source/FactoryAccessor.cpp b/wrappers/source/FactoryAccessor.cpp index 6857f1e79..6e5442856 100644 --- a/wrappers/source/FactoryAccessor.cpp +++ b/wrappers/source/FactoryAccessor.cpp @@ -26,6 +26,7 @@ #include "Ocdm.h" #include "OcdmSystem.h" #include "RdkGstreamerUtilsWrapper.h" +#include "RdkPerfWrapper.h" #include "TextTrackPluginWrapperFactory.h" #include "ThunderWrapper.h" #endif // WRAPPERS_ENABLED @@ -125,4 +126,15 @@ std::shared_ptr &FactoryAccessor::thunderWrapperFactory( #endif // WRAPPERS_ENABLED return m_thunderWrapperFactory; } + +std::shared_ptr &FactoryAccessor::rdkPerfWrapperFactory() +{ +#ifdef WRAPPERS_ENABLED + if (!m_rdkPerfWrapperFactory) + { + m_rdkPerfWrapperFactory = std::make_shared(); + } +#endif // WRAPPERS_ENABLED + return m_rdkPerfWrapperFactory; +} } // namespace firebolt::rialto::wrappers diff --git a/wrappers/source/RdkPerfWrapper.cpp b/wrappers/source/RdkPerfWrapper.cpp new file mode 100644 index 000000000..4393f4926 --- /dev/null +++ b/wrappers/source/RdkPerfWrapper.cpp @@ -0,0 +1,31 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "RdkPerfWrapper.h" +#include + +namespace firebolt::rialto::wrappers +{ +std::unique_ptr RdkPerfWrapperFactory::createRdkPerfWrapper(const char *szName) const +{ + return std::make_unique(szName); +} + +RdkPerfWrapper::RdkPerfWrapper(const char *szName) : m_perf(szName) {} +} // namespace firebolt::rialto::wrappers diff --git a/wrappers/source/RdkPerfWrapperFactoryAccessor.cpp b/wrappers/source/RdkPerfWrapperFactoryAccessor.cpp new file mode 100644 index 000000000..407ba6ed7 --- /dev/null +++ b/wrappers/source/RdkPerfWrapperFactoryAccessor.cpp @@ -0,0 +1,29 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "IFactoryAccessor.h" +#include "IRdkPerfWrapper.h" + +namespace firebolt::rialto::wrappers +{ +std::shared_ptr IRdkPerfWrapperFactory::createFactory() +{ + return IFactoryAccessor::instance().rdkPerfWrapperFactory(); +} +} // namespace firebolt::rialto::wrappers From 1789e362e657bfc305890a132a29db46630bf472 Mon Sep 17 00:00:00 2001 From: Marcin Wojciechowski Date: Tue, 28 Apr 2026 15:02:40 +0200 Subject: [PATCH 09/11] ut/ct fix --- .../gstplayer/source/GstGenericPlayer.cpp | 1 - media/server/service/source/main.cpp | 1 - .../RdkPerfWrapperFactoryMock.h | 36 ++++++++++ .../fixtures/RialtoServerComponentTest.cpp | 6 ++ .../fixtures/RialtoServerComponentTest.h | 3 + .../gstplayer/genericPlayer/CreateTest.cpp | 70 +++++++++++-------- .../GstDispatcherThreadClientTest.cpp | 8 +-- .../GstGenericPlayerPrivateTest.cpp | 13 ++-- .../genericPlayer/GstGenericPlayerTest.cpp | 8 +-- .../common/GenericTasksTestsBase.cpp | 8 +++ .../common/GenericTasksTestsBase.h | 1 + .../common/GenericTasksTestsContext.h | 3 + .../common/GstGenericPlayerTestCommon.h | 3 + .../GenericPlayerTaskFactoryTest.cpp | 11 ++- .../ReadShmDataAndAttachSamplesTest.cpp | 5 ++ wrappers/CMakeLists.txt | 4 +- wrappers/include/RdkPerfWrapper.h | 2 +- 17 files changed, 134 insertions(+), 49 deletions(-) create mode 100644 tests/common/externalLibraryMocks/RdkPerfWrapperFactoryMock.h diff --git a/media/server/gstplayer/source/GstGenericPlayer.cpp b/media/server/gstplayer/source/GstGenericPlayer.cpp index 83f9b92cd..54e6e4b40 100644 --- a/media/server/gstplayer/source/GstGenericPlayer.cpp +++ b/media/server/gstplayer/source/GstGenericPlayer.cpp @@ -34,7 +34,6 @@ #include "TypeConverters.h" #include "Utils.h" #include "WorkerThread.h" -#include "rdk_perf.h" #include "tasks/generic/GenericPlayerTaskFactory.h" namespace diff --git a/media/server/service/source/main.cpp b/media/server/service/source/main.cpp index bfebadb86..e421929ca 100644 --- a/media/server/service/source/main.cpp +++ b/media/server/service/source/main.cpp @@ -58,7 +58,6 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - appSessionServer->startService(); #ifdef FREE_MEM_BEFORE_EXIT diff --git a/tests/common/externalLibraryMocks/RdkPerfWrapperFactoryMock.h b/tests/common/externalLibraryMocks/RdkPerfWrapperFactoryMock.h new file mode 100644 index 000000000..a167b19e1 --- /dev/null +++ b/tests/common/externalLibraryMocks/RdkPerfWrapperFactoryMock.h @@ -0,0 +1,36 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_FACTORY_MOCK_H_ +#define FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_FACTORY_MOCK_H_ + +#include "IRdkPerfWrapper.h" +#include +#include + +namespace firebolt::rialto::wrappers +{ +class RdkPerfWrapperFactoryMock : public IRdkPerfWrapperFactory +{ +public: + MOCK_METHOD(std::unique_ptr, createRdkPerfWrapper, (const char *), (const, override)); +}; +} // namespace firebolt::rialto::wrappers + +#endif // FIREBOLT_RIALTO_WRAPPERS_RDK_PERF_WRAPPER_FACTORY_MOCK_H_ diff --git a/tests/componenttests/server/fixtures/RialtoServerComponentTest.cpp b/tests/componenttests/server/fixtures/RialtoServerComponentTest.cpp index 20df2972b..88610920e 100644 --- a/tests/componenttests/server/fixtures/RialtoServerComponentTest.cpp +++ b/tests/componenttests/server/fixtures/RialtoServerComponentTest.cpp @@ -31,6 +31,7 @@ using testing::_; using testing::AtLeast; +using testing::Invoke; using testing::Return; using testing::StrEq; @@ -66,6 +67,7 @@ RialtoServerComponentTest::~RialtoServerComponentTest() wrappers::IFactoryAccessor::instance().ocdmFactory() = nullptr; wrappers::IFactoryAccessor::instance().ocdmSystemFactory() = nullptr; wrappers::IFactoryAccessor::instance().rdkGstreamerUtilsWrapperFactory() = nullptr; + wrappers::IFactoryAccessor::instance().rdkPerfWrapperFactory() = nullptr; wrappers::IFactoryAccessor::instance().textTrackPluginWrapperFactory() = nullptr; wrappers::IFactoryAccessor::instance().thunderWrapperFactory() = nullptr; } @@ -136,12 +138,16 @@ void RialtoServerComponentTest::configureWrappers() const EXPECT_CALL(*m_thunderWrapperFactoryMock, getThunderWrapper()) .Times(AtLeast(0)) .WillRepeatedly(Return(m_thunderWrapperMock)); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)) + .Times(AtLeast(0)) + .WillRepeatedly(Invoke([](const char *perfName) { return nullptr; })); wrappers::IFactoryAccessor::instance().glibWrapperFactory() = m_glibWrapperFactoryMock; wrappers::IFactoryAccessor::instance().gstWrapperFactory() = m_gstWrapperFactoryMock; wrappers::IFactoryAccessor::instance().linuxWrapperFactory() = m_linuxWrapperFactoryMock; wrappers::IFactoryAccessor::instance().ocdmFactory() = m_ocdmFactoryMock; wrappers::IFactoryAccessor::instance().ocdmSystemFactory() = m_ocdmSystemFactoryMock; wrappers::IFactoryAccessor::instance().rdkGstreamerUtilsWrapperFactory() = m_rdkGstreamerUtilsWrapperFactoryMock; + wrappers::IFactoryAccessor::instance().rdkPerfWrapperFactory() = m_rdkPerfWrapperFactoryMock; wrappers::IFactoryAccessor::instance().textTrackPluginWrapperFactory() = m_textTrackPluginWrapperFactoryMock; wrappers::IFactoryAccessor::instance().thunderWrapperFactory() = m_thunderWrapperFactoryMock; } diff --git a/tests/componenttests/server/fixtures/RialtoServerComponentTest.h b/tests/componenttests/server/fixtures/RialtoServerComponentTest.h index 94795a579..0115b5183 100644 --- a/tests/componenttests/server/fixtures/RialtoServerComponentTest.h +++ b/tests/componenttests/server/fixtures/RialtoServerComponentTest.h @@ -38,6 +38,7 @@ #include "OcdmSystemMock.h" #include "RdkGstreamerUtilsWrapperFactoryMock.h" #include "RdkGstreamerUtilsWrapperMock.h" +#include "RdkPerfWrapperFactoryMock.h" #include "ServerManagerStub.h" #include "TextTrackPluginWrapperFactoryMock.h" #include "TextTrackPluginWrapperMock.h" @@ -111,6 +112,8 @@ class RialtoServerComponentTest : public ::testing::Test std::make_shared>()}; std::shared_ptr> m_textTrackPluginWrapperFactoryMock{ std::make_shared>()}; + std::shared_ptr> m_rdkPerfWrapperFactoryMock{ + std::make_shared>()}; std::shared_ptr> m_textTrackPluginWrapperMock{ std::make_shared>()}; std::shared_ptr> m_textTrackWrapperMock{ diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/CreateTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/CreateTest.cpp index 901d222ad..3e618f6e8 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/CreateTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/CreateTest.cpp @@ -71,13 +71,14 @@ class RialtoServerCreateGstGenericPlayerTest : public GstGenericPlayerTestCommon gstPlayerWillBeCreated(); EXPECT_NO_THROW( - m_gstPlayer = - std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, - m_gstWrapperMock, m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, - m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, - m_timerFactoryMock, std::move(m_taskFactory), - std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), - m_gstProtectionMetadataFactoryMock)); + m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, + m_videoReq, m_gstWrapperMock, m_glibWrapperMock, + m_rdkGstreamerUtilsWrapperMock, m_rdkPerfWrapperFactoryMock, + m_gstInitialiserMock, std::move(m_flushWatcher), + m_gstSrcFactoryMock, m_timerFactoryMock, + std::move(m_taskFactory), std::move(workerThreadFactory), + std::move(gstDispatcherThreadFactory), + m_gstProtectionMetadataFactoryMock)); EXPECT_NE(m_gstPlayer, nullptr); } @@ -129,6 +130,7 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, FactoryCreatesObject) IFactoryAccessor::instance().gstWrapperFactory() = m_gstWrapperFactoryMock; IFactoryAccessor::instance().glibWrapperFactory() = m_glibWrapperFactoryMock; IFactoryAccessor::instance().rdkGstreamerUtilsWrapperFactory() = m_rdkGstreamerUtilsWrapperFactoryMock; + IFactoryAccessor::instance().rdkPerfWrapperFactory() = m_rdkPerfWrapperFactoryMock; // Create expectations EXPECT_CALL(*m_gstWrapperFactoryMock, getGstWrapper()).WillRepeatedly(Return(m_gstWrapperMock)); @@ -163,6 +165,7 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, FactoryCreatesObject) IFactoryAccessor::instance().gstWrapperFactory() = nullptr; IFactoryAccessor::instance().glibWrapperFactory() = nullptr; IFactoryAccessor::instance().rdkGstreamerUtilsWrapperFactory() = nullptr; + IFactoryAccessor::instance().rdkPerfWrapperFactory() = nullptr; } /** @@ -337,7 +340,8 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, CreateWesterossinkFailsCreateCont EXPECT_CALL(*m_gstWrapperMock, gstContextNew(StrEq("erm"), false)).WillOnce(Return(nullptr)); EXPECT_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, + m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, m_timerFactoryMock, std::move(m_taskFactory), std::move(workerThreadFactory), @@ -355,7 +359,8 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, GstSrcFactoryNull) EXPECT_CALL(m_gstInitialiserMock, waitForInitialisation()); EXPECT_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, + m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, std::move(m_flushWatcher), nullptr, m_timerFactoryMock, std::move(m_taskFactory), std::move(workerThreadFactory), @@ -375,7 +380,8 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, TimerFactoryFails) EXPECT_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, + m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, nullptr, std::move(m_taskFactory), std::move(workerThreadFactory), @@ -395,7 +401,8 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, GstSrcFactoryFails) EXPECT_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, + m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, m_timerFactoryMock, std::move(m_taskFactory), std::move(workerThreadFactory), @@ -422,9 +429,10 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, UnknownMediaType) EXPECT_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, MediaType::UNKNOWN, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, - m_gstInitialiserMock, std::move(m_flushWatcher), - m_gstSrcFactoryMock, m_timerFactoryMock, - std::move(m_taskFactory), std::move(workerThreadFactory), + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, + std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), m_gstProtectionMetadataFactoryMock), std::runtime_error); @@ -455,14 +463,15 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, PlaysinkNotFound) EXPECT_CALL(*m_gstWrapperMock, gstElementSetState(&m_pipeline, GST_STATE_READY)) .WillOnce(Return(GST_STATE_CHANGE_FAILURE)); - EXPECT_NO_THROW( - m_gstPlayer = - std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, - m_gstWrapperMock, m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, - m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, - m_timerFactoryMock, std::move(m_taskFactory), - std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), - m_gstProtectionMetadataFactoryMock)); + EXPECT_NO_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, + m_type, m_videoReq, m_gstWrapperMock, + m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, + std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), + std::move(gstDispatcherThreadFactory), + m_gstProtectionMetadataFactoryMock)); EXPECT_NE(m_gstPlayer, nullptr); executeTaskWhenEnqueued(); @@ -491,14 +500,15 @@ TEST_F(RialtoServerCreateGstGenericPlayerTest, SetNativeAudioForBrcmAudioSink) EXPECT_CALL(*m_gstProtectionMetadataFactoryMock, createProtectionMetadataWrapper(_)) .WillOnce(Return(ByMove(std::move(m_gstProtectionMetadataWrapper)))); - EXPECT_NO_THROW( - m_gstPlayer = - std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, m_type, m_videoReq, - m_gstWrapperMock, m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, - m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, - m_timerFactoryMock, std::move(m_taskFactory), - std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), - m_gstProtectionMetadataFactoryMock)); + EXPECT_NO_THROW(m_gstPlayer = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, + m_type, m_videoReq, m_gstWrapperMock, + m_glibWrapperMock, m_rdkGstreamerUtilsWrapperMock, + m_rdkPerfWrapperFactoryMock, m_gstInitialiserMock, + std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), + std::move(gstDispatcherThreadFactory), + m_gstProtectionMetadataFactoryMock)); EXPECT_NE(m_gstPlayer, nullptr); executeTaskWhenEnqueued(); diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/GstDispatcherThreadClientTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/GstDispatcherThreadClientTest.cpp index ed883ce93..02d3dd9f2 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/GstDispatcherThreadClientTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/GstDispatcherThreadClientTest.cpp @@ -39,10 +39,10 @@ class GstDispatcherThreadClientTest : public GstGenericPlayerTestCommon gstPlayerWillBeCreated(); m_sut = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, MediaType::MSE, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, - std::move(m_flushWatcher), m_gstSrcFactoryMock, m_timerFactoryMock, - std::move(m_taskFactory), std::move(workerThreadFactory), - std::move(gstDispatcherThreadFactory), + m_rdkGstreamerUtilsWrapperMock, m_rdkPerfWrapperFactoryMock, + m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), m_gstProtectionMetadataFactoryMock); } diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerPrivateTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerPrivateTest.cpp index 9db981f26..26255237d 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerPrivateTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerPrivateTest.cpp @@ -119,10 +119,10 @@ class GstGenericPlayerPrivateTest : public GstGenericPlayerTestCommon gstPlayerWillBeCreated(); m_sut = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, MediaType::MSE, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, - std::move(m_flushWatcher), m_gstSrcFactoryMock, m_timerFactoryMock, - std::move(m_taskFactory), std::move(workerThreadFactory), - std::move(gstDispatcherThreadFactory), + m_rdkGstreamerUtilsWrapperMock, m_rdkPerfWrapperFactoryMock, + m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), m_gstProtectionMetadataFactoryMock); m_realElement = initRealElement(); } @@ -891,6 +891,7 @@ TEST_F(GstGenericPlayerPrivateTest, shouldAttachAudioDataWhenAttachingSampleFail SegmentData{kPosition, kResetTime, kAppliedRate, kStopPosition}); context.streamInfo[firebolt::rialto::MediaSourceType::VIDEO].appSrc = GST_ELEMENT(&videoSrc); }); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentNew()).WillOnce(Return(&segment)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentInit(&segment, GST_FORMAT_TIME)); EXPECT_CALL(*m_gstWrapperMock, @@ -926,6 +927,7 @@ TEST_F(GstGenericPlayerPrivateTest, shouldAttachAudioSample) SegmentData{kPosition, kDoNotResetTime, kAppliedRate, kStopPosition}); context.streamInfo[firebolt::rialto::MediaSourceType::VIDEO].appSrc = GST_ELEMENT(&videoSrc); }); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); EXPECT_CALL(*m_gstWrapperMock, gstAppSrcGetCaps(&audioSrc)).WillOnce(Return(&caps)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentNew()).WillOnce(Return(&segment)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentInit(&segment, GST_FORMAT_TIME)); @@ -969,6 +971,7 @@ TEST_F(GstGenericPlayerPrivateTest, shouldAttachAdditionalAudioSample) context.currentPosition[GST_ELEMENT(&audioSrc)] = SegmentData{kPosition, kResetTime, kAppliedRate, kStopPosition}; }); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); EXPECT_CALL(*m_gstWrapperMock, gstAppSrcGetCaps(&audioSrc)).WillRepeatedly(Return(&caps)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentNew()).WillRepeatedly(Return(&segment)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentInit(&segment, GST_FORMAT_TIME)).Times(2); @@ -1013,6 +1016,7 @@ TEST_F(GstGenericPlayerPrivateTest, undefinedStopPositionInSetSourcePosition) SegmentData{kPosition, kDoNotResetTime, kAppliedRate, kUndefinedPosition}); context.streamInfo[firebolt::rialto::MediaSourceType::VIDEO].appSrc = GST_ELEMENT(&videoSrc); }); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); EXPECT_CALL(*m_gstWrapperMock, gstAppSrcGetCaps(&audioSrc)).WillOnce(Return(&caps)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentNew()).WillOnce(Return(&segment)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentInit(&segment, GST_FORMAT_TIME)); @@ -1152,6 +1156,7 @@ TEST_F(GstGenericPlayerPrivateTest, shouldAttachVideoSample) SegmentData{kPosition, kResetTime, kAppliedRate, kStopPosition}); context.streamInfo[firebolt::rialto::MediaSourceType::AUDIO].appSrc = GST_ELEMENT(&audioSrc); }); + EXPECT_CALL(*m_rdkPerfWrapperFactoryMock, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); EXPECT_CALL(*m_gstWrapperMock, gstAppSrcGetCaps(&videoSrc)).WillOnce(Return(&caps)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentNew()).WillOnce(Return(&segment)); EXPECT_CALL(*m_gstWrapperMock, gstSegmentInit(&segment, GST_FORMAT_TIME)); diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerTest.cpp index c658a080d..28b9879c1 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/GstGenericPlayerTest.cpp @@ -53,10 +53,10 @@ class GstGenericPlayerTest : public GstGenericPlayerTestCommon gstPlayerWillBeCreated(); m_sut = std::make_unique(&m_gstPlayerClient, m_decryptionServiceMock, MediaType::MSE, m_videoReq, m_gstWrapperMock, m_glibWrapperMock, - m_rdkGstreamerUtilsWrapperMock, m_gstInitialiserMock, - std::move(m_flushWatcher), m_gstSrcFactoryMock, m_timerFactoryMock, - std::move(m_taskFactory), std::move(workerThreadFactory), - std::move(gstDispatcherThreadFactory), + m_rdkGstreamerUtilsWrapperMock, m_rdkPerfWrapperFactoryMock, + m_gstInitialiserMock, std::move(m_flushWatcher), m_gstSrcFactoryMock, + m_timerFactoryMock, std::move(m_taskFactory), + std::move(workerThreadFactory), std::move(gstDispatcherThreadFactory), m_gstProtectionMetadataFactoryMock); m_element = fakeElement(); } diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp index 13da7fecc..26f5c35ed 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.cpp @@ -3067,10 +3067,16 @@ void GenericTasksTestsBase::shouldNotAttachUnknownSamples() EXPECT_CALL(testContext->m_gstPlayer, notifyNeedMediaData(MediaSourceType::UNKNOWN)); } +void GenericTasksTestsBase::shouldCreatePerfWrapper() +{ + EXPECT_CALL(*testContext->m_rdkPerfWrapperFactory, createRdkPerfWrapper(_)).WillOnce(Return(nullptr)); +} + void GenericTasksTestsBase::triggerReadShmDataAndAttachSamplesAudio() { firebolt::rialto::server::tasks::generic::ReadShmDataAndAttachSamples task{testContext->m_context, testContext->m_gstWrapper, + testContext->m_rdkPerfWrapperFactory, testContext->m_gstPlayer, testContext->m_dataReader}; task.execute(); @@ -3084,6 +3090,7 @@ void GenericTasksTestsBase::triggerReadShmDataAndAttachSamplesVideo() { firebolt::rialto::server::tasks::generic::ReadShmDataAndAttachSamples task{testContext->m_context, testContext->m_gstWrapper, + testContext->m_rdkPerfWrapperFactory, testContext->m_gstPlayer, testContext->m_dataReader}; task.execute(); @@ -3096,6 +3103,7 @@ void GenericTasksTestsBase::triggerReadShmDataAndAttachSamples() { firebolt::rialto::server::tasks::generic::ReadShmDataAndAttachSamples task{testContext->m_context, testContext->m_gstWrapper, + testContext->m_rdkPerfWrapperFactory, testContext->m_gstPlayer, testContext->m_dataReader}; task.execute(); diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h index fc875a400..12723fe96 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h +++ b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsBase.h @@ -398,6 +398,7 @@ class GenericTasksTestsBase : public ::testing::Test void shouldReadSubtitleData(); void shouldReadUnknownData(); void shouldNotAttachUnknownSamples(); + void shouldCreatePerfWrapper(); void triggerReadShmDataAndAttachSamplesAudio(); void triggerReadShmDataAndAttachSamplesVideo(); void triggerReadShmDataAndAttachSamples(); diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h index e51d1095e..42b82e510 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h +++ b/tests/unittests/media/server/gstplayer/genericPlayer/common/GenericTasksTestsContext.h @@ -30,6 +30,7 @@ #include "GstTextTrackSinkFactoryMock.h" #include "GstWrapperMock.h" #include "RdkGstreamerUtilsWrapperMock.h" +#include "RdkPerfWrapperFactoryMock.h" #include #include @@ -61,6 +62,8 @@ class GenericTasksTestsContext std::make_shared>()}; std::shared_ptr m_gstTextTrackSinkFactoryMock{ std::make_shared>()}; + std::shared_ptr> m_rdkPerfWrapperFactory{ + std::make_shared>()}; // Gstreamer members GstElement *m_element{}; diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/common/GstGenericPlayerTestCommon.h b/tests/unittests/media/server/gstplayer/genericPlayer/common/GstGenericPlayerTestCommon.h index d8e72efaf..a7266c4d3 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/common/GstGenericPlayerTestCommon.h +++ b/tests/unittests/media/server/gstplayer/genericPlayer/common/GstGenericPlayerTestCommon.h @@ -35,6 +35,7 @@ #include "GstSrcMock.h" #include "GstWrapperMock.h" #include "RdkGstreamerUtilsWrapperMock.h" +#include "RdkPerfWrapperFactoryMock.h" #include "TimerFactoryMock.h" #include "WorkerThreadFactoryMock.h" #include "WorkerThreadMock.h" @@ -73,6 +74,8 @@ class GstGenericPlayerTestCommon : public ::testing::Test std::shared_ptr> m_glibWrapperMock{std::make_shared>()}; std::shared_ptr> m_rdkGstreamerUtilsWrapperMock{ std::make_shared>()}; + std::shared_ptr> m_rdkPerfWrapperFactoryMock{ + std::make_shared>()}; std::shared_ptr> m_gstSrcFactoryMock{std::make_shared>()}; std::shared_ptr> m_gstSrcMock{std::make_shared>()}; std::shared_ptr> m_timerFactoryMock{std::make_shared>()}; diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp index d25627cda..451c1cf20 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/GenericPlayerTaskFactoryTest.cpp @@ -28,6 +28,7 @@ #include "GstWrapperMock.h" #include "HeartbeatHandlerMock.h" #include "RdkGstreamerUtilsWrapperMock.h" +#include "RdkPerfWrapperFactoryMock.h" #include "tasks/IPlayerTask.h" #include "tasks/generic/AttachSamples.h" #include "tasks/generic/AttachSource.h" @@ -87,11 +88,17 @@ class GenericPlayerTaskFactoryTest : public testing::Test std::make_shared>()}; std::shared_ptr m_rdkGstreamerUtilsWrapper{ std::make_shared>()}; + std::shared_ptr> m_rdkPerfWrapperFactoryMock{ + std::make_shared>()}; std::shared_ptr m_gstTextTrackSinkFactoryMock{ std::make_shared>()}; StrictMock m_flushWatcherMock; - firebolt::rialto::server::GenericPlayerTaskFactory m_sut{&m_gstPlayerClient, m_gstWrapper, m_glibWrapper, - m_rdkGstreamerUtilsWrapper, m_gstTextTrackSinkFactoryMock}; + firebolt::rialto::server::GenericPlayerTaskFactory m_sut{&m_gstPlayerClient, + m_gstWrapper, + m_glibWrapper, + m_rdkGstreamerUtilsWrapper, + m_rdkPerfWrapperFactoryMock, + m_gstTextTrackSinkFactoryMock}; }; TEST_F(GenericPlayerTaskFactoryTest, ShouldCreateAttachSamples) diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/ReadShmDataAndAttachSamplesTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/ReadShmDataAndAttachSamplesTest.cpp index 1b7663034..883a51ca4 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/ReadShmDataAndAttachSamplesTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/ReadShmDataAndAttachSamplesTest.cpp @@ -31,6 +31,7 @@ class ReadShmDataAndAttachSamplesTest : public GenericTasksTestsBase TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllAudioSamples) { + shouldCreatePerfWrapper(); shouldReadAudioData(); shouldAttachAllAudioSamples(); triggerReadShmDataAndAttachSamplesAudio(); @@ -38,6 +39,7 @@ TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllAudioSamples) TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllVideoSamples) { + shouldCreatePerfWrapper(); shouldReadVideoData(); shouldAttachAllVideoSamples(); triggerReadShmDataAndAttachSamplesVideo(); @@ -46,6 +48,7 @@ TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllVideoSamples) TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllSubtitleSamples) { setContextStreamInfo(firebolt::rialto::MediaSourceType::SUBTITLE); + shouldCreatePerfWrapper(); shouldReadSubtitleData(); shouldAttachAllSubtitleSamples(); triggerReadShmDataAndAttachSamples(); @@ -54,6 +57,7 @@ TEST_F(ReadShmDataAndAttachSamplesTest, shouldAttachAllSubtitleSamples) TEST_F(ReadShmDataAndAttachSamplesTest, shouldSkipAttachingSubtitleSamples) { + shouldCreatePerfWrapper(); shouldReadSubtitleData(); shouldSkipAttachingSubtitleSamples(); triggerReadShmDataAndAttachSamples(); @@ -61,6 +65,7 @@ TEST_F(ReadShmDataAndAttachSamplesTest, shouldSkipAttachingSubtitleSamples) TEST_F(ReadShmDataAndAttachSamplesTest, shouldSkipAttachingUnknownSamples) { + shouldCreatePerfWrapper(); shouldReadUnknownData(); shouldNotAttachUnknownSamples(); triggerReadShmDataAndAttachSamples(); diff --git a/wrappers/CMakeLists.txt b/wrappers/CMakeLists.txt index dc2135964..14df15ee6 100644 --- a/wrappers/CMakeLists.txt +++ b/wrappers/CMakeLists.txt @@ -79,8 +79,7 @@ if( NOT CMAKE_BUILD_FLAG STREQUAL "UnitTests" AND NOT CMAKE_BUILD_FLAG STREQUAL source/TextTrackPluginWrapper.cpp source/TextTrackWrapper.cpp source/ThunderWrapper.cpp - source/RdkPerfWrapper.cpp - source/RdkPerfWrapperFactoryAccessor.cpp) + source/RdkPerfWrapper.cpp) endif() add_library( @@ -96,6 +95,7 @@ add_library( source/RdkGstreamerUtilsWrapperAccessor.cpp source/TextTrackPluginWrapperFactoryAccessor.cpp source/ThunderWrapperFactoryAccessor.cpp + source/RdkPerfWrapperFactoryAccessor.cpp ${WRAPPER_SOURCES} ${JSONCPP_WRAPPER_SOURCE_FILES} ) diff --git a/wrappers/include/RdkPerfWrapper.h b/wrappers/include/RdkPerfWrapper.h index 55e34f99a..f03379eb7 100644 --- a/wrappers/include/RdkPerfWrapper.h +++ b/wrappers/include/RdkPerfWrapper.h @@ -38,7 +38,7 @@ class RdkPerfWrapperFactory : public IRdkPerfWrapperFactory class RdkPerfWrapper : public IRdkPerfWrapper { public: - RdkPerfWrapper(const char *szName); + explicit RdkPerfWrapper(const char *szName); ~RdkPerfWrapper() override = default; private: From 6cf5551d1378bc8a44cef5297673d2874bdd54d2 Mon Sep 17 00:00:00 2001 From: Marcin Wojciechowski Date: Wed, 29 Apr 2026 08:38:50 +0200 Subject: [PATCH 10/11] native build fix --- CMakeLists.txt | 1 + stubs/rdk_perf/CMakeLists.txt | 44 +++++++++++++++++++++++++++++++++++ stubs/rdk_perf/rdk_perf.cpp | 22 ++++++++++++++++++ stubs/rdk_perf/rdk_perf.h | 27 +++++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 stubs/rdk_perf/CMakeLists.txt create mode 100644 stubs/rdk_perf/rdk_perf.cpp create mode 100644 stubs/rdk_perf/rdk_perf.h diff --git a/CMakeLists.txt b/CMakeLists.txt index eb66410b7..25962f6c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,6 +213,7 @@ if( NATIVE_BUILD ) add_subdirectory( stubs/opencdm ) add_subdirectory( stubs/wpeframework-core ) add_subdirectory( stubs/wpeframework-com ) + add_subdirectory( stubs/rdk_perf ) add_compile_options(-DFREE_MEM_BEFORE_EXIT) add_compile_options(-ggdb) diff --git a/stubs/rdk_perf/CMakeLists.txt b/stubs/rdk_perf/CMakeLists.txt new file mode 100644 index 000000000..69f20f016 --- /dev/null +++ b/stubs/rdk_perf/CMakeLists.txt @@ -0,0 +1,44 @@ +# +# If not stated otherwise in this file or this component's LICENSE file the +# following copyright and licenses apply: +# +# Copyright 2026 Sky UK +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +set( CMAKE_CXX_STANDARD 17 ) + +set( CMAKE_CXX_STANDARD_REQUIRED ON ) +include( CheckCXXCompilerFlag ) +include( GNUInstallDirs ) +include(ExternalProject) + +add_library( + rdkperf + + STATIC + rdk_perf.cpp +) + +target_include_directories( + rdkperf + + PUBLIC + . +) + +install ( + TARGETS rdkperf LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} +) \ No newline at end of file diff --git a/stubs/rdk_perf/rdk_perf.cpp b/stubs/rdk_perf/rdk_perf.cpp new file mode 100644 index 000000000..780a6f65f --- /dev/null +++ b/stubs/rdk_perf/rdk_perf.cpp @@ -0,0 +1,22 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "rdk_perf.h" + +RDKPerf::RDKPerf(const char *szName) {} diff --git a/stubs/rdk_perf/rdk_perf.h b/stubs/rdk_perf/rdk_perf.h new file mode 100644 index 000000000..df9ab4686 --- /dev/null +++ b/stubs/rdk_perf/rdk_perf.h @@ -0,0 +1,27 @@ +/* + * If not stated otherwise in this file or this component's LICENSE file the + * following copyright and licenses apply: + * + * Copyright 2026 Sky UK + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +class RDKPerf +{ +public: + RDKPerf(const char *szName); + ~RDKPerf() = default; +}; From 2bad508a60c4e9ee82be9dfa2f120ac588f52ccf Mon Sep 17 00:00:00 2001 From: Marcin Wojciechowski Date: Wed, 29 Apr 2026 08:40:53 +0200 Subject: [PATCH 11/11] native build fix 2 --- stubs/rdk_perf/rdk_perf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/rdk_perf/rdk_perf.h b/stubs/rdk_perf/rdk_perf.h index df9ab4686..e3b0ba02b 100644 --- a/stubs/rdk_perf/rdk_perf.h +++ b/stubs/rdk_perf/rdk_perf.h @@ -22,6 +22,6 @@ class RDKPerf { public: - RDKPerf(const char *szName); + explicit RDKPerf(const char *szName); ~RDKPerf() = default; };