2016.12.31のApps

1622時更新

広告

macOS Sierraで無駄にdGPUを使うな

と思っていたところ、2016.12.17にMarsEdit 3.7.9が公開され、これのWhat’s New?を確認したところ、次の1文があった。

Add NSSupportsAutomaticGraphicsSwitching to Info.plist to avoid requiring high power GPU use

日本語にすると「dGPUの使用を止めるため、info.plistにNSSupportsAutomaticGraphicsSwitchingの設定を追加した」ということだと思う。どれどれと3.7.8と3.7.9のinfo.plistをXcodeで見比べると次の違いがあった。(原寸)

img

3.7.9のinfo.plistをplain textで開くと次のようになっている。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ! 前略
    <key>NSPrincipalClass</key>
    <string>MEApplication</string>
    <key>NSSupportsAutomaticGraphicsSwitching</key>
    <true/>
    <key>OSAScriptingDefinition</key>
    <string>MarsEdit.sdef</string>
    ! 後略
</dict>
</plist>

前略の直下2行目と後略の直上2行目の間に挟まれている次の部分が肝だ。

    <key>NSSupportsAutomaticGraphicsSwitching</key>
    <true/>

ここで「NSSupportsAutomaticGraphicsSwitchingとはなんぞね?」という疑問がわいたので、先人の知恵を探したところ、「夜フクロウがMacのdGPUを叩き起こす問題とユーザー側での対応方法 – The Rank of F」で効能が検証されており、AppleのDevelopperサイトに「Technical Q&A QA1734: Allowing OpenGL applications to utilize the integrated GPU」という記述もあった。
つまり、dGPUが搭載されているMacでOpen GLに対応させるため、OS X Lionの時代から用意されていたパラメータであり、dGPUが搭載されているMacのシステム環境設定の省エネルギーに「グラフィックスの自動切り替え」というチェックボックスをアプリケーションに反映させるためのものともいえる。さて、冒頭のような印象を受けたのは、OS X El CapitanまでよりもmacOS SierraではよりdGPUを活用しようという仕様変更があり、これが前述のパラメータをアプリケーション側が対応していなかったことによって顕在化した問題といえる。

たとえば、Pixelmatorのように、グラフィックアプリケーションなのだからdGPUを最大限活用するだろうということを容易に察することができるのでdGPUに切り替わるのはよいが、ただのblog editorやメニューバーアプリケーションの設定パネルを開くだけでdGPUに切り替わらせてしまっているアプリケーションの開発者は、OSの5世代もの間に渡って”NSSupportsAutomaticGraphicsSwitching”に対応していなかったお手抜き開発者だったということにもなるので、思い当たる開発者の方は早々に対応した方が良いのではないだろうか?

お手抜き開発者が対応するまでの間、「お前がdGPUを使っても意味がないだろうが」と思い当たるアプリケーションに行き当たったら、アプリケーションで「パッケージの内容を表示」させ、Contents/info.plistに上記の肝の2行を書き加えて試してみてはいかがだろう?

なお、気が向いたら自分が使っているアプリケーションで該当するものがあり、上記の対策が有効であったものまたは対策されたことを確認できたものを以下にリストする。