React-native-webview: Rendering multiple Webviews with injected JS causes a crash on Android

Created on 5 Jun 2019  路  3Comments  路  Source: react-native-webview/react-native-webview

Bug description:
My app loads data from an API that is shared with the web version of our app which is why I am using webviews to directly render the HTML contents. Each paragraph of an article has its own webview as I need to render ad banners between them. Sometimes the webviews will load correctly and the app will only crash once I try to go back to the previous screen (using React Navigation) and at other times it will crash before even showing the webviews on screen.

To Reproduce:
Load enough embedded tweets with the Twitter JS script inside webviews. I will try to post a Snack later.

Expected behavior:
Page loads correctly at all times, without crashing.

Screenshots/Videos:
Stacktrace from Android Studio:

Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c in tid 13662 (RenderThread), pid 13634 (com.example) Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.093/5456446:userdebug/dev-keys' Revision: '0' ABI: 'x86' pid: 13634, tid: 13662, name: RenderThread >>> com.example <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c Cause: null pointer dereference eax e7a959c0 ebx f0a794a0 ecx f0a6994c edx 00000002 edi efcbbd9c esi 00000000 ebp d314a7e8 esp d314a7d0 eip f07edeea backtrace: #00 pc 0060ceea /system/lib/libhwui.so (SkSurface::getCanvas()+26) #01 pc 0009b53d /system/lib/libhwui.so (android::uirenderer::skiapipeline::GLFunctorDrawable::onDraw(SkCanvas*)+3357) #02 pc 005200f7 /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+279) #03 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #04 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #05 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #06 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #07 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #08 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #09 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #10 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #11 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #12 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #13 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #14 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #15 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #16 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #17 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #18 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #19 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #20 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #21 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #22 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #23 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #24 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #25 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #26 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #27 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #28 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #29 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #30 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #31 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #32 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #33 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #34 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #35 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #36 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #37 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #38 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141) #39 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38) #40 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344) #41 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229) #42 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352) #43 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287) #44 pc 000a655e /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderLayersImpl(android::uirenderer::LayerUpdateQueue const&, bool, bool)+862) #45 pc 00546e44 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderFrame(android::uirenderer::LayerUpdateQueue const&, SkRect const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>> const&, bool, bool, android::uirenderer::Rect const&, sk_sp<SkSurface>)+84) #46 pc 00545e39 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaOpenGLPipeline::draw(android::uirenderer::renderthread::Frame const&, SkRect const&, SkRect const&, android::uirenderer::FrameBuilder::LightGeometry const&, android::uirenderer::LayerUpdateQueue*, android::uirenderer::Rect const&, bool, bool, android::uirenderer::BakedOpRenderer::LightInfo const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>> #47 pc 000b2e76 /system/lib/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+262) #48 pc 0054bd02 /system/lib/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+898) #49 pc 004fd4c2 /system/lib/libhwui.so (android::uirenderer::WorkQueue::process()+242) #50 pc 000c454a /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+314) #51 pc 0000e616 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+326) #52 pc 0000df76 /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246) #53 pc 0008f065 /system/lib/libc.so (__pthread_start(void*)+53)

Environment:

  • OS: MacOS
  • OS version: Mojave
  • react-native version: ^0.59.8
  • react-native-webview version: ^5.11.0
bug report

Most helpful comment

After a little more digging, I have found a solution (or at least a workaround ?). Turns out there is this hardwareAccelerationDisabledAndroid prop which is a boolean. I tried setting it to true and it seems to have fixed the problem for now!

<Webview
    hardwareAccelerationDisabledAndroid={true}
    ... />

All 3 comments

i have the same problem.

After a little more digging, I have found a solution (or at least a workaround ?). Turns out there is this hardwareAccelerationDisabledAndroid prop which is a boolean. I tried setting it to true and it seems to have fixed the problem for now!

<Webview
    hardwareAccelerationDisabledAndroid={true}
    ... />

Related to #575

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dogeri28 picture dogeri28  路  3Comments

BenWildeman picture BenWildeman  路  3Comments

TheMakerOleguch picture TheMakerOleguch  路  3Comments

panda0603 picture panda0603  路  3Comments

celciusjj picture celciusjj  路  3Comments