
X.Org Server、ディスプレイオフ時のフレームレート指定が可能に 50
ストーリー by headless
指定 部門より
指定 部門より
X.Org Server にディスプレイオフ時のフレームレートを指定するオプション「-fakescreenfps」がマージされた(Phoronix の記事、 diff)。
X.Org Server ではこれまで、ディスプレイオフ時の仮想的な画面出力先 (fake screen) は更新頻度が 1 秒間隔となるようハードコードされていた。そのため、ディスプレイが再びオンになるまでの間、VNC などのストリーミングソフトウェアを使用している場合でも表示が 1 FPS に制限されるという問題があった。-fakescreenfps オプションは 1 ~ 600 の整数を添えて使用し、1 FPS ~ 600 FPSの範囲で描画更新頻度を指定可能となる。
X.Org Server ではこれまで、ディスプレイオフ時の仮想的な画面出力先 (fake screen) は更新頻度が 1 秒間隔となるようハードコードされていた。そのため、ディスプレイが再びオンになるまでの間、VNC などのストリーミングソフトウェアを使用している場合でも表示が 1 FPS に制限されるという問題があった。-fakescreenfps オプションは 1 ~ 600 の整数を添えて使用し、1 FPS ~ 600 FPSの範囲で描画更新頻度を指定可能となる。
ネコ (スコア:0)
500FPSくらいあると滑らかに見えるにゃ
指定可能か否かは置いといて (スコア:0)
修正前のコードにマジックナンバー的な値がずっと存在していたのが少し残念だね。
Re:指定可能か否かは置いといて (スコア:2)
コメントに書いてある通りで
60Hz のインターバル(=interval),つまり 1/60秒 = 16667 μ秒のことですよ
Re: (スコア:0)
そういうのはマクロにしておくんだよ
1/60秒が33334μ秒になった時にコードの修正が楽になる
Re: (スコア:0)
これとか#define NUM_10000とかネタレスしてる人とマジレスが混在して混沌としてる
Re: (スコア:0)
いや、1s/60 の結果なのは分かった上で書いたのだけど。コメントには
と書いてあるけど、16667 については明確には書いてない。
だから「マジックナンバー的な値」と書いた。あんだーすたん?
Re: (スコア:0)
それは「明確に書いている」と受け取るなぁ。俺は
Re: (スコア:0)
あなたには前提知識がありマジックナンバーではないのかもしれないが、一般的にはマジックナンバーでしかない、という視点はコード開発ではとても重要ですよ。
Re: (スコア:0)
プログラミングを「製造」と言って三項演算子を一律禁止するコーディング規則を作りそうなやつだな。
1から10まで説明してたらコードの9割がコメントになるわ。
Re: (スコア:0)
いちいちコメント書かなくても良いようにマクロや定数使えって話だろ?
Re: (スコア:0)
1から10までの説明は要らないけど、コードから意図が伝わるように書かれていなかったことが問題でしょ。
コンパイルする際に最適化されることを期待して、こんな風に書いていればコメント要らないし。
Re: (スコア:0)
実務でプログラミングに関わってたら常識のハズなんですが、、
やっぱりオープンソースとか「趣味で」やってるとこうなっちゃうんでしょうねぇ
少なくともマジックナンバーを使わずに下みたいにヘッダでdefineしろってのは仕事なら最初に言われるはず
#define NUM_1 1
#define NUM_2 2
...
#define NUM_10000 10000
# define NUM_100 10って書いてるの見つけて二度見した経験があるのでAC
Re: (スコア:0)
#define NUM_10000までしかなかったら16667を表すのに足りないじゃん! やっぱりスーツは馬鹿だな
Re: (スコア:0)
マクロや定数にしたからって16667が何を意味するのか説明するコメントが要らなくなるわけじゃないでしょ。
そして一箇所でしか使われてないならマクロや定数にしたところで位置を移動するだけで大した意味はない。
Re: (スコア:0)
あれ、おかしいな。#4086698にコメントしたつもりでした。
どうしてここにぶら下がってるんだろう
Re:指定可能か否かは置いといて (スコア:1)
むしろ、NUM_1000とかは酷いローカルルールなんだから読みづらいことこの上ない。直観的には全く分からないんだから、そんなコードを他人と共有するのはやめてくれ。
Re: (スコア:0)
これは最悪のローカルルール。うん、某大手系列でやってる所あるよね。
痴呆の極み。
Re: (スコア:0)
ネタとマジが混ざりすぎて…
Re: (スコア:0)
コメントの代わりにマクロ名や定数名使えってことだよ。
そして一箇所でしか使われていなかったとしても、
他で同じ数値を使いたくなったときのためにマクロや定数にすべき。
16666なのか16667なのかで判断に迷うこともなくなる。
Re: (スコア:0)
> それは「明確に書いている」と受け取るなぁ。俺は
オープンソースで「俺はわかる」と言われても。他人が読む前提が無いのかなぁ困った人だ。
Re: (スコア:0)
「Otherwise, pretend that the screen runs at 60Hz」のコメント付きで16667と書かれてりゃわかる人は十分いるだろうし、それじゃわからない人がいるというならそう思った人が修正すりゃいいじゃん。オープンソースなんだし
Re: (スコア:0)
スラドの猿たちの90%以上はマウント合戦に夢中で「修正前のコードに」と書かれていることに気づかない
Re: (スコア:0)
それでわからない人はコードを弄らないで欲しいわ。
Re: (スコア:0)
俺なら
// Magic
ってコメントにする。
Re: (スコア:0)
俺なら
// [usec]
だな
Re: (スコア:0)
コメント書くまでもなく最初からC言語だろ!
Re: (スコア:0)
修正後でもコメントのないマジックナンバー(1000000)は残ってんぞ。
> screen_priv->fake_interval = 1000000 / fake_fps;
つーか、直値とかよりも場当たり的に糞みたいな大域変数を追加してる方がひでーわ。
Re: (スコア:0)
hackって語源的にはそういうもんだからね
Re: (スコア:0)
どんな書き方をするかはともかく
初期値(省略値)は固定値でどこかに記述する必要があるだろ。
Re: (スコア:0)
そのことよりも、パッと見で、修正後の screen_priv->fake_interval が 60 Hz 時に 16667 でなくて 16666 を示すことが気になりました。修正前後で 60 Hz 時の挙動が変わらないことを祈ります。
Re: (スコア:0)
大体、何故INTEGERなん?DOUBLEの方が良くね?(門外漢的感想
Re: (スコア:0)
Apple「温度の値が華氏で飛び飛びになるくらいで大したことありませんよ」
Re: (スコア:0)
ハードウェアを動かすための精度が必要とされるクロック回路のPLL分周比の設定などでは無いので、16666でも16000でも大した変わりは無いでしょう
(用途を考えれば体感的に誤差を感じない程度でOK)
Re: (スコア:0)
ここでの問題は2つあり、
(1) 単位が不明であること
(2) 値の設定意図が不明であること
(1)については、時間長を表すユーザ定義型を作れば型検査の恩恵も受けられるようになり、例えばusec値をmsec値に代入するといったミスをコンパイル時検出できる。ただしCだと直接的な方法はない(structでそれっぽいことはできるが…)ので、次善の策としてコメントで単位をつける方法か。
(2)についてはdiffを見れば分かるとおりコメントで十分に親切な補足があり、「interval」と「60Hz」の意味が取れれば問題なく理解可能。ただこれは程度問題であるので、どれだけ詳しく書いたとしても、教条的に全部コメントに書かないと不満な外野が文句を言ってくる。実務上は、そういった声は適当なところで切り捨てることになる。
Re: (スコア:0)
一つ上のレイヤに移ると、「60Hzをこの場でハードコードすべきか」という問題が出てくる。この判断は存外に難しい。
マクロ化(名前付き定数化)する方法は安易に選ばれがちで、確かに可読性は上がるものの、識別子の文字数(安全範囲は32文字くらい?)でしか情報を伝えられない。それで足りなければコメントで補足する方法になるが、今度はコメントとコードで情報が二元化して経時で乖離する危険性が出てくる。
本件はフォールバック設定の話で、この値をこのソースファイル外部で使う状況は想定しづらい。したがって、コメント付きでハードコードする判断は適切であったと考えられる。
Re: (スコア:0)
もしかして、gotoを使ったら少し残念になったりします?
Re: (スコア:0)
goto は見通しがよい部分や狭い範囲で使うならいいんじゃない?
整理されていないコードに使う阿呆もいるけど、そういうのは戦力外。
Re: (スコア:0)
gotoを書いたときには見通しが良かったのでは
MIDI規格みたいだな。 (スコア:0)
MIDIにはnote off velocityという離す時の速さの指定がある。
実際有効になっている機器は存在しないかと思うが
まるでそそんなもんだな。
時代はかわるものだから規格上いろいろと作っておくことは評価します。
Re:実際の所 (スコア:0)
Windows上で使える 完全フリーのX-Windowってそんざいするのかね?
Re:実際の所 (スコア:4, 参考になる)
最近は VcXsrvが一番人気っぽい気がする。
というか、Microsoft StoreのX410(有償)とVcXsrvが人気を二分してる感じ。
どちらも開発が止まらないし、C/C++ランタイムがVC++の物なので、CygwinやMingwみたいな中間層なくてパフォーマンスもいい。
Cygwinの人気があったころろは、Cygwin/Xとかを利用する人も多かったし、Cygwin依存を嫌がる人はXmingとかも人気あったと思う。
Cygwin使ってるならCygwin/Xとの親和性は高いと思うが、Cygwin自体があまり利用されなくなってきてるのと、VcXSrvが出てきてからは、どちらもあまり聞かなくなった。
XmingはGPLv2なのは変わらないが、途中のバージョンから(ビルド済みのものは)1年更新の有償になってるので、ドネーションしたくなければ手間はかかる。
フリーが無料って意味だと MobaXTermはゴテゴテしてるが、あれ一つで完結できるという点では、そこそこ人気ある。商用版もあったりしてオープンソースじゃないけど。
Re: (スコア:0)
Cygwin Xは?
rootlessとか便利だよ。
マウスカーソルやキーボード入力でFPS変更すればいい (スコア:0)
一定時間マウスもキーボードもつかわれてないときは、非アクティブだと仮定して1fpsとかに落として、
マウスカーソルが動いたりキーボード入力があれば、fpsを元に戻せばいい
Re: (スコア:0)
考えが浅すぎ。
動画再生とか刻々と表示が変わるタイプのアプリの場合はどうすんのよ。
Re: (スコア:0)
それは既存の、スクリーンセーバーやスリープモードを動作させないためのアクティブ通知と共通にすれば良いかと。
Re: (スコア:0)
今どきそういうアプリはOSに毎フレーム更新が必要だって通知するだろ。
常にフレームレート一定だとバッテリーがすぐになくなる。
Re: (スコア:0)
本文くらい読めや。
Re: (スコア:0)
全部読んでても意味わからんわ。
VNCで1FPSなら困る人が沢山いるのに、なんで今更この問題がクローズアップされてんのよ。
Re: (スコア:0)
ソースが公開されているんだから、実際に困っていた人は修正して自分でビルドしていたに決まってるだろ?
今更問題になってるのは、単なる利用者にも優しいツールを志向する最近の風潮に乗ってるだけだよ。