mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-07 16:13:49 +00:00
Fix JsSerializerTest allocate buffer bug
Signed-off-by: panzhenyu1 <panzhenyu1@huawei.com>
This commit is contained in:
parent
ee7da79043
commit
8b86eabd0f
@ -158,8 +158,16 @@ bool JSSerializer::WriteRawData(const void *data, size_t length)
|
||||
|
||||
bool JSSerializer::AllocateBuffer(size_t bytes)
|
||||
{
|
||||
// Get internal heap size
|
||||
if (sizeLimit_ == 0) {
|
||||
uint64_t heapSize = thread_->GetEcmaVM()->GetJSOptions().GetInternalMemorySizeLimit();
|
||||
sizeLimit_ = heapSize;
|
||||
}
|
||||
size_t oldSize = bufferSize_;
|
||||
size_t newSize = oldSize + bytes;
|
||||
if (newSize > sizeLimit_) {
|
||||
return false;
|
||||
}
|
||||
if (bufferCapacity_ == 0) {
|
||||
if (bytes < INITIAL_CAPACITY) {
|
||||
buffer_ = reinterpret_cast<uint8_t *>(malloc(INITIAL_CAPACITY));
|
||||
@ -190,6 +198,10 @@ bool JSSerializer::AllocateBuffer(size_t bytes)
|
||||
bool JSSerializer::ExpandBuffer(size_t requestedSize)
|
||||
{
|
||||
size_t newCapacity = bufferCapacity_ * CAPACITY_INCREASE_RATE;
|
||||
newCapacity = std::max(newCapacity, requestedSize);
|
||||
if (newCapacity > sizeLimit_) {
|
||||
return false;
|
||||
}
|
||||
uint8_t *newBuffer = reinterpret_cast<uint8_t *>(malloc(newCapacity));
|
||||
if (newBuffer == nullptr) {
|
||||
return false;
|
||||
|
@ -124,6 +124,7 @@ private:
|
||||
|
||||
JSThread *thread_;
|
||||
uint8_t *buffer_ = nullptr;
|
||||
uint64_t sizeLimit_ = 0;
|
||||
size_t bufferSize_ = 0;
|
||||
size_t bufferCapacity_ = 0;
|
||||
// The Reference map is used for check whether a tagged object has been serialized
|
||||
|
@ -230,7 +230,7 @@ public:
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void EcmaStringTest(std::pair<uint8_t *, size_t> data)
|
||||
void EcmaStringTest1(std::pair<uint8_t *, size_t> data)
|
||||
{
|
||||
Init();
|
||||
const char *rawStr = "this is a test ecmaString";
|
||||
@ -246,6 +246,25 @@ public:
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void EcmaStringTest2(std::pair<uint8_t *, size_t> data)
|
||||
{
|
||||
Init();
|
||||
const char *rawStr = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"ssssss";
|
||||
JSHandle<EcmaString> ecmaString = thread->GetEcmaVM()->GetFactory()->NewFromCanBeCompressString(rawStr);
|
||||
|
||||
JSDeserializer deserializer(thread, data.first, data.second);
|
||||
JSHandle<JSTaggedValue> res = deserializer.DeserializeJSTaggedValue();
|
||||
EXPECT_TRUE(!res.IsEmpty()) << "[Empty] Deserialize ecmaString fail";
|
||||
EXPECT_TRUE(res->IsString()) << "[NotString] Deserialize ecmaString fail";
|
||||
JSHandle<EcmaString> resEcmaString = JSHandle<EcmaString>::Cast(res);
|
||||
EXPECT_TRUE(ecmaString->GetHashcode() == resEcmaString->GetHashcode()) << "Not same HashCode";
|
||||
EXPECT_TRUE(EcmaString::StringsAreEqual(*ecmaString, *resEcmaString)) << "Not same EcmaString";
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void Int32Test(std::pair<uint8_t *, size_t> data)
|
||||
{
|
||||
Init();
|
||||
@ -666,7 +685,7 @@ HWTEST_F_L0(JSSerializerTest, TestObjectsPropertyReference)
|
||||
delete serializer;
|
||||
};
|
||||
|
||||
HWTEST_F_L0(JSSerializerTest, SerializeEcmaString)
|
||||
HWTEST_F_L0(JSSerializerTest, SerializeEcmaString1)
|
||||
{
|
||||
const char *rawStr = "this is a test ecmaString";
|
||||
JSHandle<EcmaString> ecmaString = thread->GetEcmaVM()->GetFactory()->NewFromCanBeCompressString(rawStr);
|
||||
@ -675,7 +694,24 @@ HWTEST_F_L0(JSSerializerTest, SerializeEcmaString)
|
||||
EXPECT_TRUE(success) << "Serialize EcmaString fail";
|
||||
std::pair<uint8_t *, size_t> data = serializer->ReleaseBuffer();
|
||||
JSDeserializerTest jsDeserializerTest;
|
||||
std::thread t1(&JSDeserializerTest::EcmaStringTest, jsDeserializerTest, data);
|
||||
std::thread t1(&JSDeserializerTest::EcmaStringTest1, jsDeserializerTest, data);
|
||||
t1.join();
|
||||
delete serializer;
|
||||
};
|
||||
|
||||
HWTEST_F_L0(JSSerializerTest, SerializeEcmaString2)
|
||||
{
|
||||
const char *rawStr = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"\
|
||||
"ssssss";
|
||||
JSHandle<EcmaString> ecmaString = thread->GetEcmaVM()->GetFactory()->NewFromCanBeCompressString(rawStr);
|
||||
JSSerializer *serializer = new JSSerializer(thread);
|
||||
bool success = serializer->SerializeJSTaggedValue(JSHandle<JSTaggedValue>(ecmaString));
|
||||
EXPECT_TRUE(success) << "Serialize EcmaString fail";
|
||||
std::pair<uint8_t *, size_t> data = serializer->ReleaseBuffer();
|
||||
JSDeserializerTest jsDeserializerTest;
|
||||
std::thread t1(&JSDeserializerTest::EcmaStringTest2, jsDeserializerTest, data);
|
||||
t1.join();
|
||||
delete serializer;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user