web-dev-qa-db-ja.com

Xcode9のシミュレーター上のGoogleマップは、マップを移動するときに100%を超えるCPUを使用します

そこで、プロジェクトをXcode9でSwift 4を使用するように変換し、アプリのテストを開始しました。これは4つの異なるタブを備えた大きなアプリであり、ほぼすべてが期待どおりに機能しています。1つタブの一部はGoogleMapsを使用したマップです。問題はありませんでしたが、Xcode 9でビルドしてシミュレーターに表示すると、over100%CPUを使用します。マップを移動すると、非常に遅れます。シミュレーターで実行する場合のデバッグナビゲーターは次のとおりです。カスタム描画を行いますが、102%の価値のある描画は行いません。

CPU usage

これは、Xcode9とSwift 4に更新した後にのみ発生し始めました。iPhone7、8、またはXシミュレーターでXcode 9でデバッグする場合、すべてiOS11では、CPUが100%をわずかに超え、移動しようとするたびにUIの更新が約1秒間完全に停止します。ドラッグジェスチャを開始しますが、UIは1秒に1回しか更新されません。 1fpsについて教えてください。

ただし、iPhone 6シミュレーターiOS 9でXcode9をデバッグする場合)、マップを移動すると最大90%になり、遅れはほとんどありません。ここでは約20〜30fpsになると思います。 (これは、Xcode 8のシミュレーターで取得するのと同じfpsである可能性があります。マップは、シミュレーターで実際にスムーズになったことはありません。)

実際のデバイス(iPhone 7、iOS 11)で実行している場合、CPUは常にマップを移動するときに約40%を使用し、ラグがまったくなく(60fps)非常にスムーズに動作します。

マップのタブを開くとすぐにこれも出力に表示されますが、この特定の質問とは無関係だと思います。

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

これは、GoogleMapsAPIがバックグラウンドスレッドで[UIApplication applicationState]を呼び出すことを意味します。

最新バージョンのGoogleMapsを使用しています:2.4.0。私の知る限り、このバージョンはXcode 9/Swift 4などをサポートしていない可能性がありますが、新しいバージョンについては何も見つかりません。

21
Sti

更新:この問題はXcode9.1ベータ2で修正されています

OpenGLES.frameworkにバグがあり、LLVM JITのロードをスキップして、シェーダーの解釈にフォールバックします。これは、完全にソフトウェアでレンダリングされたOpenGL(CoreAnimation、SceneKitなどを含む)であるため、シミュレーターのパフォーマンスに深刻な影響を及ぼします。

編集:明確にするために、これの症状はまさにあなたが説明しているものです:100%以上のCPU使用率と<1fpsのレンダリング。これは、Google MapsSDKとMapKitに影響します。

一時的な回避策として、libCoreVMClient.dylibをベータ3からXcode9 GMにコピーすると、パフォーマンスが以前の状態に復元されます。これは、プラットフォームランタイムごとに個別に実行する必要があります。

IOSの場合、これは次の場所にあります: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

TvOSの場合、これは次の場所にあります: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

WatchOSの場合、これは次の場所にあります: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

18
russbishop