Mi juego usa demasiada batería. No sé exactamente cuánto usa en comparación con juegos comparables, pero usa demasiado. Los jugadores se quejan de que usa mucho, y algunos de ellos señalan que hace que su dispositivo se "caliente". Estoy comenzando a investigar esto y quería formular algunas preguntas teóricas y prácticas para reducir el espacio de búsqueda. Esto se trata principalmente de la versión iOS de mi juego, pero probablemente muchos de los mismos problemas afectan la versión de Android. Perdón por hacer muchas subpreguntas, pero todas parecían estar tan interrelacionadas que pensé que era mejor mantenerlas juntas.cómo medir y mejorar el uso de la batería en el iPhone/iPad (también en Android)
Notas al margen: Mi juego no tiene acceso a la red (llamado en varios lugares como una gran pérdida de batería) y no consume mucha batería en el fondo; es el primer plano el problema.
(1) Sé que hay API para leer el nivel de la batería, por lo que puedo hacer algunas pruebas automáticas. Mi pregunta aquí es: ¿cuánto tiempo (o tal vez: aproximadamente cuánto consumo de batería) necesito para que funcione para obtener una lectura confiable? Por ejemplo, si se ejecuta durante 10 minutos, ¿es eso confiable? Si drena el 10% de la batería, ¿es eso confiable? ¿O es mejor correr más de una hora (o, por ejemplo, ver cuánto tarda la batería en drenar el 50%)? Lo que estoy preguntando aquí es qué tan sensible/confiable es el medidor de la batería, entonces sé cuánto tiempo debe durar cada prueba.
(2) Estoy tratando de comprender cuáles son las posibles causas del uso de batería alta. A continuación, enumero algunos posibles factores. Ayúdenme a entender cuáles son los culpables más probables:
(2a) Como en muchos juegos, mi juego necesita dibujar la pantalla completa en cada fotograma. Funciona a aproximadamente 30 fps. Sé que Apple dice que "solo actualice la pantalla todo lo que necesite", pero necesito dibujar cada fotograma. En realidad, podría poner algo de trabajo en solo dibujar las partes de la pantalla que han cambiado, pero en mi caso esa seguirá siendo la mayor parte de la pantalla. Y en cualquier caso, incluso si puedo localizar el dibujo en solo una parte de la pantalla, todavía estoy haciendo una llamada de buffer de intercambio OpenGL 30 veces por segundo, así que realmente importa que haya trabajado duro para dibujar un poco menos ?
(2b) Al dibujar los elementos de la pantalla, hay una cierta cantidad de matemáticas de coma flotante que continúa (por ejemplo, al calcular las coordenadas UV de textura) y algunas matemáticas de precisión (menos) doble. No sé cuán caras son, en cuanto a la batería, en comparación con las operaciones enteras similares. Probablemente podría almacenar en caché muchos de estos valores para no tener que calcularlos repetidamente, si esa fuera una ganancia probable.
(2c) Hago una cierta cantidad de cambio de textura al renderizar la escena. Anteriormente, solo me había preocupado por hacer que el juego fuera demasiado lento (no es así), pero ahora también me pregunto si la reducción del cambio de textura reduciría el uso de la batería.
(2d) No estoy seguro de si esto sería práctico para mí pero: he estado leyendo acerca de los sombreadores y OpenCL, y quiero entender si descargo parte del procesamiento de la CPU a la GPU, ya sea eso probablemente ahorraría batería (además de correr presumiblemente más rápido para las operaciones de tipo vector). ¿O tal vez usaría aún más batería en la GPU que en la CPU?
Me doy cuenta de que puedo reducir los factores que están en juego al deshabilitar ciertas partes del juego y realizar pruebas de batería iterativas (de ahí la parte (1) de la pregunta). Es solo que la desactivación no es trivial y hay suficientes culpables potenciales que pensé que pediría primero consejo general.
Sé que dijiste que es principalmente la versión ios, pero la versión de Android no tiene anuncios? Incluso si no está utilizando la red explícitamente, ¿hay algo que podría estar usándola en segundo plano? – Michael
Además, si está de acuerdo con leer artículos de investigación [esto] (http://research.microsoft.com/en-us/people/mzh/eurosys-2012.pdf) acaba de salir de una conferencia reciente. Es todo Android, pero tal vez esto te dará una idea de cómo otras personas han hecho mediciones de potencia. – Michael
Michael, gracias por la referencia. He leído el documento y lo voy a ver más de cerca. No parece que la herramienta eprof esté disponible para descargar en este punto. (?) Pero tal vez pueda obtener suficientes ideas del periódico para señalarme en la dirección correcta. En respuesta a su otra pregunta, no, no estoy mostrando anuncios. –