2017-09-03 50 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

我我還發現了更多關於我在下面發佈的答案中所描述的國旗。

回答

1

發行說明(搜索「更改圖層渲染」)解釋標誌做什麼:

AppKit Release Notes – Changes to layer rendering

標誌本身不是文件。但將NSView.layerUsesCoreImageFilters設置爲true具有相同的效果:將圖層渲染爲進程而不是進程外,這是新的默認設置。

我不完全理解折衷,但對我來說,外賣是你不需要使用無證CA_LAYER_SURFACE標誌,而只需設置NSView.layerUsesCoreImageFilters