2012-07-16 110 views
14

我編寫了一個小引擎,以在Canvas2D中使用JavaScript顯示5個精靈。一切工作正常,並完全優化。谷歌Chrome和FPS的奇怪行爲

FPS在30到60之間波動 - 但有趣的是,當google javascript控制檯打開時,它在恆定的60 fps上表示!

任何身體其他的體驗?

n.b.我使用requestAnimationFrame

編輯:

例子: http://jsfiddle.net/jrPNy/1

玩的 「粒子」 號,以便您的FPS大約是40-50。打開控制檯,它可以達到60 fps。 (Chrome 21.0.1180.83)

+1

它可能是一個焦點問題?當Chrome認爲頁面沒有焦點時,Chrome可能會故意降低FPS,並且打開控制檯可能會以某種方式觸發始終關注的行爲。 – apsillers 2012-07-16 21:57:47

+0

由於標籤始終保持焦點,因此無法將其視爲焦點問題。如預期的那樣,當焦點丟失時,fps變爲零。 – 2012-07-16 22:02:10

+0

你有一些我們可以看的代碼嗎? – Jarrod 2012-07-16 23:25:14

回答

5

正如問題作者在評論中指出的那樣,這與可見的畫布區域有關。打開控制檯會降低視口的高度,在普通尺寸的顯示器上這意味着將呈現較少的內容。 60 FPS是由顯示刷新率給出的軟限制;做比這更多的幀是沒有意義的,因爲在普通監視器上不可能每秒顯示超過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。在我現在開發的遊戲中,Chrome只能提供30fps。隨着控制檯我有恆定的60.畫布大小不小,既不在畫布上的觀看部分。我把控制檯幾乎看到底部,所以我得到了一個smoth發展。 – fehrlich 2012-08-26 07:58:34

+0

這很奇怪......所以任何時候控制檯被停用,幀速率降到30,任何時候重新激活,FPS都會回到60? – 2012-08-26 08:54:16

+1

是這樣的exaclty,它在小提琴的例子中不是很糟糕,但是它也是一個明顯的效果。我添加了一個視頻,所以你可以看到我的意思。 – fehrlich 2012-08-26 08:56:25

-1

Google Chrome使用vsync意味着它將限制FPS給你的屏幕FPS限制,大多數屏幕是60 FPS,所以你的谷歌將盡可能匹配,但不會超過它。有可能是一個程序來刪除垂直同步,但我知道的Nvidia驅動程序可以控制這一點,但你需要一個GTX 610或HIGHT要做到這一點

0

我經歷了我的MacBook上使用Chrome同樣的事情。看起來osx dock會導致幀率下降,當你打開控制檯時,視口會從碼頭移開足夠遠的距離,幀速率可以回到60fps。如果將窗口移離碼頭,幀速率會提高。如果您自動隱藏停靠欄,則無需打開控制檯即可擁有60fps全屏。