mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2025-02-17 11:19:42 +00:00
修复多线程使用ImageBitmap crash的问题
Signed-off-by: chenyuchi <chenyuchi2@huawei.com>
This commit is contained in:
parent
6dd6ee74d5
commit
b5fd61f362
@ -63,7 +63,7 @@ napi_value AttachImageBitmap(napi_env env, void* value, void*)
|
||||
LOGW("Invalid parameter.");
|
||||
return nullptr;
|
||||
}
|
||||
auto image = (JSRenderImage*)value;
|
||||
auto* image = (JSRenderImage*)value;
|
||||
if (image == nullptr) {
|
||||
LOGW("Invalid context.");
|
||||
return nullptr;
|
||||
@ -83,6 +83,7 @@ napi_value AttachImageBitmap(napi_env env, void* value, void*)
|
||||
|
||||
napi_coerce_to_native_binding_object(env, imageBitmap, DetachImageBitmap, AttachImageBitmap, value, nullptr);
|
||||
napi_wrap_with_size(env, imageBitmap, value, JSRenderImage::Finalizer, nullptr, nullptr, image->GetBindingSize());
|
||||
image->AddNativeRef();
|
||||
return imageBitmap;
|
||||
}
|
||||
|
||||
@ -92,8 +93,7 @@ void JSRenderImage::Finalizer(napi_env env, void* data, void* hint)
|
||||
{
|
||||
auto wrapper = reinterpret_cast<JSRenderImage*>(data);
|
||||
if (wrapper) {
|
||||
delete wrapper;
|
||||
wrapper = nullptr;
|
||||
wrapper->Release();
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,6 +108,7 @@ napi_value JSRenderImage::Constructor(napi_env env, napi_callback_info info)
|
||||
if (argc <= 0) {
|
||||
napi_coerce_to_native_binding_object(env, thisVar, DetachImageBitmap, AttachImageBitmap, wrapper, nullptr);
|
||||
napi_wrap(env, thisVar, wrapper, Finalizer, nullptr, nullptr);
|
||||
wrapper->AddNativeRef();
|
||||
return thisVar;
|
||||
}
|
||||
napi_value argv[2] = { nullptr };
|
||||
@ -145,6 +146,7 @@ napi_value JSRenderImage::Constructor(napi_env env, napi_callback_info info)
|
||||
}
|
||||
napi_coerce_to_native_binding_object(env, thisVar, DetachImageBitmap, AttachImageBitmap, wrapper, nullptr);
|
||||
napi_wrap_with_size(env, thisVar, wrapper, Finalizer, nullptr, nullptr, wrapper->GetBindingSize());
|
||||
wrapper->AddNativeRef();
|
||||
return thisVar;
|
||||
}
|
||||
|
||||
|
@ -131,6 +131,19 @@ public:
|
||||
return bindingSize_;
|
||||
}
|
||||
|
||||
void AddNativeRef()
|
||||
{
|
||||
++nativeRefCount_;
|
||||
}
|
||||
|
||||
void Release()
|
||||
{
|
||||
--nativeRefCount_;
|
||||
if (nativeRefCount_ == 0) {
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
ACE_DISALLOW_COPY_AND_MOVE(JSRenderImage);
|
||||
private:
|
||||
napi_value OnClose();
|
||||
@ -168,6 +181,7 @@ private:
|
||||
int32_t instanceId_ = 0;
|
||||
CanvasUnit unit_ = CanvasUnit::DEFAULT;
|
||||
size_t bindingSize_ = 0;
|
||||
uint32_t nativeRefCount_ = 0;
|
||||
};
|
||||
|
||||
} // namespace OHOS::Ace::Framework
|
||||
|
Loading…
x
Reference in New Issue
Block a user