2017-09-03 5 views
2

コアアニメーションを備えたmacOS用のスクロール集中型アプリケーションを構築しています。私はCA Instrumentを使って最適化を支援してきました。これを実行している間、私は奇妙なことに気付きました...私のアプリは、CA Instrumentのデバッグツールで動作しているときに、より良いフレームレートを取得し、次に正常に動作します。なぜCA_LAYER_SURFACE = 0はコアアニメーションのパフォーマンスを改善しますか?

CA InstrumentツールがCA_LAYER_SURFACE環境変数を0に設定していることがわかりました。これを実行すると、コアアニメーションレイヤをレンダリングするためにココアが使用するコードパスが変更され、結果的にアプリケーションは55fpsから60fpsになります。はるかにスムーズなスクロール。

誰でもこのCA_LAYER_SURFACEフラグについて詳しく教えてください。上記の記事にリンクされていることから、古い挙動が可能になっているようです。しかし、それが古い行動が新しい遅い行動に取り替えられたのはなぜですか?このフラグをプロダクションアプリでCA_LAYER_SURFACE = 0に設定したままにしておく場合のトレードオフは何ですか?

ありがとうございます!

更新性能向上のほとんどは去って行った

(すなわち、両方のバージョンは高速です)私がここで説明したように、私はコンテキストをレンダリングオフスクリーン作成方法変更後:

Fastest way to draw offscreen CALayer content

Iをまた、私が下に投稿した答えに記述されているように、旗についてもう少し分かった。

答えて

1

これらのリリースノート(「レンダリング層への変更」を検索)フラグが何をするかを説明します。

AppKit Release Notes – Changes to layer rendering

フラグ自体が文書化されていません。ただし、NSView.layerUsesCoreImageFiltersからtrueに設定しても同じ効果が得られます。新しいデフォルトであるプロセス外ではなく、処理中のレイヤーをレンダリングします。

私はトレードオフを完全に理解していませんが、私にとっては、文書化されていないCA_LAYER_SURFACEフラグを使用する必要はなく、代わりにNSView.layerUsesCoreImageFiltersと設定するだけです。

関連する問題