パスワードを忘れた? アカウント作成
15371659 story
X

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の範囲で描画更新頻度を指定可能となる。
  • by Anonymous Coward on 2021年08月07日 13時54分 (#4086501)

    500FPSくらいあると滑らかに見えるにゃ

    ここに返信
  • by Anonymous Coward on 2021年08月07日 14時17分 (#4086508)

    修正前のコードにマジックナンバー的な値がずっと存在していたのが少し残念だね。

    screen_priv->fake_interval = 16667;

    ここに返信
    • コメントに書いてある通りで
      60Hz のインターバル(=interval),つまり 1/60秒 = 16667 μ秒のことですよ

      • by Anonymous Coward

        そういうのはマクロにしておくんだよ
        1/60秒が33334μ秒になった時にコードの修正が楽になる

        • by Anonymous Coward

          これとか#define NUM_10000とかネタレスしてる人とマジレスが混在して混沌としてる

      • by Anonymous Coward

        いや、1s/60 の結果なのは分かった上で書いたのだけど。コメントには

        Otherwise, pretend that the screen runs at 60Hz

        と書いてあるけど、16667 については明確には書いてない。
        だから「マジックナンバー的な値」と書いた。あんだーすたん?

        • by Anonymous Coward

          それは「明確に書いている」と受け取るなぁ。俺は

          • by Anonymous Coward

            あなたには前提知識がありマジックナンバーではないのかもしれないが、一般的にはマジックナンバーでしかない、という視点はコード開発ではとても重要ですよ。

            • by Anonymous Coward

              プログラミングを「製造」と言って三項演算子を一律禁止するコーディング規則を作りそうなやつだな。
              1から10まで説明してたらコードの9割がコメントになるわ。

              • by Anonymous Coward

                いちいちコメント書かなくても良いようにマクロや定数使えって話だろ?

              • by Anonymous Coward

                1から10までの説明は要らないけど、コードから意図が伝わるように書かれていなかったことが問題でしょ。
                コンパイルする際に最適化されることを期待して、こんな風に書いていればコメント要らないし。

                悪い例: screen_priv->fake_interval = 16667
                良い例: screen_priv->fake_interval = 1 * 1000 * 1000 / 60   // 60Hz [usec]

              • by Anonymous Coward

                実務でプログラミングに関わってたら常識のハズなんですが、、
                やっぱりオープンソースとか「趣味で」やってるとこうなっちゃうんでしょうねぇ

                少なくともマジックナンバーを使わずに下みたいにヘッダでdefineしろってのは仕事なら最初に言われるはず
                #define NUM_1 1
                #define NUM_2 2
                ...
                #define NUM_10000 10000

                # define NUM_100 10って書いてるの見つけて二度見した経験があるのでAC

              • by Anonymous Coward

                #define NUM_10000までしかなかったら16667を表すのに足りないじゃん! やっぱりスーツは馬鹿だな

              • by Anonymous Coward

                マクロや定数にしたからって16667が何を意味するのか説明するコメントが要らなくなるわけじゃないでしょ。
                そして一箇所でしか使われてないならマクロや定数にしたところで位置を移動するだけで大した意味はない。

              • by Anonymous Coward

                あれ、おかしいな。#4086698にコメントしたつもりでした。
                どうしてここにぶら下がってるんだろう

              • by Anonymous Coward on 2021年08月08日 9時57分 (#4086909)

                むしろ、NUM_1000とかは酷いローカルルールなんだから読みづらいことこの上ない。直観的には全く分からないんだから、そんなコードを他人と共有するのはやめてくれ。

              • by Anonymous Coward

                これは最悪のローカルルール。うん、某大手系列でやってる所あるよね。
                痴呆の極み。

              • by Anonymous Coward

                ネタとマジが混ざりすぎて…

              • by Anonymous Coward

                コメントの代わりにマクロ名や定数名使えってことだよ。
                そして一箇所でしか使われていなかったとしても、
                他で同じ数値を使いたくなったときのためにマクロや定数にすべき。
                16666なのか16667なのかで判断に迷うこともなくなる。

          • by Anonymous Coward

            > それは「明確に書いている」と受け取るなぁ。俺は

            オープンソースで「俺はわかる」と言われても。他人が読む前提が無いのかなぁ困った人だ。

            • by Anonymous Coward

              「Otherwise, pretend that the screen runs at 60Hz」のコメント付きで16667と書かれてりゃわかる人は十分いるだろうし、それじゃわからない人がいるというならそう思った人が修正すりゃいいじゃん。オープンソースなんだし

              • by Anonymous Coward

                スラドの猿たちの90%以上はマウント合戦に夢中で「修正前のコードに」と書かれていることに気づかない

              • by Anonymous Coward

                それでわからない人はコードを弄らないで欲しいわ。

        • by Anonymous Coward

          俺なら
          // Magic
          ってコメントにする。

          • by Anonymous Coward

            俺なら
            // [usec]
            だな

            • by Anonymous Coward

              コメント書くまでもなく最初からC言語だろ!

        • by Anonymous Coward

          修正後でもコメントのないマジックナンバー(1000000)は残ってんぞ。
          > screen_priv->fake_interval = 1000000 / fake_fps;

          つーか、直値とかよりも場当たり的に糞みたいな大域変数を追加してる方がひでーわ。

          • by Anonymous Coward

            hackって語源的にはそういうもんだからね

    • by Anonymous Coward

      どんな書き方をするかはともかく
      初期値(省略値)は固定値でどこかに記述する必要があるだろ。

    • by Anonymous Coward

      そのことよりも、パッと見で、修正後の screen_priv->fake_interval が 60 Hz 時に 16667 でなくて 16666 を示すことが気になりました。修正前後で 60 Hz 時の挙動が変わらないことを祈ります。

      • by Anonymous Coward

        大体、何故INTEGERなん?DOUBLEの方が良くね?(門外漢的感想

        • by Anonymous Coward

          Apple「温度の値が華氏で飛び飛びになるくらいで大したことありませんよ」

      • by Anonymous Coward

        ハードウェアを動かすための精度が必要とされるクロック回路のPLL分周比の設定などでは無いので、16666でも16000でも大した変わりは無いでしょう
        (用途を考えれば体感的に誤差を感じない程度でOK)

    • by Anonymous Coward

      ここでの問題は2つあり、
      (1) 単位が不明であること
      (2) 値の設定意図が不明であること

      (1)については、時間長を表すユーザ定義型を作れば型検査の恩恵も受けられるようになり、例えばusec値をmsec値に代入するといったミスをコンパイル時検出できる。ただしCだと直接的な方法はない(structでそれっぽいことはできるが…)ので、次善の策としてコメントで単位をつける方法か。

      (2)についてはdiffを見れば分かるとおりコメントで十分に親切な補足があり、「interval」と「60Hz」の意味が取れれば問題なく理解可能。ただこれは程度問題であるので、どれだけ詳しく書いたとしても、教条的に全部コメントに書かないと不満な外野が文句を言ってくる。実務上は、そういった声は適当なところで切り捨てることになる。

      • by Anonymous Coward

        一つ上のレイヤに移ると、「60Hzをこの場でハードコードすべきか」という問題が出てくる。この判断は存外に難しい。

        マクロ化(名前付き定数化)する方法は安易に選ばれがちで、確かに可読性は上がるものの、識別子の文字数(安全範囲は32文字くらい?)でしか情報を伝えられない。それで足りなければコメントで補足する方法になるが、今度はコメントとコードで情報が二元化して経時で乖離する危険性が出てくる。

        本件はフォールバック設定の話で、この値をこのソースファイル外部で使う状況は想定しづらい。したがって、コメント付きでハードコードする判断は適切であったと考えられる。

    • by Anonymous Coward

      もしかして、gotoを使ったら少し残念になったりします?

      • by Anonymous Coward

        goto は見通しがよい部分や狭い範囲で使うならいいんじゃない?
        整理されていないコードに使う阿呆もいるけど、そういうのは戦力外。

        • by Anonymous Coward

          gotoを書いたときには見通しが良かったのでは

  • by Anonymous Coward on 2021年08月07日 22時22分 (#4086743)

    MIDIにはnote off velocityという離す時の速さの指定がある。
    実際有効になっている機器は存在しないかと思うが
    まるでそそんなもんだな。
    時代はかわるものだから規格上いろいろと作っておくことは評価します。

    ここに返信
  • by Anonymous Coward on 2021年08月07日 23時28分 (#4086786)

    Windows上で使える 完全フリーのX-Windowってそんざいするのかね?

    ここに返信
    • Re:実際の所 (スコア:4, 参考になる)

      by Anonymous Coward on 2021年08月08日 2時53分 (#4086838)

      最近は VcXsrvが一番人気っぽい気がする。
      というか、Microsoft StoreのX410(有償)とVcXsrvが人気を二分してる感じ。
      どちらも開発が止まらないし、C/C++ランタイムがVC++の物なので、CygwinやMingwみたいな中間層なくてパフォーマンスもいい。

      Cygwinの人気があったころろは、Cygwin/Xとかを利用する人も多かったし、Cygwin依存を嫌がる人はXmingとかも人気あったと思う。
      Cygwin使ってるならCygwin/Xとの親和性は高いと思うが、Cygwin自体があまり利用されなくなってきてるのと、VcXSrvが出てきてからは、どちらもあまり聞かなくなった。
      XmingはGPLv2なのは変わらないが、途中のバージョンから(ビルド済みのものは)1年更新の有償になってるので、ドネーションしたくなければ手間はかかる。

      フリーが無料って意味だと MobaXTermはゴテゴテしてるが、あれ一つで完結できるという点では、そこそこ人気ある。商用版もあったりしてオープンソースじゃないけど。

    • by Anonymous Coward

      Cygwin Xは?
      rootlessとか便利だよ。

  • 一定時間マウスもキーボードもつかわれてないときは、非アクティブだと仮定して1fpsとかに落として、
    マウスカーソルが動いたりキーボード入力があれば、fpsを元に戻せばいい

    ここに返信
    • by Anonymous Coward

      考えが浅すぎ。
      動画再生とか刻々と表示が変わるタイプのアプリの場合はどうすんのよ。

      • by Anonymous Coward

        それは既存の、スクリーンセーバーやスリープモードを動作させないためのアクティブ通知と共通にすれば良いかと。

      • by Anonymous Coward

        今どきそういうアプリはOSに毎フレーム更新が必要だって通知するだろ。
        常にフレームレート一定だとバッテリーがすぐになくなる。

typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...