engine-native icon indicating copy to clipboard operation
engine-native copied to clipboard

v8 reinit cause crash

Open neufeng opened this issue 4 years ago • 11 comments

Cocos Creator 2.4.2 ScriptEngine::init() _isolate = v8::Isolate::New(_createParams);

after exit cocos, then enter cocos again, crash on above line。It seams some incorrect use of Allocator!!!

neufeng avatar Sep 02 '20 08:09 neufeng

我也遇到这个问题了,原生app集成cocos,二次启动就这个错误,请问有解嘛?

sky068 avatar Sep 16 '20 09:09 sky068

v8::platform::NewDefaultPlatform().release();
v8::V8::InitializePlatform(_platform);


v8::V8::Dispose();
v8::V8::ShutdownPlatform();

不需要多次执行, 从 scriptEngine 中抽出来

PatriceJiang avatar Sep 17 '20 10:09 PatriceJiang

楼上正解,但是重新初始化有黑屏现象,你们有嘛? @PatriceJiang

ljs19850321 avatar Oct 03 '20 12:10 ljs19850321

我们目前退出时没做释放,第二次进入直接获取之前的 v8 使用。没有遇到黑屏问题

yuhanle avatar Apr 20 '21 15:04 yuhanle

楼上能给个 demo 看看吗

296230428 avatar May 25 '21 06:05 296230428

不释放V8,会导致V8一直在后台运行,占用内存和线程资源 如果不是纯游戏的APP,应该释放V8 目前也遇到这个问题,还没找到解决办法

wdx700 avatar Aug 27 '21 11:08 wdx700

楼上能给个 demo 看看吗

不好意思,最近才看到这里的消息。我截了屏可以参考下 cc @wdx700

除此之外,v8 占用的内存不多

其中两个个文件的修改,按截屏顺序看

  1. cocos/bindings/jswrapper/v8/ScriptEngine.cpp
  2. cocos/bindings/jswrapper/v8/ScriptEngine.h

image

yuhanle avatar Aug 30 '21 06:08 yuhanle

楼上能给个 demo 看看吗

不好意思,最近才看到这里的消息。我截了屏可以参考下 cc @wdx700

除此之外,v8 占用的内存不多

其中两个个文件的修改,按截屏顺序看

  1. cocos/bindings/jswrapper/v8/ScriptEngine.cpp
  2. cocos/bindings/jswrapper/v8/ScriptEngine.h

image

我们是自己改了Cocos的代码,封装成View方式加载cocos动画,退出页面时改cocos代码释放掉v8 engine 然后再次进入,第二次Initialize v8 engine,之后就会遇到崩溃 art_sigsegv_fault 0x0000007c07a7c2e8 art::FaultManager::HandleFault(int, siginfo*, void*) 0x0000007c07a7c7fc art::SignalChain::Handler(int, siginfo*, void*) 0x0000005619525e54 0x0000007e9e6668b0 v8::internal::wasm::WasmEngine::AddIsolate(v8::internal::Isolate*) 0x0000007b97ddc608 v8::internal::wasm::WasmEngine::AddIsolate(v8::internal::Isolate*) 0x0000007b97ddc608 v8::internal::Isolate::Init(v8::internal::ReadOnlyDeserializer*, v8::internal::StartupDeserializer*) 0x0000007b97b25b80 v8::internal::Isolate::InitWithSnapshot(v8::internal::ReadOnlyDeserializer*, v8::internal::StartupDeserializer*) 0x0000007b97b260b0 v8::internal::Snapshot::Initialize(v8::internal::Isolate*) 0x0000007b97dc07b4 v8::Isolate::Initialize(v8::Isolate*, v8::Isolate::CreateParams const&) 0x0000007b97aa1270 v8::Isolate::New(v8::Isolate::CreateParams const&) 0x0000007b97aa1370 se::ScriptEngine::init() ScriptEngine.cpp:412 se::ScriptEngine::start() ScriptEngine.cpp:588 Game::init() Game.cpp:59 (anonymous namespace)::createGame(ANativeWindow*) JniCocosActivity.cpp:57 (anonymous namespace)::preExecCmd(signed char) JniCocosActivity.cpp:87 (anonymous namespace)::glThreadEntry() JniCocosActivity.cpp:134 decltype(std::__ndk1::forward<void ()()>(fp)()) std::__ndk1::__invoke<void ()()>(void (&&)()) type_traits:4353 void std::__ndk1::__thread_execute<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_deletestd::__ndk1::__thread_struct >, void ()()>(std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_deletestd::__ndk1::__thread_struct >, void ()()>&, std::__ndk1::__tuple_indices<>) thread:342 void std::__ndk1::__thread_proxy<std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_deletestd::__ndk1::__thread_struct >, void ()()> >(void) thread:352 __pthread_start(void*) 0x0000007e997b4d50 __start_thread 0x0000007e9975528c

wdx700 avatar Aug 30 '21 07:08 wdx700

重复初始化是会有问题的,所以不建议重复初始化。可参考上面的截图,改造支持下 @wdx700

yuhanle avatar Sep 06 '21 07:09 yuhanle

重复初始化是会有问题的,所以不建议重复初始化。可参考上面的截图,改造支持下 @wdx700

你好, 请问除了这里修改还需要改其他地方吗, 目前我们第二次进去还是会遇到黑屏的问题, 报错信息如下


2022-09-21 18:45:50.791 30276-30846/org.cocos2d.demo D/cocos2d-x: find in flash memory dirPath(/data/data/org.cocos2d.demo/files/temp)
2022-09-21 18:45:51.131 30276-30846/org.cocos2d.demo D/jswrapper: JS: Cocos Creator v2.4.9
2022-09-21 18:45:51.461 30276-30846/org.cocos2d.demo D/jswrapper: JS: InitScene: 4.0090000000000146ms
2022-09-21 18:45:51.461 30276-30846/org.cocos2d.demo D/jswrapper: JS: AttachPersist: 0.6080000000001746ms
2022-09-21 18:45:51.461 30276-30846/org.cocos2d.demo D/jswrapper: JS: AutoRelease: 0.875999999999749ms
2022-09-21 18:45:51.461 30276-30846/org.cocos2d.demo D/jswrapper: JS: Destroy: 0.06400000000030559ms
2022-09-21 18:45:51.811 30276-30846/org.cocos2d.demo D/jswrapper: JS: Activate: 343.56600000000026ms
2022-09-21 18:45:51.871 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.871 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.871 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.871 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.911 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.911 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!
2022-09-21 18:45:51.911 30276-30846/org.cocos2d.demo I/Adreno-ES20: <validate_vertex_attrib_state:61>: validate_vertex_attrib_state: No vertex attrib is enabled in a draw call!

tracyis avatar Sep 21 '22 09:09 tracyis

在退出时释放下DeviceGraphics这个单例对象就可以修复iOS的黑屏问题.Android目前我们用的是新进程的方式规避的.

decwang avatar Nov 02 '22 02:11 decwang