12º Android Meetup GDG-SP na Intel

No dia 11/03/2014, aconteceu o 12° Meetup Android do GDG São Paulo no auditório da Intel com a temática de desenvolvimento multiplataforma e análise de desempenho.

Screenshot Last Survivor Android

A palestra principal do Meetup foi uma parceria entre Intel Software e Naked Monkey Games representadas, respectivamente, por George Silva e Pedro Kayatt. Essa palestra dissecou o jogo Last Survivor: Zombie Attack. Baseado em tecnologias Open Source, o Last Survivor é um exemplo muito didático sobre técnicas de desenvolvimento multiplataforma que se beneficia do uso de HTML5 em todo seu processo de produção e deupração até o deploy pra cada plataforma.

HTML5 é um linguagem que tem se desenvolvido muito devido ao largo suporte em diferentes browsers e sistemas operacionais como forma de atingir grande parte do fragmentado mercado móvel. Nesse contexto, nada melhor do que começar o desenvolvimento de jogos móveis a partir de um ambiente desktop, assim, a construção da base e testes de conceito podem ser feitos num ambiente que permite o uso de browsers como o Chrome e o Firefox que contam com um console de depuração e análise de recursos utilizados. Para a execução do código HTML5, o Last Survivor contou com o uso do WAMPSERVER para rodar o jogo como um web service no local host.

A Naked Monkey optou pelo uso de editores como o Visual Studio 2012 e Jetbraind Webstorm para desenvolver o código Javascript e usou o versão HTML5 do Cocos2d com binds Javascript usando o SpiderMonkey para ter o desempenho otimizado para dispositivos móveis. O Cocos2d-HTML5 atua como um motor nativo em dispositivos móveis, assim, além de eliminar a sobrecarga de ter que executar o jogo dentro de um browser, ele ainda traz otimizações em OpenGL específicas para cada plataforma, fazendo com que o HTML5 tenha um bom balanço entre desempenho e utilização de recursos, questão primordial em plataformas móveis. Além das ferramentas anteriores, o Eclipse também foi utilizado para gerar o pacote final, instalação em dispositivos e emuladores, além de receber mensagens de log.

Qual a relação da Intel Software com isso tudo? Primeiro, para ajudar no processo de testes, o uso do emulador Andorid x86 garante um grande aumento de produtividade para empresas como a Naked Monkey e; segundo, como o Cocos2d é um framework Open Source baseado no NDK Android, existe bastante espaço para fazer otimizações no momento da compilação do jogo. O uso de frameworks NDK como o Cocos2d possibilitam o desenvolvimento de aplicações e jogos para diversos sistemas operacionais. No caso do uso do Android NDK, a ferramenta de compilação é o GCC, ferramenta que permite a compilação do código fonte para todas as arquiteturas de processadores de dispositivos Android. Nesse ponto mora o interesse da Intel, pois veremos quão fácil é configurar o NDK Android para que faça uma compilação mais apropriada para os processadores de arquitetura x86.

Utilizando o NDK Android, recomendamos a seguinte configuração no arquivo Application.mk:

APP_ABI := x86 armeabi

Esse arquivo fica no diretório jni dentro da árvore do seu código fonte, no caso do Cocos2d, você pode verificar a seguinte documentação para mais detalhes. Saiba que, por padrão (pelo menos até o release 9c), o NDK Android gera apenas código para arquitura arm, o que não possibilita o melhor desempenho de uma aplicação em dispositivos Android com processador Intel. 

Para verificar a diferença entre a compilação do Last Survivor com a configuração padrão do NDK e utilizar uma otimização para os processadores da Intel, alteramos o arquivo Application.mk do diretório jni, e fomos além, instalamos o Intel C++ Compiler (ICC) e adicionamos algumas configurações específicas do processador Intel Atom que garantem melhorias que vamos apresentar a seguir.

Resumidamente, após a instalação do ICC que já configura o NDK Android para se tornar o compilador padrão para a arquitetura x86, fizemos a adição feita para aproveitar todos os recursos dos processadores Intel Atom também se situa no arquivo Application.mk da seguinte forma:

APP_CFLAGS:=-xATOM_SSSE3 –O3

Para mais detalhes sobre as configurações de compilação, leia o manual inicial do Intel C++ Compiler.

Analisamos a mudança de desempenho do Last Survivor através da ferramenta Graphics Performance Analizers  conectada ao tablet Samsung Galaxy Tab3 de 10 polegadas com processador Intel Atom geração CloverTrail+ para comparar o desempenho do Last Survivor compilado com as configurações padrão do NDK à versão compilada com otimizações para os processadores Intel. Considerando o número médio de frames por segundo numa execução por 10 minutos do jogo que se iniciou na fase 29, chegamos aos seguintes valores:

  • NDK Padrão: 20.26 FPS
  • NDK com ICC: 28.46 FPS

Esses números indicam um desempenho gráfico 40% superior ao utilizarmos o ICC com as otimizações indicadas acima. Os estudos para chegarmos a essa conclusão levaram a várias análises de desempenho do Last Survivor que vão se transformar em um artigo mais detalhado em breve.

Para saber mais sobre os assuntos tratados nesse blog post veja as seguintes referências: