AppleはiOS 12でアニメーションをよりスムーズにする方法

AppleはiOS 12でアニメーションをよりスムーズにする方法

iOS 12 のユーザーは、Apple が行った一連の変更のおかげで、以前のバージョンと比較して、ユーザー インターフェイスのスクロールがよりスムーズになり、フレームのドロップが少なくなってアニメーションが処理されることに気付くでしょう。

WWDC 2018の「Cocoa Touchの新機能」セッションで説明されたように、AppleのエンジニアたちはiOS 12を機に、長年ユーザーを悩ませてきたアニメーションの問題を修正しました。一部のフレーム落ちの原因は、エンジニアたちがファーストパーティアプリを検証していた際に発見され、ジョシュ・シェイファー氏がその原因と、Appleがこれらの問題を修正するために行った取り組みについて解説しました。

主に、これは iOS デバイスのプロセッサによって実行されるタスクのスケジュールの改善と、今後のアニメーションの事前読み込みで構成されていました。

特定された問題の一つは、メニューのオプションリストの項目やドキュメントのさらに下の方にあるグラフィックなど、ユーザーがスクロールする際に生成する必要のあるデータのiOSの処理方法に関連していました。iOS 10で導入された「Cell Pre-fetch」と呼ばれるAPIは、データをバックグラウンドで事前にプリロードすることでこの問題を解決し、遅延や突然のプロセッサ負荷の増加なしに画面に表示されるようにしました。

プリフェッチ修正後のタスクスケジュールのタイムライン

プリフェッチ修正後のタスクスケジュールのタイムライン

この方法はうまく機能しますが、Appleは、近い将来に使用されるデータのプリフェッチ要求が、画面上で別のデータセットが生成されるのと同時に行われるため、スクロール中にフレーム落ちが発生する場合があることを発見しました。これによりCPUボトルネックが発生し、両方のタスクの速度が低下します。Appleは、プリフェッチAPIを更新し、より即時に重要なレンダリングタスクが完了した後にデータ取得タスクをキューイングすることで、この問題の発生を防止しました。

もう1つ、おそらくより大きな問題は、実行されているタスクが比較的少ない期間、つまりCPUに負荷がかからず、バッテリー寿命を延ばすためにクロック速度を下げられる期間にフレーム落ちが発生するというものでした。ユーザーの操作によってタスクがトリガーされた場合、CPUはクロック速度を上げて追加の作業に反応するのが遅く、ボトルネックが発生し、フレーム落ちが発生することが判明しました。

iOS 12では、CPUはこのような状況でより速く応答し、タスクをより高速に実行するために適切なクロック速度まで上げます。タスクが完了すると、CPUはクロック速度を可能な限り速やかにアイドルレベルまで下げます。

典型的な自動レイアウトビューでのリソース消費を示すグラフ

典型的な自動レイアウトビューでのリソース消費を示すグラフ

自動レイアウトは、開発者がさまざまなディスプレイサイズに合わせて画面上のアプリコンテンツの配置を定義できるようにする Apple のフレームワークですが、iOS 12 ではリソースの消費量が少なくなるように更新されました。要素がネストされていたり、他のアイテムの配置に依存している場合など、フレームワークによって使用されるリソースが多くの場合で指数関​​数的に増加する可能性があることが判明しました。

iOS 12におけるAppleの最適化により、指数関数的なスケーリング要素が大幅に削減され、CPUとGPUへの影響が軽減されました。要素が互いに独立して配置されるレイアウトでは、全体的なリソース消費量は減少しますが、この点でもiOS 12ではiOS 11から若干の改善が見られます。

シェイファー氏はまた、タスクを実行するためにアプリが必要とするメモリの量を削減できる「Automatic Backing Stores」と呼ばれる iOS 12 の新しい技術についても説明した。

ステージ上で示された例では、同じサイズの写真とグレースケールで描画された画像は、色やピクセルあたりのビット数にかなりの差があるにもかかわらず、通常は同じ量のメモリを消費することが示されています。Automatic Backing Storeは、ファイルのメモリ使用量を、すべてを均等に扱うのではなく、コンテンツ自体の深度に基づいて定義するため、その要素のメモリ使用量を削減できる可能性があります。

Appleは、これらの変更とその他のパフォーマンス改善をiOS 12の開発者向けベータ版に組み入れました。これらの機能は現在も積極的に開発中であるため、秋に予定されているiOS 12の一般公開までに解決できない問題が発生した場合、Appleが以前の方法に戻す可能性は十分にあります。