The Rank of F

六本木で働く無能のブログ

XperiaのOSSアーカイブ読み 2017/01/20

いつも通り適当にRSSTwitterに流れてくるサイトを巡回してたら,気になる記事を見つけた。

androplus.org

未発表のスマートフォンの画像がリークするのはいつも通りすぎて特に言うことはないのだけれど,気になったのはこの部分

また、Sonyのデータベースから、現在開発中のプラットフォーム名も判明しました。 一つは「BlancBright」、もう一つは「Yoshino」です。

Sony Mobileのスマートフォンには基本的に開発コードネームとプラットフォーム名がつけられている(例えば,Xperia Zなら開発コードネームYugaでプラットフォームがLagan(Qualcomm APQ8064 + Qualcomm MDM9215M)のだけれど,新しいプラットフォーム名が判明しているそう。

どうせいつも通りQualcommのSoCだろうし,最新のXperiaオープンソースアーカイブ見てみたら何か書いてるかも,と久々にXperia X Performance / XZの39.2.A.0.386をダウンロードして探してみた。

すると,ごく僅かに,断片的にだけれどもMakefile中にYoshinoに関する記載があった。

# vendor/semc/external/fips/kscl/Android.mk Line 16 ~ 26

ifneq ($(filter N 7.0, $(PLATFORM_VERSION)),)
  ifeq ($(strip $(SOMC_PLATFORM)),tone)
    TARGET_KERNEL_SOURCE := kernel/msm-3.18
  else ifeq ($(strip $(SOMC_PLATFORM)),yoshino)
    TARGET_KERNEL_SOURCE := kernel/msm-4.4
  else
    TARGET_KERNEL_SOURCE := kernel
  endif
else
  TARGET_KERNEL_SOURCE := kernel
endif

どうやら変数SOMC_PLATFORMyoshinoならカーネルソースとしてkernel/msm-4.4を使用するそう。

ここで出て来る特殊な用語(?)としては

  • SOMC : SOny Mobile Communications,昔はSEMC(Sony Ericsson Mobile Communications)だった。
  • msm : MSM(Mobile Station Modem,要はQualcomm Snapdragonのこと。
  • msm-3.18, msm-4.4 : msmにおけるターゲットLinuxカーネルバージョン。ここにあります。

ただし,39.2.A.0.386にはkernel/msm-4.4が含まれない為,わかったのはこれだけだった。

わかったこととしては

  • YoshinoプラットフォームはQualcommチップセットである。
  • Yoshinoプラットフォームはmsm-4.4ベースである。
  • YoshinoプラットフォームはLinux Kernel 4.4ベースになる。

ということくらい。

BlancBrightの名前は見つからなかった。たぶんMediaTekチップセットなんじゃないかと思う。そういやMediaTek Helio P20採用の機種の情報が漏れてましたね。

あと,Qualcommチップセットに元素名のコードネームをつけてるみたい。ちょっと適当にソースを眺めてみた感じだとこんな感じかな...間違ってるかもしれない。

  • msmcopper => MSM8974 (Snapdragon 800)
  • msmgold => MSM8917 (Snapdragon 425)
  • msmtitanium => MSM8953 (Snapdragon 625)
  • msmferrum => MSM8909 (Snapdragon 210)
  • msmplutonium => MSM8994 (Snapdragon 810)
  • msmtellurium => MSM8952 (Snapdragon 617)
  • msmthorium => MSM8937 (Snapdragon 430)
  • msmzinc => APQ8084 (Snapdragon 805)
  • msmcobalt => MSM8998 (Snapdragon 835)

夜フクロウがMacのdGPUを叩き起こす問題とユーザー側での対応方法

電池がモリモリ減るよ

前述の通り、初めてdGPU(ディスクリートGPU)つきのMacを買った。

今まではiGPUしかなかったから何も考える必要はなかったのだけれど、dGPU搭載ということで 必要のない時にはiGPUを使用することで電力消費を抑えることを考える必要が出てきた。

特に何も考えず数時間使っていたのだけれども、明らかに電池の消費が早すぎる。

で、現在使用しているグラフィックスの種類を表示するアプリであるgfxCardStatusを入れてみた。

GitHub - steveschow/gfxCardStatus: This is a fork of gfxCardStatus, this fork will handle integrated-only mode a little better

(正確にはフォーク版だけど)

すると、やっぱりというか、案の定というか、バッテリ駆動時だろうとなんだろうと常にdGPUが使われてることがわかった。

原因

gfxCardStatusには何が原因でiGPUに切り替えられないのかを表示してくれる便利な機能がある。 というわけで何が原因か調べてみると、どうやらNight Owlというアプリが原因でdGPUが叩き起こされているらしい。

Night Owl => 夜フクロウ

Night Owlはその名の通り夜フクロウのことで、非常に使いやすいTwitterクライアント。ほんとに使いやすい。Windowsにもこういうのほしいなと切実に思う。

sites.google.com

が、これが原因で常にdGPUが叩き起こされている。どうやらTwitterをするためにはクアッドコアCPUだけではなくディスクリートグラフィックスも必要らしい。TwitterのためにXeonのPCを組む人の気持ちが... わかるわけがない。

原因を探ってみると、どうやら夜フクロウ側でGPUの自動切り替えに対応している旨の宣言をしていないのが原因のようだった。

無理やり改造して対応させる

対応してないならさせればいい。

Mac App Storeから落とした場合はそれ関係の情報が付加されるので、うまくいじれない可能性やアップデートで崩壊する可能性を考慮して公式サイトで配布されているバージョンを落としてきて改造した。

夜フクロウオープンソースじゃない。けれどもWindowsと同じようにマニフェストファイルは自由に書き換えられる。

しかもMacのアプリケーションは.appというディレクトリ名を持つ単純なディレクトリなので、以下のようにして簡単にマニフェストファイルにアクセスできる。

$ cd Night\ Owl.app/
$ open Contents/Info.plist

で、GPU自動切り替えに対応していると嘘をつくために、マニフェストファイル(Info.plist)を以下のように書き換えた。

<?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>BuildMachineOSBuild</key>
    <string>15G31</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>NSSupportsAutomaticGraphicsSwitching</key>
    <true/>
〜以下省略〜

あとは起動するだけ。成功した。

その他

本当に宣言するだけでなんの問題もなく使えてしまっているので、公式に対応していただければ...