From dfc7a33f1c9a3410465343c7ef9ab4d7a2d0328f Mon Sep 17 00:00:00 2001 From: eduponz Date: Mon, 24 Jun 2024 14:35:37 +0200 Subject: [PATCH 1/4] Refs #21219: Always build profilling tests executable if CMake option is set Signed-off-by: eduponz --- test/CMakeLists.txt | 5 +---- test/profiling/CMakeLists.txt | 12 ++++++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fdc9e4158c8..22a7a291a68 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -77,10 +77,7 @@ endif() # Profiling tests using valgrind ############################################################################### if(NOT ((MSVC OR MSVC_IDE)) AND PROFILING_TESTS) - find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) - if(CTEST_MEMORYCHECK_COMMAND) - add_subdirectory(profiling) - endif() + add_subdirectory(profiling) endif() ############################################################################### diff --git a/test/profiling/CMakeLists.txt b/test/profiling/CMakeLists.txt index 71a4092718d..09fd63897f9 100644 --- a/test/profiling/CMakeLists.txt +++ b/test/profiling/CMakeLists.txt @@ -54,6 +54,14 @@ if(Python3_Interpreter_FOUND) ############################################################################### # MemoryTest ############################################################################### + find_program(VALGRIND_PROGRAM NAMES valgrind) + + # If valgrind is not found, set it to "valgrind" so that the test can be run with + # the appropriate environment set at runtime. + if (${VALGRIND_PROGRAM} STREQUAL "valgrind-NOTFOUND") + set(VALGRIND_PROGRAM "valgrind") + endif() + add_test(NAME MemoryTest COMMAND ${Python3_EXECUTABLE} memory_tests.py) @@ -67,7 +75,7 @@ if(Python3_Interpreter_FOUND) set_property(TEST MemoryTest APPEND PROPERTY ENVIRONMENT "PROFILING_BINS=$") set_property(TEST MemoryTest APPEND PROPERTY ENVIRONMENT - "VALGRIND_BIN=${CTEST_MEMORYCHECK_COMMAND}") + "VALGRIND_BIN=${VALGRIND_PROGRAM}") if(SECURITY) set_property(TEST MemoryTest APPEND PROPERTY ENVIRONMENT "CERTS_PATH=${PROJECT_SOURCE_DIR}/test/certs") @@ -89,7 +97,7 @@ if(Python3_Interpreter_FOUND) set_property(TEST CyclesTest APPEND PROPERTY ENVIRONMENT "PROFILING_BINS=$") set_property(TEST CyclesTest APPEND PROPERTY ENVIRONMENT - "VALGRIND_BIN=valgrind") + "VALGRIND_BIN=${VALGRIND_PROGRAM}") if(SECURITY) set_property(TEST CyclesTest APPEND PROPERTY ENVIRONMENT "CERTS_PATH=${PROJECT_SOURCE_DIR}/test/certs") From ad775fa7cb3a2d4d7d1280f48561d3f1129a15e3 Mon Sep 17 00:00:00 2001 From: eduponz Date: Mon, 24 Jun 2024 15:08:29 +0200 Subject: [PATCH 2/4] Refs #21219: Build profiling tests as alternate build in Ubuntu CI Signed-off-by: eduponz --- .github/workflows/reusable-ubuntu-ci.yml | 47 +++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/.github/workflows/reusable-ubuntu-ci.yml b/.github/workflows/reusable-ubuntu-ci.yml index 5fb6d8d8aba..ea06a75dcca 100644 --- a/.github/workflows/reusable-ubuntu-ci.yml +++ b/.github/workflows/reusable-ubuntu-ci.yml @@ -683,6 +683,7 @@ jobs: show_skipped: 'False' fastdds_alternative_builds: + needs: fastdds_build runs-on: ${{ inputs.os-image }} strategy: fail-fast: false @@ -690,11 +691,11 @@ jobs: cmake-build-type: - 'RelWithDebInfo' steps: - - name: Sync eProsima/Fast-DDS repository - uses: eProsima/eProsima-CI/external/checkout@v0 + - name: Download build artifacts + uses: eProsima/eProsima-CI/external/download-artifact@v0 with: - path: src/fastrtps - ref: ${{ inputs.fastdds-branch }} + name: fastdds_build_${{ inputs.label }} + path: ${{ github.workspace }} - name: Install Fix Python version uses: eProsima/eProsima-CI/external/setup-python@v0 @@ -719,7 +720,7 @@ jobs: - name: Install Python dependencies uses: eProsima/eProsima-CI/multiplatform/install_python_packages@v0 with: - packages: vcstool xmlschema + packages: vcstool xmlschema msparser upgrade: false - name: Setup CCache @@ -728,12 +729,38 @@ jobs: with: api_token: ${{ secrets.GITHUB_TOKEN }} - - name: Fetch Fast DDS dependencies - uses: eProsima/eProsima-CI/multiplatform/vcs_import@v0 + - name: Sync osrf/osrf_testing_tools_cpp repository + uses: eProsima/eProsima-CI/external/checkout@v0 with: - vcs_repos_file: ${{ github.workspace }}/src/fastrtps/fastrtps.repos - destination_workspace: src - skip_existing: 'true' + repository: osrf/osrf_testing_tools_cpp + path: src/osrf_testing_tools_cpp + ref: 1.4.0 + + - name: OSRF testing tools build + uses: eProsima/eProsima-CI/multiplatform/colcon_build@v0 + with: + colcon_meta_file: '' + colcon_build_args: ${{ inputs.colcon-args }} --packages-select osrf_testing_tools_cpp + cmake_args: '-DBUILD_TESTING=OFF' + cmake_args_default: '' + cmake_build_type: ${{ matrix.cmake-build-type }} + workspace: ${{ github.workspace }} + + - name: Profilling tests build + uses: eProsima/eProsima-CI/multiplatform/colcon_build@v0 + with: + colcon_meta_file: ${{ github.workspace }}/src/fastrtps/.github/workflows/config/fastdds_build.meta + colcon_build_args: ${{ inputs.colcon-args }} --packages-up-to fastrtps + cmake_args: '-DPROFILING_TESTS=ON ${{ inputs.cmake-args }}' + cmake_args_default: ${{ env.colcon-build-default-cmake-args }} + cmake_build_type: ${{ matrix.cmake-build-type }} + workspace: ${{ github.workspace }} + workspace_dependencies: ${{ github.workspace }}/install + + - name: Clean workspace - Profiling tests + run: | + cd ${{ github.workspace }} + rm -rf build install log src/osrf_testing_tools_cpp - name: No security colcon build continue-on-error: true From a82b078dd3381ebcdc0864488635a0feba42f53b Mon Sep 17 00:00:00 2001 From: eduponz Date: Mon, 24 Jun 2024 16:25:05 +0200 Subject: [PATCH 3/4] Refs #21219: Fix profilling tests build Signed-off-by: eduponz --- test/profiling/MemoryTestTypes.cpp | 27 +++++++++++++++++++++ test/profiling/MemoryTestTypes.h | 38 ++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/test/profiling/MemoryTestTypes.cpp b/test/profiling/MemoryTestTypes.cpp index 8ebda73cb2a..d003bb54404 100644 --- a/test/profiling/MemoryTestTypes.cpp +++ b/test/profiling/MemoryTestTypes.cpp @@ -36,6 +36,14 @@ bool MemoryDataType::serialize(void*data,SerializedPayload_t* payload) return true; } +bool MemoryDataType::serialize( + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t) +{ + return serialize(data,payload); +} + bool MemoryDataType::deserialize(SerializedPayload_t* payload,void * data) { MemoryType* lt = (MemoryType*)data; @@ -58,6 +66,11 @@ std::function MemoryDataType::getSerializedSizeProvider(void* data) }; } +std::function MemoryDataType::getSerializedSizeProvider(void* data, eprosima::fastdds::dds::DataRepresentationId_t) +{ + return getSerializedSizeProvider(data); +} + void* MemoryDataType::createData() { @@ -77,6 +90,15 @@ bool TestCommandDataType::serialize(void*data,SerializedPayload_t* payload) payload->length = 4; return true; } + +bool TestCommandDataType::serialize( + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t) +{ + return serialize(data,payload); +} + bool TestCommandDataType::deserialize(SerializedPayload_t* payload,void * data) { TestCommandType* t = (TestCommandType*)data; @@ -99,6 +121,11 @@ std::function TestCommandDataType::getSerializedSizeProvider(void*) }; } +std::function TestCommandDataType::getSerializedSizeProvider(void* data, eprosima::fastdds::dds::DataRepresentationId_t) +{ + return getSerializedSizeProvider(data); +} + void* TestCommandDataType::createData() { diff --git a/test/profiling/MemoryTestTypes.h b/test/profiling/MemoryTestTypes.h index 6c4155f34fa..f24d58d5209 100644 --- a/test/profiling/MemoryTestTypes.h +++ b/test/profiling/MemoryTestTypes.h @@ -62,15 +62,22 @@ class MemoryDataType : public eprosima::fastrtps::TopicDataType m_isGetKeyDefined = false; }; ~MemoryDataType(){}; - bool serialize(void*data, eprosima::fastrtps::rtps::SerializedPayload_t* payload); - bool deserialize(eprosima::fastrtps::rtps::SerializedPayload_t* payload,void * data); - std::function getSerializedSizeProvider(void* data); - void* createData(); - void deleteData(void* data); + bool serialize(void*data, eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; + bool serialize( + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; + bool deserialize(eprosima::fastrtps::rtps::SerializedPayload_t* payload,void * data) override; + std::function getSerializedSizeProvider(void* data) override; + std::function getSerializedSizeProvider( + void* data, + eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; + void* createData() override; + void deleteData(void* data) override; bool getKey(void* /*data*/, eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, bool force_md5 = false) override { (void)force_md5; return false; - } + } }; enum TESTCOMMAND:uint32_t{ @@ -100,15 +107,22 @@ class TestCommandDataType : public eprosima::fastrtps::TopicDataType m_isGetKeyDefined = false; }; ~TestCommandDataType(){}; - bool serialize(void*data,eprosima::fastrtps::rtps::SerializedPayload_t* payload); - bool deserialize(eprosima::fastrtps::rtps::SerializedPayload_t* payload,void * data); - std::function getSerializedSizeProvider(void* data); - void* createData(); - void deleteData(void* data); + bool serialize(void*data,eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; + bool serialize( + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; + bool deserialize(eprosima::fastrtps::rtps::SerializedPayload_t* payload,void * data) override; + std::function getSerializedSizeProvider(void* data) override; + std::function getSerializedSizeProvider( + void* data, + eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; + void* createData() override; + void deleteData(void* data) override; bool getKey(void* /*data*/, eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, bool force_md5 = false) override { (void)force_md5; return false; - } + } }; From e19e467e4295bf59de181d187721b1265a66df9a Mon Sep 17 00:00:00 2001 From: eduponz Date: Mon, 24 Jun 2024 16:25:40 +0200 Subject: [PATCH 4/4] Refs #21219: Uncrustify Signed-off-by: eduponz --- test/profiling/MemoryTestTypes.cpp | 85 +++++++++------ test/profiling/MemoryTestTypes.h | 164 +++++++++++++++++++---------- 2 files changed, 162 insertions(+), 87 deletions(-) diff --git a/test/profiling/MemoryTestTypes.cpp b/test/profiling/MemoryTestTypes.cpp index d003bb54404..9a7795ea30a 100644 --- a/test/profiling/MemoryTestTypes.cpp +++ b/test/profiling/MemoryTestTypes.cpp @@ -22,51 +22,58 @@ using namespace eprosima::fastrtps; using namespace eprosima::fastrtps::rtps; -bool MemoryDataType::serialize(void*data,SerializedPayload_t* payload) +bool MemoryDataType::serialize( + void* data, + SerializedPayload_t* payload) { MemoryType* lt = (MemoryType*)data; *(uint32_t*)payload->data = lt->seqnum; - *(uint32_t*)(payload->data+4) = (uint32_t)lt->data.size(); + *(uint32_t*)(payload->data + 4) = (uint32_t)lt->data.size(); //std::copy(lt->data.begin(),lt->data.end(),payload->data+8); memcpy(payload->data + 8, lt->data.data(), lt->data.size()); - payload->length = (uint32_t)(8+lt->data.size()); + payload->length = (uint32_t)(8 + lt->data.size()); return true; } bool MemoryDataType::serialize( - void* data, - eprosima::fastrtps::rtps::SerializedPayload_t* payload, - eprosima::fastdds::dds::DataRepresentationId_t) + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t) { - return serialize(data,payload); + return serialize(data, payload); } -bool MemoryDataType::deserialize(SerializedPayload_t* payload,void * data) +bool MemoryDataType::deserialize( + SerializedPayload_t* payload, + void* data) { MemoryType* lt = (MemoryType*)data; lt->seqnum = *(uint32_t*)payload->data; - uint32_t siz = *(uint32_t*)(payload->data+4); - std::copy(payload->data+8,payload->data+8+siz,lt->data.begin()); + uint32_t siz = *(uint32_t*)(payload->data + 4); + std::copy(payload->data + 8, payload->data + 8 + siz, lt->data.begin()); return true; } -std::function MemoryDataType::getSerializedSizeProvider(void* data) +std::function MemoryDataType::getSerializedSizeProvider( + void* data) { return [data]() -> uint32_t - { - MemoryType *tdata = static_cast(data); - uint32_t size = 0; + { + MemoryType* tdata = static_cast(data); + uint32_t size = 0; - size = (uint32_t)(sizeof(uint32_t) + sizeof(uint32_t) + tdata->data.size()); + size = (uint32_t)(sizeof(uint32_t) + sizeof(uint32_t) + tdata->data.size()); - return size; - }; + return size; + }; } -std::function MemoryDataType::getSerializedSizeProvider(void* data, eprosima::fastdds::dds::DataRepresentationId_t) +std::function MemoryDataType::getSerializedSizeProvider( + void* data, + eprosima::fastdds::dds::DataRepresentationId_t) { return getSerializedSizeProvider(data); } @@ -76,14 +83,17 @@ void* MemoryDataType::createData() return (void*)new MemoryType(); } -void MemoryDataType::deleteData(void* data) + +void MemoryDataType::deleteData( + void* data) { delete((MemoryType*)data); } - -bool TestCommandDataType::serialize(void*data,SerializedPayload_t* payload) +bool TestCommandDataType::serialize( + void* data, + SerializedPayload_t* payload) { TestCommandType* t = (TestCommandType*)data; *(TESTCOMMAND*)payload->data = t->m_command; @@ -92,14 +102,16 @@ bool TestCommandDataType::serialize(void*data,SerializedPayload_t* payload) } bool TestCommandDataType::serialize( - void* data, - eprosima::fastrtps::rtps::SerializedPayload_t* payload, - eprosima::fastdds::dds::DataRepresentationId_t) + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + eprosima::fastdds::dds::DataRepresentationId_t) { - return serialize(data,payload); + return serialize(data, payload); } -bool TestCommandDataType::deserialize(SerializedPayload_t* payload,void * data) +bool TestCommandDataType::deserialize( + SerializedPayload_t* payload, + void* data) { TestCommandType* t = (TestCommandType*)data; // cout << "PAYLOAD LENGTH: "<length << endl; @@ -109,19 +121,22 @@ bool TestCommandDataType::deserialize(SerializedPayload_t* payload,void * data) return true; } -std::function TestCommandDataType::getSerializedSizeProvider(void*) +std::function TestCommandDataType::getSerializedSizeProvider( + void*) { return []() -> uint32_t - { - uint32_t size = 0; + { + uint32_t size = 0; - size = (uint32_t)sizeof(uint32_t); + size = (uint32_t)sizeof(uint32_t); - return size; - }; + return size; + }; } -std::function TestCommandDataType::getSerializedSizeProvider(void* data, eprosima::fastdds::dds::DataRepresentationId_t) +std::function TestCommandDataType::getSerializedSizeProvider( + void* data, + eprosima::fastdds::dds::DataRepresentationId_t) { return getSerializedSizeProvider(data); } @@ -131,7 +146,9 @@ void* TestCommandDataType::createData() return (void*)new TestCommandType(); } -void TestCommandDataType::deleteData(void* data) + +void TestCommandDataType::deleteData( + void* data) { delete((TestCommandType*)data); diff --git a/test/profiling/MemoryTestTypes.h b/test/profiling/MemoryTestTypes.h index f24d58d5209..d82ec943574 100644 --- a/test/profiling/MemoryTestTypes.h +++ b/test/profiling/MemoryTestTypes.h @@ -24,63 +24,98 @@ class MemoryType { - public: +public: - uint32_t seqnum; - std::vector data; + uint32_t seqnum; + std::vector data; - MemoryType(): seqnum(0) {} + MemoryType() + : seqnum(0) + { + } - MemoryType(uint32_t number) : - seqnum(0), data(number,0) {} + MemoryType( + uint32_t number) + : seqnum(0) + , data(number, 0) + { + } + + ~MemoryType() + { + } - ~MemoryType() {} }; -inline bool operator==(const MemoryType& lt1, const MemoryType& lt2) +inline bool operator ==( + const MemoryType& lt1, + const MemoryType& lt2) { - if(lt1.seqnum!=lt2.seqnum) + if (lt1.seqnum != lt2.seqnum) + { return false; - if(lt1.data.size()!=lt2.data.size()) + } + if (lt1.data.size() != lt2.data.size()) + { return false; - for(size_t i = 0;i getSerializedSizeProvider(void* data) override; - std::function getSerializedSizeProvider( + bool deserialize( + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + void* data) override; + std::function getSerializedSizeProvider( + void* data) override; + std::function getSerializedSizeProvider( void* data, eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; - void* createData() override; - void deleteData(void* data) override; - bool getKey(void* /*data*/, eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, bool force_md5 = false) override { - (void)force_md5; - return false; - } + void* createData() override; + void deleteData( + void* data) override; + bool getKey( + void* /*data*/, + eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, + bool force_md5 = false) override + { + (void)force_md5; + return false; + } + }; -enum TESTCOMMAND:uint32_t{ +enum TESTCOMMAND : uint32_t +{ DEFAULT, READY, BEGIN, @@ -91,38 +126,61 @@ enum TESTCOMMAND:uint32_t{ typedef struct TestCommandType { TESTCOMMAND m_command; - TestCommandType(){ + TestCommandType() + { m_command = DEFAULT; } - TestCommandType(TESTCOMMAND com):m_command(com){} + + TestCommandType( + TESTCOMMAND com) + : m_command(com) + { + } + }TestCommandType; class TestCommandDataType : public eprosima::fastrtps::TopicDataType { - public: - TestCommandDataType() - { - setName("TestCommandType"); - m_typeSize = 4; - m_isGetKeyDefined = false; - }; - ~TestCommandDataType(){}; - bool serialize(void*data,eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; - bool serialize( +public: + + TestCommandDataType() + { + setName("TestCommandType"); + m_typeSize = 4; + m_isGetKeyDefined = false; + } + + ~TestCommandDataType() + { + } + + bool serialize( + void* data, + eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; + bool serialize( void* data, eprosima::fastrtps::rtps::SerializedPayload_t* payload, eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; - bool deserialize(eprosima::fastrtps::rtps::SerializedPayload_t* payload,void * data) override; - std::function getSerializedSizeProvider(void* data) override; - std::function getSerializedSizeProvider( + bool deserialize( + eprosima::fastrtps::rtps::SerializedPayload_t* payload, + void* data) override; + std::function getSerializedSizeProvider( + void* data) override; + std::function getSerializedSizeProvider( void* data, eprosima::fastdds::dds::DataRepresentationId_t data_representation) override; - void* createData() override; - void deleteData(void* data) override; - bool getKey(void* /*data*/, eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, bool force_md5 = false) override { - (void)force_md5; - return false; - } + void* createData() override; + void deleteData( + void* data) override; + bool getKey( + void* /*data*/, + eprosima::fastrtps::rtps::InstanceHandle_t* /*ihandle*/, + bool force_md5 = false) override + { + (void)force_md5; + return false; + } + };