Windows Phone. Indicadores de frame rate

Indicadores de frame ratePor poco que estés familiarizado con el desarrollo para windows phone habrás notado al pulsar F5 para compilar tu proyecto en modo depuración, una serie de digitos que salen en la parte superior derecha del emulador.

¿Qué son?, ¿Para que sirven?, ¿Qué significado tienen?, ¿Se pueden quitar?

A todas esas preguntas intentaremos dar respuesta en esta entrada.

¿Qué son?

Son indicadores de rendimiento. Hay que recordar siempre que estamos en dispositivos móviles. Es decir, tenemos un procesador más limitado, menos espacio, memoria, etc comparado con un entorno de sobremesa ya que todo depende una batería. Por lo tanto debemos de preocuparnos de recordar mantener el consumo a varios niveles. Estos indicadores son de gran ayuda.

¿Para que sirven?

Son muy útiles ya que nos proporcionan de manera rápida y efectiva información sobre el rendimiento de nuestra aplicación.

¿Qué significado tienen?

Composition (Render) Thread Frame Rate (FPS) Es el número de fotogramas por segundo del hilo principal correspondiente a la renderización de los elementos visuales.Es recomendable mantener una tasa de 60fps y estar siempre por encima de 30fps. Una tasa de refresco inferior a los 30fps se nos indicará en color rojo y el resultado se reflejará en una mala experiencia de cara al usuario.
User Interface Thread Frame Rate (FPS) El número de fotogramas por segundo del hilo perteneciente a la interfaz de usuario. Afectan en este hilo DataBindings,cambios de propiedad, etc. Se nos marcará en rojo con una tasa inferior a 15fps.
Texture Memory Usage Indicador que nos muestra la cantidad de memoria utilizada para el almacenamiento de texturas. no confundir con la memoria total usada por la aplicación.
Surface Counter Cantidad de espacio superficies manejadas por tarjeta gráfica.
Intermediate Surface Counter Contador de texturas. Muy relacionado con el contador anterior.
Screen Fill Rate Counter Es un contador clave. Nos indica el número de pixeles que se pinta por cuadro en términos de pantallas. Un valor de 1 nos indica toda la pantalla. Su valor no debe de ser superior a 3. Un valor superior a 3 se nos indicará de color rojo. En valor rojos debemos pararnos a pensar si podemos diseñar la aplicación mejor a menos que sea un problema puntual. Por ejemplo, si debemos unificar varias imágenes en una sola.

Como hemos podido ver hay bastantes indicadores aunque se echan en falta algunos como por ejemplo un indicador del uso total de memoria. Aunque esto lo podemos resolver nosotros mismos.

Recuerda siempre intentar probar las aplicaciones en un dispositivo físico. Estos indicadores pueden no ser indicativos del rendimiento real de nuestra aplicación.

¿Se pueden quitar?

Si. En ocasiones, según nuestros intereses desearemos que dichos dígitos no aparezcan. En casos como por ejemplo, tomar una captura.

De entrada, indicar que dichos dígitos solo aparecen si la tarjeta gráfica de tu equipo de desarrollo tiene soporte para DirectX 10. Si cumples dicho prerequisito, debemos saber que los dígitos los coloca el depurador. Así que, cada vez que iniciemos el proyecto en modo depuración saldrán los dígitos (lo normal tras pulsar F5). Arrancando el emulador sin entrar en modo depuración (pulsando para ello CTRL + F5) los dígitos no aparecerán.

Si se nos pasa arrancar sin modo depuración tenemos otra opción muy simple. Con nuestra aplicación arrancada con sus correspondientes indicadores de rendimiento,  pulsaremos sobre el botón Windows del emulador (el botón central). La aplicación se cerrará y también con ella la depuración. Al arrancarla de nuevo lo haremos sin el modo depuración y por lo tanto sin los indicadores.

¿Cómo se gestiona a nivel de código?

Bien, por defecto, en el constructor de la clase App (App.xaml.cs) tendrás unas líneas como las siguientes:

if (System.Diagnostics.Debugger.IsAttached)
{
     // Mostrar los contadores de velocidad de marcos actual.
     Application.Current.Host.Settings.EnableFrameRateCounter = true;
}

Podemos cambiar el valor de la propiedad EnableFrameRateCounter a false para desactivarlo. Esa parte del código la podemos gestionar ya según nuestras necesidades. Podemos hacer algo como lo siguiente:

if (System.Diagnostics.Debugger.IsAttached)
{
#if DEBUG
     // Mostrar los contadores de velocidad de marcos actual.
     Application.Current.Host.Settings.EnableFrameRateCounter = true;
#endif
}

Con el código anterior añadimos una condición a nivel de compilación. El código anterior ejecutará la línea que modifica la propiedad EnableFrameRateCounter solo cuando estemos en modo DEBUG.

Hasta aquí llegamos hoy. En futuras entradas analizaremos como mejorar el rendimiento mostrado por estos indicadores además de conocer otras herramientas que nos pueden proporcionar aún más información relacionado con el rendimiento, consumo de memoria, como detectar memory leaks, etc.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s