ios - for - GoogleMaps en simulador en Xcode 9 usa más del 100% de la CPU al mover el mapa
maps for ios (1)
Actualización: este problema está solucionado en Xcode 9.1 beta 2
Hay un error en OpenGLES.framework
que hace que se salte la carga del LLVM JIT y OpenGLES.framework
a la interpretación de sombreadores. Esto tiene un impacto severo en el rendimiento del Simulador ya que es OpenGL completamente procesado por software (esto incluye CoreAnimation, SceneKit, etc.).
editar : para aclarar, los síntomas de esto son exactamente lo que describes: 100% o más de uso de CPU y rendimiento de <1 fps. Esto afecta el SDK de Google Maps y MapKit.
Como una solución temporal puede copiar libCoreVMClient.dylib
de Beta 3 en el Xcode 9 GM y el rendimiento debe restaurarse a lo que era anteriormente. Esto se debe hacer para cada tiempo de ejecución de la plataforma por separado.
Para iOS, esta se encuentra en: Xcode[-beta].app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib
Para tvOS esto se encuentra en: Xcode[-beta].app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/tvOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib
Para watchOS, esta se encuentra en: Xcode[-beta].app/Contents/Developer/Platforms/WatchOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/watchOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib
Así que ahora he convertido mi proyecto para usar Swift 4 en Xcode 9 y he comenzado a probar mi aplicación. Es una gran aplicación con cuatro pestañas distintas, y casi todo está funcionando como se esperaba. Una de las pestañas es un mapa, usando GoogleMaps. Nunca he tenido ningún problema con esto, pero cuando se compila con Xcode 9 y se muestra en Simulator, usa más del 100% de la CPU al mover el mapa, y está muy rezagado. Aquí está el navegador de depuración cuando se ejecuta en un simulador. Hacemos un dibujo personalizado, pero no un 102% de dibujo.
Esto solo comenzó a suceder después de que actualicé a Xcode 9 y Swift 4. Al depurar en Xcode 9 en un simulador de iPhone 7, 8 o X, todo con iOS 11, supera un 100% de CPU y detiene por completo la actualización de la interfaz de usuario. durante aproximadamente un segundo cada vez que trato de moverlo. Comienzo el gesto de arrastrar, pero la interfaz de usuario solo se actualiza una vez por segundo. Efectivamente dándome alrededor de 1 fps .
Sin embargo, al depurar en Xcode 9 en un simulador de iPhone 6 con iOS 9 , se obtiene hasta ~ 90% cuando se mueve el mapa y no se retrasa tanto. Supongo que obtengo unos 20-30 fps aquí. (Este podría ser el mismo fps que obtengo en los simuladores de Xcode 8. El mapa nunca ha sido realmente sencillo en el simulador ...)
Cuando se ejecuta en un dispositivo real (iPhone 7, iOS 11), la CPU utiliza aproximadamente el 40% cuando se mueve constantemente el mapa, y está funcionando muy bien sin rezagos en absoluto (60 fps).
También obtengo esto en la salida tan pronto como abro la pestaña con el mapa, pero creo que es irrelevante para esta pregunta en particular:
Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: *****, TID: *******, Thread name: com.google.Maps.LabelingBehavior, Queue name: com.apple.root.default-qos.overcommit, QoS: 21
Esto dice que GoogleMapsAPI llama a [UIApplication applicationState]
en un hilo de fondo.
Estoy usando la última versión de GoogleMaps: 2.4.0 . Por lo que sé, esta versión puede no ser compatible con Xcode 9 / Swift 4, etc., pero no puedo encontrar nada sobre una nueva versión.