mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-06 23:54:03 +00:00
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:
parent
599b938109
commit
46cd1ebd6c
@ -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);
|
||||
|
@ -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) {}
|
||||
|
@ -23,7 +23,6 @@
|
||||
|
||||
namespace panda::ecmascript {
|
||||
class NativeAreaAllocator;
|
||||
enum class NativeFlag;
|
||||
|
||||
class PUBLIC_API Chunk {
|
||||
public:
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user