2012-07-16 25 views
14

He codificado un pequeño motor para mostrar 5 sprites usando javascript en Canvas2D. Todo funciona bien y está completamente optimizado.Comportamiento extraño con google chrome y FPS

El FPS fluctúa entre 30 y 60, pero lo interesante es que dice en un constante 60 fps cuando la consola de google javascript está abierta.

¿Alguien más está experimentando esto?

n.b. Estoy usando requestAnimationFrame

Editar:

Ejemplo: http://jsfiddle.net/jrPNy/1

jugar con el número "partículas" por lo que su fps es de alrededor de 40-50. Luego abre la consola y sube a 60 fps. (Chrome 21.0.1180.83)

+1

¿Podría ser un problema de enfoque? Chrome puede reducir deliberadamente el FPS cuando cree que la página no tiene foco, y tener la consola abierta de alguna manera puede desencadenar un comportamiento siempre enfocado. – apsillers

+0

No puedo verlo como un tema de enfoque ya que la pestaña mantiene el foco todo el tiempo. Cuando se pierde el foco, el fps va a cero, como se esperaba. –

+0

¿Tiene algún código que podamos ver? – Jarrod

Respuesta

5

Como comentó el autor de la pregunta en un comentario, esto tiene que ver con el área del lienzo visible. Al abrir la consola se reduce la altura de la ventana gráfica, lo que en una pantalla de tamaño normal significa que habrá menos contenido para representar. 60 FPS es un límite suave dado por la frecuencia de actualización de la pantalla; hacer más cuadros que eso no tendría sentido ya que es imposible mostrar más de 60 cuadros por segundo en un monitor normal.

Probé esto en mi máquina, reduciendo la velocidad de la CPU para que no siempre obtenga 60FPS. En el ejemplo provisto de Fiddle, tenía alrededor de 24 FPS normalmente. La apertura de la consola redujo el lienzo visible a aproximadamente el 60% de su tamaño original, y el FPS aumentó a 30 en promedio. Cambiar el tamaño de la consola influiría en el FPS en consecuencia: con solo el 10% del lienzo visible, el FPS oscilaba alrededor de 42, y con una consola muy pequeña y todo el lienzo visible, el FPS estaba ligeramente por debajo del valor original, a 23. Aumentando el La velocidad de la CPU llevó el FPS a 60 constantes, independientemente del estado de la consola.

Ahora, dado que el JavaScript que genera la pantalla todavía se está ejecutando, independientemente de cuánto del lienzo sea visible, lo que influye en la potencia de procesamiento necesaria es la representación real del lienzo y la composición del lienzo en el resto del HTML, en la ventana del navegador y finalmente en la pantalla. Cada vez más de ese trabajo se traslada a la GPU, por lo que cuando cada etapa del proceso de composición se realice en OpenGL, el FPS siempre debe estar al máximo.

+2

bien, entonces no experimentamos las mismas cosas, he activado Accelerated 2D Canvas. En un juego que desarrollo ahora, Chrome solo me da 30fps. Con la consola tengo constante 60. Y el tamaño del lienzo no es más pequeño, ni la parte de visualización en el lienzo. Puse la consola casi visible en la parte inferior, por lo que tengo un pequeño desarrollo. – fehrlich

+0

Eso es raro ... Entonces, ¿cada vez que se desactiva la consola, la velocidad de fotogramas cae a 30, y cada vez que se reactiva, el FPS vuelve a 60? –

+1

sí, exactamente como este, no es tan malo en el ejemplo del violín, pero también hay un efecto visible. Agregué un video para que veas lo que quiero decir. – fehrlich

-1

Google Chrome usa vsync, lo que significa que limitará el FPS al límite de FPS de tu pantalla. La mayoría de las pantallas tienen 60 FPS, por lo que googlearás eso si es posible pero no irás por encima. Puede haber un programa para eliminar el vsync pero sé que los controladores de Nvidia pueden controlar esto, pero necesitarás un GTX 610 o alto para hacer esto

0

Experimenté lo mismo con Chrome en mi macbook. Parece que el dock de osx hace que la velocidad de fotogramas disminuya, cuando abres la consola, la ventana gráfica se aleja lo suficiente de la base para que la velocidad de fotogramas retroceda hasta 60 fps. Si aleja la ventana de la base, la velocidad de fotogramas aumenta. Puedes tener una pantalla completa de 60 fps sin la consola abierta si ocultas automáticamente el dock.

Cuestiones relacionadas