v1.10.5とv1.11.3におけるバックグラウンドスロットリングの無効化 - sunfish-shogi/electron-shogi GitHub Wiki

はじめに

Electron の「バックグラウンドスロットリング」という機能を無効化した、 v1.10.5v1.11.3 をリリースします。

このページではバックグラウンドスロットリングがどのような機能なのかと、なぜ Electron 将棋でそれを無効化するのかを説明します。

バックグラウンドスロットリングとは

バックグラウンドスロットリングとは消費電力を抑える機能で、 Electron を使ってアプリを開発するとデフォルトで有効になります。 ウィンドウを最小化したり仮想デスクトップを切り替えたりしてアプリが見えなくなったときに、わざと処理を遅くすることで PC への負担を減らします。

ちなみに、Electron の描画エンジンは Google Chrome や Microsoft Edge に使われているのと同じ Chromium であり、スロットリングの機能はもともと Web ブラウザで重いサイトの影響を低減するためのものです。

Electron で作られたアプリは様々ありますが、例えば Discord や Slack, Skype, Microsoft Teams など有名なコミュニケーションツールも名を連ねています。 そういったアプリでは相手からメッセージが来るたびに通信や画面更新が発生するため、バックグラウンドスロットリングは効果的だと言えます。

なお、バックグラウンドスロットリングが作動する条件(最小化する、モニターをオフにする、他のウィンドウで隠れる、など)は OS によって異なります。

Electron 将棋でバックグラウンドスロットリングを無効化する理由

Electron 将棋で棋譜解析を実行した場合、最小化したり仮想デスクトップを切り替えてしまうとタイマーの実行が遅れ、設定した時間より長く思考してしまうことがわかっています。 筆者の環境において対局機能への影響を確認できたケースはありませんが、対局中もバックグラウンドスロットリングは無効であることが望ましいと思われます。

※一部のユーザーからは、モニター無しの PC で対局をすると着手が遅延するという報告を受けています。

頻繁に通信やアニメーションをするアプリの場合はバックグラウンドスロットリングが効果的ですが、 Electron 将棋の場合は何も操作をしていないときの CPU 使用率は十分に低いのであまり効果がありません。 通常は将棋エンジンの負荷の方が圧倒的に高くなりますが、エンジンは Electron の管理外なので CPU 使用率は下がらず、むしろ上述のように Electron 将棋からの停止命令が遅れるため逆効果になります。

そこで、 Electron 将棋の新しいバージョンでは常にバックグラウンドスロットリングを無効化します。 現在のところ、有効化するオプションの提供は予定していません。

技術的な補足

Electron では BrowserWindowbackgroundThrottling オプションに加えて --disable-renderer-backgrounding という Chrome と同じコマンドラインスイッチを指定することができます。今回のパッチアップデートで --disable-renderer-backgrounding は使用していません。 backgroundThrottling: false と同時に指定した場合にどのような影響があるかは調査中です。