アカウント名:
パスワード:
原因はなんだろう 部門より
フレームレート説https://egg.5ch.net/test/read.cgi/software/1544784724/358 [5ch.net]https://egg.5ch.net/test/read.cgi/software/1544784724/361 [5ch.net]
canvas 2dでゲームを作ったことがありますが、EdgeだとなぜかsetIntervalで16ms間隔で回してもマウスを動かさないと24~25回/秒まで頻度が落ちてたりしました。ChromeやFirefoxだとちゃんと60fps前後で動作していたのですが。
Edgeのほうが省電力的で、よさそうやなあ。w
Windowsに限った話ではないけれど、タイマー類は使用するAPIとハードウェア構成(に対応するOS側の構成?)に依存して大きく精度が異なります。古い記事ですが こういうの [www.emit.jp]とかが昔からあります。WindowsのSetTimerAPI(周期処理に割と使われる、ウィンドウメッセージ依存)やSleepAPIで画面描写回すとは環境依存で結構違うfpsになったはず。そしてSleep系統の場合ウィンドウメッセージで起きるように作ることも少なくないです。ウィンドウメッセージで起き
OSの制限とブラウザ側のsetIntervalの実装を混同して何が言いたいんだ?元コメにオフトピックなんて付けてる暇が合ったら、この明後日のコメントをマイナスしたらいいのに。
>EdgeだとなぜかsetIntervalで16ms間隔で回してもマウスを動かさないと24~25回/秒まで頻度が落ちてたりしました。
setIntervalは精度も確度も保証していなくて、指定時間以下にはならないというだけではある。でも、普通はレンダリング等の負荷が大きい時に遅延が増えても、負荷が小さい時には頑張って精度出してほしいよねぇ。それなのにマウス動かさないというアイドル状態を検知してサボってるってことなのかな。
/quote
別ACだけど、ブラウザも単なるアプリケーションだからOSの制約は越えられない。という点でアリな解説では。ChromeがOSの設定を書き換える自分本意な挙動をするのは有名でしょ?
chromeは起動しただけでtimeBeginPeriod(1)を叩いて無駄に負荷を掛けるとかあったなぁ年単位で放置されていた上に、直したり再発したりで酷かった覚えがあるわ
ChromeがsetIntervalをどう実装するかならともかく、ChromeがOSのタイマーの設定を書き換えるなら大変なことだと思うんだけど。本当にそれ有名な話なの?
10年以上前から知られてる [blogspot.com]超有名な事象ですけど。Chrome以外のゲームアプリとかビジネスアプリにすら影響出るんで。タイマ精度が上がるだけなんで省電力性能以外は大して実害がない事は多いですけどね。
何度かバッテリー駆動時はタイマ精度を上げないパッチを適用してるけど、
timeBeginPeriodはアプリケーションがOSに対して自分が必要なタイマー精度を要求(設定)するAPIでOSのタイマーの設定を変えるというよりOSが各アプリケーションの要求精度を確認して適宜動作を変える
OSのタイマーは全アプリケーションの要求するタイマー精度のうち最も高精度な精度を満たすように動作するだからゲームやらでタイマー精度が必要なのにこのAPIを呼んでないアプリの精度を上げるためにWMP等のtimeBeginPeriodするアプリを裏で起動しておくと結果的に性能が上がるなんて小技もある
なるほど、何もしてなくても常時timeBeginPeriod(1)を設定してるなら問題ですね。ただ、今回のテストはHTML5動画再生らしいので、他のブラウザでも動画再生時には音ズレしないだけの数字に設定してると思う。
> OSの制限とブラウザ側のsetIntervalの実装を混同して何が言いたいんだ?ブラウザが使用するタイマーAPIとその利用方法にガッツリ依存する話なんだから関係するに決まってるだろ。ブラウザのsetIntervalがOSのAPIから独立したタイマーをOSから独立して実装しているとでも言うのか君は。
> それなのにマウス動かさないというアイドル状態を検知してサボってるってことなのかな。批判する前にちゃんと読んでたらこんな頓珍漢なこと言わなくて済んだのに・・・
40ms間隔のタイマー割り込みを使うAPIで15ms待機を掛けても40ms間隔でしか起きれない。けれどシングルスレッドでよくある実装にするとマウスなどのイベントの間隔でも起きる。それだけの話だよ。
>EdgeだとなぜかsetIntervalで16ms間隔で回しても文字読めてる?
例示に使う数値の好みの違いが何かの反論になるんスか?
そういや省電力設定にJSタイマーだったかの設定有りましたけど影響するのかなぁ?
Edgeの30fpsはネット動画に良く有る約30pの動画をフルスクリーン再生してるなら適切な処置だよね。Chromeの60fpsもディスプレイの標準的なリフレッシュレートと考えれば適切。Firefoxはなんで75fpsと無駄に処理を回してるのだろう。
ハードウエア同士のタイミングは全く一緒にはなりませんから、微妙なタイミングずれが蓄積しある程度まとまったところで解消される現象が起きて、それが人間には不自然な動き、チラツキとして感じられるのでは。
75FPSであればそのずれは15FPS分と大きいので、解消も頻繁になる分人間が感じにくくなる。
とは言え、元の動画のフレームレートがどれだけだったのか、原典を見ても書いてないような。ハードウエアの設定は結構細かく書いているんですけどね。Edgeが有利になるような動画をあえて選んでいるとかはないと思いますが、検証できないのではレポートとして問題があると思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
Re: 原因はなんだろう (スコア:5, 参考になる)
原因はなんだろう 部門より
フレームレート説
https://egg.5ch.net/test/read.cgi/software/1544784724/358 [5ch.net]
https://egg.5ch.net/test/read.cgi/software/1544784724/361 [5ch.net]
Re: 原因はなんだろう (スコア:1)
canvas 2dでゲームを作ったことがありますが、
EdgeだとなぜかsetIntervalで16ms間隔で回してもマウスを動かさないと24~25回/秒まで頻度が落ちてたりしました。
ChromeやFirefoxだとちゃんと60fps前後で動作していたのですが。
Re: 原因はなんだろう (スコア:2)
Edgeのほうが省電力的で、よさそうやなあ。w
Re: (スコア:0)
Windowsに限った話ではないけれど、タイマー類は使用するAPIとハードウェア構成(に対応するOS側の構成?)に依存して大きく精度が異なります。
古い記事ですが こういうの [www.emit.jp]とかが昔からあります。
WindowsのSetTimerAPI(周期処理に割と使われる、ウィンドウメッセージ依存)やSleepAPIで画面描写回すとは環境依存で結構違うfpsになったはず。
そしてSleep系統の場合ウィンドウメッセージで起きるように作ることも少なくないです。
ウィンドウメッセージで起き
Re: (スコア:0)
OSの制限とブラウザ側のsetIntervalの実装を混同して何が言いたいんだ?
元コメにオフトピックなんて付けてる暇が合ったら、この明後日のコメントをマイナスしたらいいのに。
>EdgeだとなぜかsetIntervalで16ms間隔で回してもマウスを動かさないと24~25回/秒まで頻度が落ちてたりしました。
setIntervalは精度も確度も保証していなくて、指定時間以下にはならないというだけではある。
でも、普通はレンダリング等の負荷が大きい時に遅延が増えても、負荷が小さい時には頑張って精度出してほしいよねぇ。
それなのにマウス動かさないというアイドル状態を検知してサボってるってことなのかな。
Re: (スコア:0)
OSの制限とブラウザ側のsetIntervalの実装を混同して何が言いたいんだ?
元コメにオフトピックなんて付けてる暇が合ったら、この明後日のコメントをマイナスしたらいいのに。
/quote
別ACだけど、ブラウザも単なるアプリケーションだからOSの制約は越えられない。という点でアリな解説では。
ChromeがOSの設定を書き換える自分本意な挙動をするのは有名でしょ?
Re: (スコア:0)
chromeは起動しただけでtimeBeginPeriod(1)を叩いて無駄に負荷を掛けるとかあったなぁ
年単位で放置されていた上に、直したり再発したりで酷かった覚えがあるわ
Re: (スコア:0)
ChromeがsetIntervalをどう実装するかならともかく、ChromeがOSのタイマーの設定を書き換えるなら大変なことだと思うんだけど。
本当にそれ有名な話なの?
Re: (スコア:0)
10年以上前から知られてる [blogspot.com]超有名な事象ですけど。
Chrome以外のゲームアプリとかビジネスアプリにすら影響出るんで。
タイマ精度が上がるだけなんで省電力性能以外は大して実害がない事は多いですけどね。
何度かバッテリー駆動時はタイマ精度を上げないパッチを適用してるけど、
Re: (スコア:0)
timeBeginPeriodはアプリケーションがOSに対して自分が必要なタイマー精度を要求(設定)するAPIで
OSのタイマーの設定を変えるというよりOSが各アプリケーションの要求精度を確認して適宜動作を変える
OSのタイマーは全アプリケーションの要求するタイマー精度のうち最も高精度な精度を満たすように動作する
だからゲームやらでタイマー精度が必要なのにこのAPIを呼んでないアプリの精度を上げるために
WMP等のtimeBeginPeriodするアプリを裏で起動しておくと結果的に性能が上がるなんて小技もある
Re: (スコア:0)
なるほど、何もしてなくても常時timeBeginPeriod(1)を設定してるなら問題ですね。
ただ、今回のテストはHTML5動画再生らしいので、他のブラウザでも動画再生時には音ズレしないだけの数字に設定してると思う。
Re: (スコア:0)
> OSの制限とブラウザ側のsetIntervalの実装を混同して何が言いたいんだ?
ブラウザが使用するタイマーAPIとその利用方法にガッツリ依存する話なんだから関係するに決まってるだろ。
ブラウザのsetIntervalがOSのAPIから独立したタイマーをOSから独立して実装しているとでも言うのか君は。
> それなのにマウス動かさないというアイドル状態を検知してサボってるってことなのかな。
批判する前にちゃんと読んでたらこんな頓珍漢なこと言わなくて済んだのに・・・
40ms間隔のタイマー割り込みを使うAPIで15ms待機を掛けても40ms間隔でしか起きれない。
けれどシングルスレッドでよくある実装にするとマウスなどのイベントの間隔でも起きる。
それだけの話だよ。
Re: (スコア:0)
>EdgeだとなぜかsetIntervalで16ms間隔で回しても
文字読めてる?
Re: (スコア:0)
例示に使う数値の好みの違いが何かの反論になるんスか?
Re: (スコア:0)
そういや省電力設定にJSタイマーだったかの設定有りましたけど影響するのかなぁ?
Re: (スコア:0)
Edgeの30fpsはネット動画に良く有る約30pの動画をフルスクリーン再生してるなら適切な処置だよね。
Chromeの60fpsもディスプレイの標準的なリフレッシュレートと考えれば適切。
Firefoxはなんで75fpsと無駄に処理を回してるのだろう。
Re: (スコア:0)
ハードウエア同士のタイミングは全く一緒にはなりませんから、微妙なタイミングずれが蓄積しある程度まとまったところで解消される現象が起きて、それが人間には不自然な動き、チラツキとして感じられるのでは。
75FPSであればそのずれは15FPS分と大きいので、解消も頻繁になる分人間が感じにくくなる。
とは言え、元の動画のフレームレートがどれだけだったのか、原典を見ても書いてないような。ハードウエアの設定は結構細かく書いているんですけどね。Edgeが有利になるような動画をあえて選んでいるとかはないと思いますが、検証できないのではレポートとして問題があると思います。