summaryrefslogtreecommitdiff
path: root/tests/native
diff options
context:
space:
mode:
authorbodamnam <bodamnam@google.com>2022-12-13 05:26:36 +0000
committerbodamnam <bodamnam@google.com>2023-03-16 08:54:56 +0000
commitc76acf52eeda27df99ad4324adb7e37853658368 (patch)
tree546a2deae0907fcc83627dc04ebb300c03a03426 /tests/native
parentd45b64d109da41d4b2dde39b11ccae8d435989c7 (diff)
downloadImsMedia-c76acf52eeda27df99ad4324adb7e37853658368.tar.gz
Improve the text sending performance
1) The TextSourceNode was sending data to the UTF-8 chunk unit, which was slowing down the performance. I remove the logic splits the text string to UTF-8 unit and send the text string as same as it was received to speed up the performance. 2) Remove the own text list and use the member of data queue in base class instead in the TextSourceNode. Bug: 271626757 Test: 1 to 1 MO/MT RTT test case with device, atest ImsMediaNativeTests Change-Id: Ie4ab8e189e4fc231d6b11707f6adae4fa563d936
Diffstat (limited to 'tests/native')
-rw-r--r--tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/nodes/TextSourceNodeTest.cpp133
1 files changed, 67 insertions, 66 deletions
diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/nodes/TextSourceNodeTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/nodes/TextSourceNodeTest.cpp
index d4ae8902..69a17eb4 100644
--- a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/nodes/TextSourceNodeTest.cpp
+++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/nodes/TextSourceNodeTest.cpp
@@ -15,17 +15,14 @@
*/
#include <gtest/gtest.h>
-#include <gmock/gmock.h>
#include <TextConfig.h>
#include <TextSourceNode.h>
#include <ImsMediaCondition.h>
-#include <MockBaseNode.h>
+#include <string.h>
using namespace android::telephony::imsmedia;
using namespace android;
-using ::testing::Return;
-
// RtpConfig
const int32_t kMediaDirection = RtpConfig::MEDIA_DIRECTION_SEND_ONLY;
const String8 kRemoteAddress("127.0.0.1");
@@ -48,41 +45,40 @@ const int8_t kRedundantPayload = 102;
const int8_t kRedundantLevel = 3;
const bool kKeepRedundantLevel = true;
const int kTextInterval = 300;
-const char* kBom = {"\xEF\xBB\xBF\0"};
+const uint8_t kBom[] = {0xEF, 0xBB, 0xBF};
-class FakeBaseNode : public BaseNode
+class FakeTextNode : public BaseNode
{
public:
- FakeBaseNode() { mEmptyFlag = false; }
- virtual ~FakeBaseNode() {}
+ FakeTextNode()
+ {
+ mEmptyFlag = false;
+ memset(mData, 0, sizeof(mData));
+ }
+ virtual ~FakeTextNode() {}
virtual ImsMediaResult Start() { return RESULT_SUCCESS; }
virtual void Stop() {}
virtual bool IsRunTime() { return true; }
virtual bool IsSourceNode() { return false; }
virtual void SetConfig(void* config) { (void)config; }
- virtual void OnDataFromFrontNode(ImsMediaSubType subtype, uint8_t* data, uint32_t size,
- uint32_t timestamp, bool mark, uint32_t seq, ImsMediaSubType dataType,
- uint32_t arrivalTime)
+ virtual void OnDataFromFrontNode(ImsMediaSubType /*subtype*/, uint8_t* data, uint32_t size,
+ uint32_t /*timestamp*/, bool /*mark*/, uint32_t /*seq*/, ImsMediaSubType /*dataType*/,
+ uint32_t /*arrivalTime*/)
{
- (void)subtype;
- (void)timestamp;
- (void)mark;
- (void)seq;
- (void)dataType;
- (void)arrivalTime;
-
if (size != 0 && size <= MAX_RTT_LEN)
{
memset(mData, 0, sizeof(mData));
memcpy(mData, data, size);
mEmptyFlag = false;
}
- else if (size == 0 && data == nullptr)
+ else if (data == nullptr)
{
mEmptyFlag = true;
}
}
+ virtual kBaseNodeState GetState() { return kNodeStateRunning; }
+
uint8_t* getData() { return mData; }
bool getEmptyFlag() { return mEmptyFlag; }
@@ -94,7 +90,11 @@ private:
class TextSourceNodeTest : public ::testing::Test
{
public:
- TextSourceNodeTest() {}
+ TextSourceNodeTest()
+ {
+ mNode = NULL;
+ mFakeNode = NULL;
+ }
virtual ~TextSourceNodeTest() {}
protected:
@@ -102,8 +102,7 @@ protected:
RtcpConfig mRtcp;
ImsMediaCondition mCondition;
TextSourceNode* mNode;
- MockBaseNode* mMockNode;
- FakeBaseNode mFakeNode;
+ FakeTextNode* mFakeNode;
std::list<BaseNode*> mNodes;
virtual void SetUp() override
@@ -132,18 +131,12 @@ protected:
mNode->SetConfig(&mConfig);
mNodes.push_back(mNode);
- mMockNode = new MockBaseNode();
- mMockNode->SetDelegate(&mFakeNode);
- mMockNode->DelegateToFake();
-
- mMockNode->SetMediaType(IMS_MEDIA_TEXT);
- mMockNode->SetConfig(&mConfig);
- mNodes.push_back(mMockNode);
-
- mNode->ConnectRearNode(mMockNode);
-
- ON_CALL(*mMockNode, GetState()).WillByDefault(Return(kNodeStateRunning));
- ON_CALL(*mMockNode, IsRunTime()).WillByDefault(Return(true));
+ mFakeNode = new FakeTextNode();
+ mFakeNode->SetMediaType(IMS_MEDIA_TEXT);
+ mFakeNode->SetConfig(&mConfig);
+ mNodes.push_back(mFakeNode);
+ mNode->ConnectRearNode(mFakeNode);
+ mCondition.reset();
}
virtual void TearDown() override
@@ -165,26 +158,46 @@ TEST_F(TextSourceNodeTest, startFail)
EXPECT_EQ(mNode->Start(), RESULT_INVALID_PARAM);
}
+TEST_F(TextSourceNodeTest, sendRttDisableBom)
+{
+ mConfig.setKeepRedundantLevel(false);
+ mNode->SetConfig(&mConfig);
+
+ EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
+
+ String8 testText1 = String8("a");
+ mNode->SendRtt(&testText1);
+
+ mNode->ProcessData();
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText1.string(), testText1.length()), 0);
+
+ mCondition.wait_timeout(kTextInterval);
+ mNode->ProcessData();
+ // expect empty flag set
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
+}
+
TEST_F(TextSourceNodeTest, sendRttTestChunkSizeOne)
{
String8 testText1 = String8("a");
EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
- EXPECT_FALSE(mFakeNode.getEmptyFlag());
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
mNode->SendRtt(&testText1);
mNode->ProcessData();
// expect BOM
- EXPECT_EQ(String8((char*)mFakeNode.getData()), String8(kBom));
+ EXPECT_EQ(memcmp(mFakeNode->getData(), kBom, sizeof(kBom)), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText1);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText1.string(), testText1.length()), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
// expect empty flag set
- EXPECT_TRUE(mFakeNode.getEmptyFlag());
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
}
TEST_F(TextSourceNodeTest, sendRttTestChunkSizeTwo)
@@ -192,21 +205,21 @@ TEST_F(TextSourceNodeTest, sendRttTestChunkSizeTwo)
String8 testText2 = String8("\xC2\xA9");
EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
- EXPECT_FALSE(mFakeNode.getEmptyFlag());
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
mNode->SendRtt(&testText2);
mNode->ProcessData();
// expect BOM
- EXPECT_EQ(String8((char*)mFakeNode.getData()), String8(kBom));
+ EXPECT_EQ(memcmp(mFakeNode->getData(), kBom, sizeof(kBom)), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText2);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText2.string(), testText2.length()), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
// expect empty flag set
- EXPECT_TRUE(mFakeNode.getEmptyFlag());
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
}
TEST_F(TextSourceNodeTest, sendRttTestChunkSizeThree)
@@ -214,21 +227,21 @@ TEST_F(TextSourceNodeTest, sendRttTestChunkSizeThree)
String8 testText3 = String8("\xE2\x9C\x82");
EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
- EXPECT_FALSE(mFakeNode.getEmptyFlag());
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
mNode->SendRtt(&testText3);
mNode->ProcessData();
// expect BOM
- EXPECT_EQ(String8((char*)mFakeNode.getData()), String8(kBom));
+ EXPECT_EQ(memcmp(mFakeNode->getData(), kBom, sizeof(kBom)), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText3);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText3.string(), testText3.length()), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
// expect empty flag set
- EXPECT_TRUE(mFakeNode.getEmptyFlag());
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
}
TEST_F(TextSourceNodeTest, sendRttTestChunkSizeFour)
@@ -236,21 +249,21 @@ TEST_F(TextSourceNodeTest, sendRttTestChunkSizeFour)
String8 testText4 = String8("\xF0\x9F\x9A\x80");
EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
- EXPECT_FALSE(mFakeNode.getEmptyFlag());
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
mNode->SendRtt(&testText4);
mNode->ProcessData();
// expect BOM
- EXPECT_EQ(String8((char*)mFakeNode.getData()), String8(kBom));
+ EXPECT_EQ(memcmp(mFakeNode->getData(), kBom, sizeof(kBom)), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText4);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText4.string(), testText4.length()), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
// expect empty flag set
- EXPECT_TRUE(mFakeNode.getEmptyFlag());
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
}
TEST_F(TextSourceNodeTest, sendRttTestLongString)
@@ -267,31 +280,19 @@ TEST_F(TextSourceNodeTest, sendRttTestLongString)
testText5.append(testText4);
EXPECT_EQ(mNode->Start(), RESULT_SUCCESS);
- EXPECT_FALSE(mFakeNode.getEmptyFlag());
+ EXPECT_FALSE(mFakeNode->getEmptyFlag());
mNode->SendRtt(&testText5);
mNode->ProcessData();
// expect BOM
- EXPECT_EQ(String8((char*)mFakeNode.getData()), String8(kBom));
-
- mCondition.wait_timeout(kTextInterval);
- mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText1);
-
- mCondition.wait_timeout(kTextInterval);
- mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText2);
-
- mCondition.wait_timeout(kTextInterval);
- mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText3);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), kBom, sizeof(kBom)), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
- EXPECT_EQ(String8((char*)mFakeNode.getData()), testText4);
+ EXPECT_EQ(memcmp(mFakeNode->getData(), testText5.string(), testText5.length()), 0);
mCondition.wait_timeout(kTextInterval);
mNode->ProcessData();
// expect empty flag set
- EXPECT_TRUE(mFakeNode.getEmptyFlag());
+ EXPECT_TRUE(mFakeNode->getEmptyFlag());
}