diff --git a/codec/encoder/core/inc/memory_align.h b/codec/encoder/core/inc/memory_align.h index 66f06955..f751aff1 100644 --- a/codec/encoder/core/inc/memory_align.h +++ b/codec/encoder/core/inc/memory_align.h @@ -50,9 +50,7 @@ void* WelsMallocz (const uint32_t kuiSize, const char* kpTag); void* WelsMalloc (const uint32_t kuiSize, const char* kpTag); void WelsFree (void* pPointer, const char* kpTag); const uint32_t WelsGetCacheLineSize() const; -#if defined(MEMORY_MONITOR) const uint32_t WelsGetMemoryUsage() const; -#endif//MEMORY_MONITOR private: // private copy & assign constructors adding to fix klocwork scan issues diff --git a/codec/encoder/core/src/memory_align.cpp b/codec/encoder/core/src/memory_align.cpp index 6db4dee2..6c9a1696 100644 --- a/codec/encoder/core/src/memory_align.cpp +++ b/codec/encoder/core/src/memory_align.cpp @@ -139,10 +139,8 @@ const uint32_t CMemoryAlign::WelsGetCacheLineSize() const { return m_nCacheLineSize; } -#if defined(MEMORY_MONITOR) const uint32_t CMemoryAlign::WelsGetMemoryUsage() const { return m_nMemoryUsageInBytes; } -#endif//MEMORY_MONITOR } // end of namespace WelsSVCEnc diff --git a/test/EncUT_MemoryAlloc.cpp b/test/EncUT_MemoryAlloc.cpp new file mode 100644 index 00000000..2627224e --- /dev/null +++ b/test/EncUT_MemoryAlloc.cpp @@ -0,0 +1,62 @@ +#include "../gtest/include/gtest/gtest.h" +#include // use memset/memcmp +#include "../codec/encoder/core/inc/memory_align.h" + +using namespace WelsSVCEnc; + +//Tests of WelsGetCacheLineSize Begin +TEST(MemoryAlignTest, GetCacheLineSize_LoopWithin16K) +{ + const unsigned int kuiTestBoundary16K = 16 * 1024; + unsigned int uiTargetAlign = 1; + while (uiTargetAlign < kuiTestBoundary16K) { + CMemoryAlign cTestMa(uiTargetAlign); + ASSERT_EQ( (uiTargetAlign & 0x0F)?16:uiTargetAlign, cTestMa.WelsGetCacheLineSize() ); + ++ uiTargetAlign; + } +} + +TEST(MemoryAlignTest, GetCacheLineSize_Zero) +{ + CMemoryAlign cTestMa(0); + ASSERT_EQ( 16, cTestMa.WelsGetCacheLineSize() ); +} +TEST(MemoryAlignTest, GetCacheLineSize_MaxUINT) +{ + CMemoryAlign cTestMa(0xFFFFFFFF); + ASSERT_EQ( 16, cTestMa.WelsGetCacheLineSize() ); +} +//Tests of WelsGetCacheLineSize End +//Tests of WelsMallocAndFree Begin +TEST(MemoryAlignTest, WelsMallocAndFreeOnceFunctionVerify) +{ + const uint32_t kuiTargetAlignSize[4] = {32, 16, 64, 8}; + srand((uint32_t)time(NULL)); + + for (int i=0; i<4; i++) { + const uint32_t kuiTestAlignSize = kuiTargetAlignSize[i]; + const uint32_t kuiTestDataSize = abs(rand()); + + CMemoryAlign cTestMa(kuiTestAlignSize); + const uint32_t uiSize = kuiTestDataSize; + const char strUnitTestTag[100] = "pUnitTestData"; + const uint32_t kuiUsedCacheLineSize = ((kuiTestAlignSize == 0) || (kuiTestAlignSize & 0x0F)) ? (16) : (kuiTestAlignSize); + const uint32_t kuiExtraAlignSize = kuiUsedCacheLineSize-1; + const uint32_t kuiExpectedSize = sizeof( void ** ) + sizeof( int32_t ) + kuiExtraAlignSize + uiSize; + uint8_t *pUnitTestData = static_cast(cTestMa.WelsMalloc(uiSize, strUnitTestTag)); + if ( pUnitTestData != NULL ) { + ASSERT_TRUE( (((int64_t)(static_cast(pUnitTestData))) & kuiExtraAlignSize) == 0 ); + EXPECT_EQ( kuiExpectedSize, cTestMa.WelsGetMemoryUsage() ); + cTestMa.WelsFree( pUnitTestData, strUnitTestTag ); + EXPECT_EQ( 0, cTestMa.WelsGetMemoryUsage() ); + } + else { + EXPECT_EQ( NULL, pUnitTestData ); + EXPECT_EQ( 0, cTestMa.WelsGetMemoryUsage() ); + cTestMa.WelsFree( pUnitTestData, strUnitTestTag ); + EXPECT_EQ( 0, cTestMa.WelsGetMemoryUsage() ); + } + } +} + + diff --git a/test/targets.mk b/test/targets.mk index f95aa7a1..4e7d6c64 100644 --- a/test/targets.mk +++ b/test/targets.mk @@ -7,6 +7,7 @@ CODEC_UNITTEST_CPP_SRCS=\ $(CODEC_UNITTEST_SRCDIR)/decoder_test.cpp\ $(CODEC_UNITTEST_SRCDIR)/encoder_test.cpp\ $(CODEC_UNITTEST_SRCDIR)/simple_test.cpp\ + $(CODEC_UNITTEST_SRCDIR)/EncUT_MemoryAlloc.cpp\ CODEC_UNITTEST_OBJS += $(CODEC_UNITTEST_CPP_SRCS:.cpp=.o)