Reduce size of JSNativePointer

Issue: https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/IARFBJ
Signed-off-by: Gymee <yumeijie@huawei.com>
Change-Id: Id99ce459b5b378eba162308b09438ae4f220aff8
This commit is contained in:
Gymee 2024-09-14 16:30:18 +08:00
parent 599b938109
commit 46cd1ebd6c
6 changed files with 12 additions and 8 deletions

View File

@ -42,7 +42,7 @@ public:
ACCESSORS_NATIVE_FIELD(ExternalPointer, void, POINTER_OFFSET, DELETER_OFFSET);
ACCESSORS_PRIMITIVE_FIELD(Deleter, NativePointerCallback, DELETER_OFFSET, DATA_OFFSET)
ACCESSORS_NATIVE_FIELD(Data, void, DATA_OFFSET, DATA_SIZE_OFFSET);
ACCESSORS_PRIMITIVE_FIELD(BindingSize, uint64_t, DATA_SIZE_OFFSET, FLAG_OFFSET);
ACCESSORS_PRIMITIVE_FIELD(BindingSize, uint32_t, DATA_SIZE_OFFSET, FLAG_OFFSET);
// native memory statistic flag
ACCESSORS_PRIMITIVE_FIELD(NativeFlag, NativeFlag, FLAG_OFFSET, LAST_OFFSET);
DEFINE_ALIGN_SIZE(LAST_OFFSET);

View File

@ -16,6 +16,7 @@
#include "ecmascript/mem/chunk.h"
#include "ecmascript/mem/heap.h"
#include "native_area_allocator.h"
namespace panda::ecmascript {
Chunk::Chunk(NativeAreaAllocator *allocator) : allocator_(allocator) {}

View File

@ -23,7 +23,6 @@
namespace panda::ecmascript {
class NativeAreaAllocator;
enum class NativeFlag;
class PUBLIC_API Chunk {
public:

View File

@ -25,7 +25,7 @@
#include "ecmascript/mem/area.h"
namespace panda::ecmascript {
enum class NativeFlag {
enum class NativeFlag : uint32_t {
NO_DIV,
ARRAY_BUFFER,
REGEXP_BTYECODE,

View File

@ -116,10 +116,12 @@ JSHandle<JSNativePointer> ObjectFactory::NewJSNativePointer(void *externalPointe
obj->SetExternalPointer(externalPointer);
obj->SetDeleter(callBack);
obj->SetData(data);
obj->SetBindingSize(nativeBindingsize);
uint32_t fixedNativeBindingsize = nativeBindingsize < UINT32_MAX ? nativeBindingsize
: UINT32_MAX;
obj->SetBindingSize(fixedNativeBindingsize);
obj->SetNativeFlag(flag);
heap_->IncreaseNativeBindingSize(nativeBindingsize);
heap_->IncreaseNativeBindingSize(fixedNativeBindingsize);
if (callBack != nullptr) {
vm_->PushToNativePointerList(static_cast<JSNativePointer *>(header), isConcurrent);
// In some cases, the size of JS/TS object is too small and the native binding size is too large.

View File

@ -500,11 +500,13 @@ JSHandle<JSNativePointer> ObjectFactory::NewSJSNativePointer(void *externalPoint
obj->SetExternalPointer(externalPointer);
obj->SetDeleter(callBack);
obj->SetData(data);
obj->SetBindingSize(nativeBindingsize);
uint32_t fixedNativeBindingsize = nativeBindingsize < UINT32_MAX ? nativeBindingsize
: UINT32_MAX;
obj->SetBindingSize(fixedNativeBindingsize);
obj->SetNativeFlag(flag);
if (callBack != nullptr) {
sHeap_->IncNativeSizeAfterLastGC(nativeBindingsize);
sHeap_->IncNativeSizeAfterLastGC(fixedNativeBindingsize);
vm_->PushToSharedNativePointerList(static_cast<JSNativePointer *>(header));
// In some cases, the size of JS/TS object is too small and the native binding size is too large.
// Check and try trigger concurrent mark here.
@ -530,7 +532,7 @@ JSHandle<JSNativePointer> ObjectFactory::NewSReadOnlyJSNativePointer(void* exter
obj->SetExternalPointer(externalPointer);
obj->SetDeleter(nullptr);
obj->SetData(nullptr);
obj->SetBindingSize(0);
obj->SetBindingSize(0U);
obj->SetNativeFlag(NativeFlag::NO_DIV);
return obj;
}