ios css webkit gpu wkwebview

ios - WKWebView se bloquea en aceleraciónAnimationDidStart



ios webkit (1)

Estoy teniendo un bloqueo en la aplicación de un cliente y no mucho en el WTFCrash , no WTFCrash mucho uso del seguimiento de la pila.

Estoy usando una instancia de WKWebView para mostrar una página web que tiene algunas animaciones basadas en CSS y un video. Los problemas se producen en iOS 8 y 9 en una amplia variedad de dispositivos (iPhone 5c a 6s y una gama similar de iPads).

WKWebView ejecuta en su propio proceso, no en la aplicación. Cuando se produce el bloqueo, se deja una capa blanca que cubre la aplicación principal, lo que la hace inaccesible aunque su proceso no se haya visto afectado.

En cuanto a los registros del dispositivo encuentro bloqueos del proceso com.apple.WebKit.WebContent y todos tienen el mismo registro exacto para el hilo com.apple.WebKit.WebContent .

Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 JavaScriptCore 0x0000000184c9f22c WTFCrash + 72 1 JavaScriptCore 0x0000000184c9f224 WTFCrash + 64 2 WebKit 0x0000000188ecd850 WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart(unsigned long long, WTF::String const&, double) + 0 3 WebCore 0x0000000184f2e70c WebCore::ThreadTimers::sharedTimerFiredInternal() + 148 4 WebCore 0x0000000184f2e64c WebCore::timerFired(__CFRunLoopTimer*, void*) + 36 5 CoreFoundation 0x000000018107d81c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28 6 CoreFoundation 0x000000018107d4c0 __CFRunLoopDoTimer + 884 7 CoreFoundation 0x000000018107abd4 __CFRunLoopRun + 1520 8 CoreFoundation 0x0000000180fa4d10 CFRunLoopRunSpecific + 384 9 Foundation 0x00000001819b4d8c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 308 10 Foundation 0x0000000181a09ff8 -[NSRunLoop(NSRunLoop) run] + 88 11 libxpc.dylib 0x0000000180d68cf8 _xpc_objc_main + 660 12 libxpc.dylib 0x0000000180d6aa2c xpc_main + 200 13 com.apple.WebKit.WebContent 0x0000000100057924 0x100054000 + 14628 14 libdyld.dylib 0x0000000180b428b8 start + 4

Aquí hay ejemplos de html / css que usamos para reproducir el problema.

var initialWidth = 100; window.addEventListener(''load'', function() { var div = document.getElementById(''mytest''); div.className = ''''; setInterval(function() { initialWidth += 10; if (initialWidth > 1000) { initialWidth = 1; } div.style.height = initialWidth + ''px''; }, 40); }, false);

body { background-color: #4cb9e4; } div#mytest { position: absolute; top: 0; width: 100%; height: 5000px; background-color: rgba(0, 0, 0, 0.7); text-align: center; overflow-y: hidden; -webkit-transition-property: height; -moz-transition-property: height; transition-property: height; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; transition-duration: 0.5s; -webkit-transition-timing-function: ease; -moz-transition-timing-function: ease; transition-timing-function: ease; } div#mytest.hidden { height: 0; }

<body> <div class="hidden" id="mytest"> This is sample test </div> </body>

¿Esto le resulta familiar a alguien? ¿Hay algo que debería decirle al ingeniero web que cambie con respecto a la animación?


Debes crear la vista web en el hilo principal

- (void)createWebView{ if (![NSThread isMainThread]) { dispatch_async(dispatch_get_main_queue(), ^{ [self createWebView]; }); return; } self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; //Rest of my code }