2012-07-16 14 views
14

Canvas2Dでjavascriptを使用して5つのスプライトを表示するための小さなエンジンをコーディングしました。すべてうまく動作し、完全に最適化されています。Google ChromeとFPSで奇妙な動作が発生する

FPSは30〜60の間で変動しますが、面白いのは、60GPSという一定の値で、GoogleのJavaScriptコンソールが開いているときです。

他にもこれが発生していますか?

n.b.

例:あなたのFPSは約40〜50であるので、 http://jsfiddle.net/jrPNy/1

は、 "粒子" ナンバーで遊んで私はrequestAnimationFrameの

Editを使用しています。コンソールを開くよりも、60 fpsまで上がります。 (Chrome 21.0.1180.83)

+1

フォーカスに問題はありますか? Chromeは、ページにフォーカスがないと思って、コンソールを開いていると何らかの理由で常にフォーカスを当てていると思われる場合、意図的にFPSを下げることがあります。 – apsillers

+0

タブがフォーカスを常に保持しているので、フォーカスの問題であるとは見えません。フォーカスが失われると、fpsは期待通りにゼロになります。 –

+0

私たちが見ることのできるコードがありますか? – Jarrod

答えて

5

質問投稿者がコメントに記載したように、これは表示可能なキャンバス領域と関係があります。コンソールを開くとビューポートの高さが低くなります。通常のサイズのディスプレイではレンダリングするコンテンツが少なくなります。 60 FPSはディスプレイのリフレッシュレートによって決まるソフトリミットです。通常のモニタでは1秒間に60フレーム以上を表示することは不可能なので、それ以上のフレームを処理することは意味がありません。

これを私のマシンでテストしたところ、CPU速度が低下し、常に60FPSになるとは限りませんでした。提供されたフィドルの例では、私は通常約24FPSを持っていました。コンソールを開くと、表示されているキャンバスが元のサイズの約60%に縮小され、FPSは平均して30に増加しました。コンソールのサイズを変更すると、FPSにも影響が出ます。キャンバスのわずか10%しか表示されず、FPSは約42で動きました。コンソールとキャンバス全体が目に見えるほど、FPSは元の値よりわずかに下がって23になりました。コンソールの状態に関係なく、CPU速度によってFPSは一定の60になりました。

ここで、キャンバスの表示量に関係なく、キャンバスの実際のレンダリングとキャンバス画像の合成方法は、必要な処理能力にどのような影響を与えるかにかかわらず、画面を生成するJavaScriptがまだ実行されていることを前提にしています。残りのHTML、ブラウザウィンドウ、最後に画面に表示されます。ますます多くの作業がGPUに移行しているので、合成プロセスのすべての段階がOpenGLで行われるときは、FPSは常に最大限にすべきです。

+2

私たちは同じことを経験しません。私はAccelerated 2D Canvasを起動しました。ゲームでは今私は30fpsだけを与えるクロムを開発する。コンソールには定数60があります。キャンバスのサイズは小さめではなく、キャンバス上の表示部分もありません。私はコンソールを底にほぼ見えるようにしていたので、スムースの開発ができました。 – fehrlich

+0

それは変です...コンソールが非アクティブになると、フレームレートは30に低下し、いつでも再起動されます.FPSは60に戻りますか? –

+1

はい、このようなexacltyは、それほどフィドルの例では悪くないが、視覚効果もあります。私はあなたが私が何を意味するか見ることができるようにビデオを追加しました。 – fehrlich

-1

Googleクロムはvsyncを使用してFPSを制限することを意味します。ほとんどの画面は60 FPSですので、可能であればGoogleはそれにマッチしますが、それ以上は上回らないでしょう。 vsyncを削除するプログラムがあるかもしれませんが、Nvidiaのドライバがこれを制御できることは分かっていますが、これを行うにはGTX 610またはhightが必要です。

0

私のMacBookには同じことがありました。 osxドックがフレームレートを低下させているように見えます。コンソールを開くと、フレームレートが60fpsに戻るようにビューポートがドックから十分離れて移動します。ウィンドウをドックから離すと、フレームレートが上がります。ドックを自動的に隠すと、コンソールを開かなくてもフルスクリーンで60fpsにすることができます。

関連する問題