Quantcast
Channel: Android*
Viewing all 473 articles
Browse latest View live

Dynamic Resolution Rendering on OpenGL* ES 2.0

$
0
0

Downloads

Dynamic Resolution Rendering on OpenGL* ES 2.0 [PDF 677KB]
Code Sample: dynamic-resolution.zip [ZIP 4MB]

Pixel Processing is Expensive

When doing performance analysis on games and graphics workloads, processing the fragment (or pixel) shader seems to be a major performance bottleneck. Of course, this makes sense because the fragment shader is where lighting calculations, texture sampling, and post-processing effects are computed. Calculating the final color for each pixel on the screen takes a lot of processing power and time and can be prohibitively expensive. This cost is compounded by the fact that mobile platforms are targeting higher resolutions with each new release. Fragment shader invocations will increase when targeting high resolutions. But high resolutions are not the only issue for mobile developers. Targeting devices with different resolutions is another problem. A quick survey of some devices out on the market at the time of this writing shows the variation in resolutions, even for devices running the same OS.

  • Apple iPhone* 5: 1136 x 640, PowerVR* SGX543MP3
  • Apple iPhone 4S: 960 x 640, PowerVR SGX543MP2
  • Nexus* 4, 1280 x 768, Adreno* 320
  • Galaxy Nexus, 1280 x 720, PowerVR SGX540
  • Motorola RAZR* i, 960 x 540, PowerVR SGX540
  • Samsung Galaxy SIII, 1280 x 720, Adreno 225

Clearly targeting not just the ever increasing resolutions but also targeting different resolutions is an issue that game developers are either already dealing with or they will find unavoidable very soon. The other wrinkle is that even as graphics hardware improves it will inevitably be consumed processing more pixels.

Playing the options game

There are true and tried ways to tackle the varying resolutions in games. The easiest way is to draw the scene to the native resolution. Depending on the style of game, you might be stuck with this approach. Or the fragment shader might not be doing enough work to be a performance bottleneck. If you find yourself in this situation, you're mostly set, but you’ll still have to make sure your art assets work well across the different resolutions you care about.

A second approach is to decide on a fixed resolution regardless of the native resolution. This will give you the opportunity to tune art assets and shaders to the fixed resolution. However, this might not allow the user to have the best experience with your game.

Another common approach is to allow the user to set the desired resolution at start. This approach creates a back buffer using the player-selected resolution and is useful in combating the varying resolutions problem. It allows the player to select a resolution that works best on their device. You will still have to verify that your art assets work well on the list of resolutions you allow the user to select.

A third approach, the one described in this article, is referred to as dynamic resolution rendering. This is a common technique on console games and higher-end PC games. The implementation described in this article is derived from the DirectX* version described in [Binks 2011] and adapted to work on OpenGL* ES 2.0. With dynamic resolution rendering, the back buffer is the size of the native resolution, but the scene is drawn to an off-screen texture with a fixed resolution. As show in Figure 1, the scene is drawn to a portion of the off-screen texture and that texture is sampled to fill the back buffer. The UI elements are drawn at the native resolution.



Figure 1. Dynamic resolution rendering

Drawing to an off-screen texture

The first step is to create the off-screen texture. In OpenGL ES 2.0, you create a GL_FRAMEBUFFER with the desired texture size. Here’s the code to accomplish this:

glGenFramebuffers(1, &(_render_target->frame_buffer));
glGenTextures(1, &(_render_target->texture));
glGenRenderbuffers(1, &(_render_target->depth_buffer));

_render_target->width = width;
_render_target->height = height;

glBindTexture(GL_TEXTURE_2D, _render_target->texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _render_target->width, _render_target->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

glBindRenderbuffer(GL_RENDERBUFFER, _render_target->depth_buffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _render_target->width, _render_target->height);

glBindFramebuffer(GL_FRAMEBUFFER, _render_target->frame_buffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _render_target->texture, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _render_target->depth_buffer);

The call to glTexImage2D creates the texture we’ll be rendering to and the call to glFramebufferTexture2D binds the color texture to the frame buffer. This frame buffer is then bound before rendering the scene as shown here:

// 1. SAVE OUT THE DEFAULT FRAME BUFFER
static GLint default_frame_buffer = 0;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_frame_buffer);

// 2. RENDER TO OFFSCREEN RENDER TARGET
glBindFramebuffer(GL_FRAMEBUFFER, render_target->frame_buffer);
glViewport(0, 0, render_target->width * resolution_factor, render_target->height * resolution_factor);
glClearColor(0.25f, 0.25f, 0.25f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/// DRAW THE SCENE ///
// 3. RESTORE DEFAULT FRAME BUFFER
glBindFramebuffer(GL_FRAMEBUFFER, default_frame_buffer);
glBindTexture(GL_TEXTURE_2D, 0);

// 4. RENDER FULLSCREEN QUAD
glViewport(0, 0, screen_width, screen_height);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Once the scene is rendered, the default frame buffer (back buffer) is bound again. The scene is now saved to the off-screen color texture. The next step is to render a full-screen quad that samples from the off-screen texture. This code shows how to accomplish that:

glUseProgram(fs_quad_shader_program);
glEnableVertexAttribArray( fs_quad_position_attrib );
glEnableVertexAttribArray( fs_quad_texture_attrib );

glBindBuffer(GL_ARRAY_BUFFER, fs_quad_model->positions_buffer);
glVertexAttribPointer(fs_quad_position_attrib, 3, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, fs_quad_model->texcoords_buffer);

const float2 texcoords_array[] =
{
    { resolution_factor, resolution_factor },
    { 0.0f,              resolution_factor },
    { 0.0f,              0.0f              },
    { resolution_factor, 0.0f              },
};

glBufferData(GL_ARRAY_BUFFER, sizeof(float3) * fs_quad_model->num_vertices, texcoords_array, GL_STATIC_DRAW);
glVertexAttribPointer(fs_quad_texture_attrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, fs_quad_model->index_buffer );
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, render_target->texture);
glUniform1i(fs_quad_texture_location, 0);
glDrawElements(GL_TRIANGLES, fs_quad_model->num_indices, GL_UNSIGNED_INT, 0);

The resolution factor

Most of the snippets of code shown above are OpenGL setup code. The interesting sections are the lines that use the variable resolution_factor. This value of resolution_factor determines what percentage of the width and height of the off-screen texture to draw to and then sample from. Setting the section of the off-screen texture draw on is very simple and accomplished by the call to glViewport.

// 1. SAVE OUT THE DEFAULT FRAME BUFFER

// 2. RENDER TO OFFSCREEN RENDER TARGET
glBindFramebuffer(GL_FRAMEBUFFER, render_target->frame_buffer);
glViewport(0, 0, render_target->width * resolution_factor, render_target->height * resolution_factor);

/// DRAW THE SCENE ///

// 3. RESTORE DEFAULT FRAME BUFFER

// 4. RENDER FULLSCREEN QUAD
glViewport(0, 0, screen_width, screen_height);

After binding the frame buffer, the call to glViewport sets the area to draw based on the width and height. This is then reset to the native resolution to draw the full-screen quad and the user interface. To sample only the section of the off-screen texture that has been updated, set the texture coordinates for the vertices of the full-screen quad. The following code does the trick:

glBindBuffer(GL_ARRAY_BUFFER, fs_quad_model->texcoords_buffer);

const float2 texcoords_array[] =
{
    { resolution_factor, resolution_factor },
    { 0.0f,              resolution_factor },
    { 0.0f,              0.0f              },
    { resolution_factor, 0.0f              },
};

glBufferData(GL_ARRAY_BUFFER, sizeof(float3) * fs_quad_model->num_vertices, texcoords_array, GL_STATIC_DRAW);

Benefits of using dynamic resolution

Once the setup is done, the scene will be saved to the off-screen texture and rendered to the screen on a full-screen quad. The actual resolution the scene is rendered to is no longer tied to the native resolution. The amount of pixels processed for the scene can be changed dynamically. Depending on the type and style of game, the resolution can be reduced considerably without much image degradation. Here are a few examples of the sample at various resolution scales:

In this particular case, the resolution can be lowered to somewhere between 75% and 50% before it begins to noticeably degrade the image. The main graphical artifacts that will begin to appear are aliased edges. For this particular case, drawing at 75% of the native resolution is acceptable but, depending on your game, you could go with 25% for an interesting art style.

Dynamic resolution rendering obviously provides a clear way to reduce the number of pixels processed. But, it also provides a way to do more work per pixel. Because you’re no longer rendering at full resolution, the fragment shader invocations has been reduced allowing for more work to be done each time it’s executed. To try to keep the sample code clear and readable, the fragment shader is very simple. As a developer, keeping a balance between performance and image quality is one of the most challenging tasks.

Our implementation



Figure 2. Implementation details

The implementation available for download contains only the Android* project but is laid out in the format presented in Figure 2 to allow for easy extensibility to other mobile operating systems. The core of the project is written in C, targets OpenGL ES 2.0, and requires the Android NDK. Interestingly enough, C is a very good option for cross-platform development. System abstraction refers to file I/O and other functionality that may be OS dependent.

Conclusion

Dynamic resolution rendering is a good option to solve multiple issues related to screen resolutions on mobile devices. It gives developers and users more control over the performance versus image quality ratio. Tuning this ratio will also involve understanding the overhead of implementing dynamic resolution rendering. Creating a render target and switching render targets every frame will add to frame time. Understanding and accounting for this overhead will help you decide whether this technique is appropriate for your game.

References

[Binks 2011] Binks, Doug. “Dynamic Resolution Rendering Article”. http://software.intel.com/en-us/articles/dynamic-resolution-rendering-article

Copyright © 2013 Intel Corporation. All rights reserved.

*Other names and brands may be claimed as the property of others.

OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Silicon Graphics Inc. used by permission by Khronos.

  • Android Code Sample
  • Desarrolladores
  • Android*
  • Android*
  • OpenGL*
  • Desarrollo de juegos
  • Gráficos
  • Phone
  • Dirección URL

  • Game Engines for Android

    $
    0
    0

    With Android continually increasing in popularity it is always interesting to take a look at the latest collection of game engines available for the paltform. I am also further intersted in seeing which game engines include x86 support since the number of Intel x86 based mobile devices continue to increase. There are many game engine choices out there, all with a different set of features, pricing, maturity, etc. After doing some research, I found a wide variety of game engines that can be used for creating games that run on Android* based mobile devices. Some engines provide x86 support, while others can be ported to support x86 devices without too much effort.

    Here is the ever expanding list of game engines I have collected information about. The list includes some features and details about each engine and an example game on Google Play if I could find one.

    • jPCT-AE- http://www.jpct.net/jpct-ae/
      • A java 3D engine optimized for Android.
      • Nice set of features including 3DS, OBJ and other file support, skeletal animations, shader support, texture compression, collision detection, various lighting modes, transparency, fog, and more.
      • An all java game engine that supports x86 Android devices.
      • Free for personal and commercial use.
      • Example: https://play.google.com/store/apps/details?id=mk.grami.max
    • Libgdx - http://code.google.com/p/libgdx/
      • Cross platform (Windows, Linux, OSX and Android) 2D/3D Android engine. Build, run and iterate on the PC before deploying to phone.
      • C++ and Java based engine that easily ports to x86.
      • Box2d physics, TMX tile map, shaders, 2D particle system, sprite support, camera apis, OBJ and MD5 model loaders.
      • Full source code available for free.
      • C++/Java based engine that with a few minor changes I was able to run on x86 Android devices.
      • https://market.android.com/details?id=com.tani.penguinattack
    • Project Anarchy by Havok - http://www.projectanarchy.com/
      • FREE Cross-Platform Engine and Toolkit for Mobile Game Developers
      • Develop and release titles on iOS and Android for free.
      • Extendible C++ plugin based architectur
      • Includes Havok’s Vision Engine together with Havok’s leading Physics, Animation and AI tools
      • Not available as of (6/2013). GDC launch video
    • gameplay – http://gameplay3d.org/index.php
      • Open-source cross-platform 3D engine aimed at the indie game developer ecosystem.
      • Supports BlackBerry 10 and PlayBook, Apple iOS 5+, Android NDK 2.3+, Microsoft Windows 7, Apple MacOS X, Linux
      • Full featured rendering system, node-based scen graph system, particle system, Bullet physics engine, audio and UI systems, etc.
      • Open sourced under the Apache 2.0 license
    • Esenthel Engine - http://www.esenthel.com/?id=overview
      • Modern 2D/3D C++ based game engine (Windows, Mac, Android and iOS)
      • Available for unlimited trial if used non-commercially
      • Scripting and C++ support, multiple renderers, animation system, physics engine, streaming game engine, GUI, etc.
      • DirectX 9,10,11, OpenGL, OpenGL ES 2.0, PhysX 3, PhysX 2, Bullet physics integration
      • Tools include a world editor, model editor, data browser, code editor and more.
      • One-click cross platform publishing
      • Android native x86 support
      • https://play.google.com/store/apps/developer?id=Esenthel
    • App game kit -http://www.appgamekit.com/
      • Cross platform (iOS, Windows, MacOS, Android, BlackBerry)
      • A 2D OpenGL based game engine with Box2D. Include support for Sprites, particles, input APIs, sound and music.
      • Looks like it is a C++ based engine that should easily port to x86 Android devices.
      • Write game code in BASIC or has an available upgrade option for writing native C++ code.
      • Free to try, license purchase required to publish.
      • https://market.android.com/details?id=com.texasoftreloaded.theblackhole
    • Orx - http://orx-project.org/
      • Orx is an open source, portable, lightweight, plugin-based, data-driven and extremely easy to use 2D-oriented game engine.
      • Cross platform (iPhone, iPad, Mac, Windows, Linux, Android) game engine.
      • Camera APIs, animations, sound, sprite rendering and data driven for fast and easy prototyping and development.
      • Free open source.
      • C++ based engine that should easily port to x86 Android devices.
      • Example: https://market.android.com/details?id=lyde.sik.gravity
    • DX Studio - http://www.dxstudio.com/
      • 3D game engine with editor.
      • Android limited features now supported.
      • C++ based engine that should easily port to x86 Android devices.
      • Currently offered for free.
    • SIO2 Engine – http://sio2interactive.com/
      • 2D/3D cross platform (iOS, Android, bada, WebOS, WIN32 ) game engine.
      • Iterate via simulator on PC
      • Features lua support, exporters for various 3d modeling tools, Bullet physics engine, path finding, sound apis, shader support, animation and networking support.
      • C++ based engine that should easily port to x86 Android devices.
      • Various licenses available for purchase, free to trial.
    • Unigine - http://unigine.com/products/unigine/
      • 3D cross platform (Windows, Linux, Max, PS3, iOS, Android)
      • Physics, scripting, etc. Unclear what features are supported for mobile.
      • Evaluation available to companies working on commercial projects. License purchase required.
      • C++ based engine that should easily port to x86 Android devices.
      • Example: http://www.demolicious-game.com/
    • Candroidengine - http://code.google.com/p/candroidengine/
      • 2D Java engine.
      • Sprites, tile animation, background APIs, etc.
      • Dalvik only engine that should work on all architectures.
      • Full source code available for free.
    • Mages Engine - http://code.google.com/p/mages/
      • multiplayer client/server game engine
      • Java engine that should work on all architectures.
      • Full source code available for free.
    • Unreal Development kit - http://udk.com/
      • No Android support in UDK. The full license on Unreal Engine needed for Android support.
      • This is the free edition of Unreal Engine 3 that provides access to the 3D game engine.
      • UDK supports iOS and Windows only.
      • Free to use UDK for noncommercial and educational use


    The great thing about Android on x86 is that it opens a new class of devices for all of the games built on these engines. Unfortunately not all these game engines have support for x86 native binaries but it’s probably just a matter of time. x86 support is available in the latest Android NDK. Porting to x86 for some of these engines may simply be a recompile. We have created a couple of documents to guide you and have forums available to help along the way.


    This post continues to gain in popularity, as does the number of Android game engine choices. I will continue to update this post with the latest information from user comments and news from the web. I hope this list helps as a great starting point for those thinking about writing an Android game. Feel free to post comments about game engines I am missing or any updated information you find.

  • android
  • Android x86
  • game development
  • Game Engines
  • gaming
  • Mobile Development
  • Mobile Games
  • Imagen del icono: 

    Palestras da Intel no FISL 14

    $
    0
    0

    Iremos participar na próxima semana da edição deste ano do Fórum Internacional de Software Livre – FISL 14.

    Teremos um stand no evento e faremos cinco palestras técnicas, apresentando algumas tecnologias da Intel e nossas contribuições para projetos Open Source. As palestras técnicas irão abordar temas como computação paralela e desenvolvimento para dispositivos móveis, e abaixo está um resumo das palestras que iremos apresentar. Clique no título da palestra para adiciona-la a sua agenda.

    03/07:

    Sala 41E - 16hs - Como domar uma fera de 1TFlop que cabe na palma da sua mão

    O Intel Xeon Phi é um coprocessador que equipa o computador mais potente do mundo, o Tianhe-2. Ele traz uma avançada arquitetura que interconecta até 61 núcleos de processamento e 8 GB de memória. Confira como tirar proveito desta façanha tecnológica, utilizando técnicas e ferramentas de paralelismo como as extensões CILK e as bibliotecas Intel TBB.

    Palestrante: Luciano Palma

    04/07:

    Sala P11 - 15hs - Contribuições da Intel para o Open Source

    A Intel tem feito importantes contribuições em diversos projetos Open Source no mundo todo, projetos que cobrem todo o stack de software, desde o kernel Linux até aplicações para sustentar a profusão de serviços na nuvem que temos atualmente, passando por diversos serviços, frameworks e bibliotecas utilizadas amplamente em todo o ecosistema Open Source. Se você utiliza Linux e Open Source, certamente está utilizando diversos softwares que contém contribuições da Intel. Venha saber mais sobre eles.

    Palestrante : Nuno Simões

    05/07:

    Sala 41B - 15hs - Escreva sua app Android sem gastar energia

    As restrições das plataformas móveis, a concorrência e a facilidade dos usuários em recomendar ou criticar as aplicações tornaram o desafio dos desenvolvedores muito maior nas lojas de aplicativos. Além das preocupações com arquitetura e um bom plano de testes, as restrições de bateria e desempenho menor que as plataformas tradicionais exigem mais criatividade para encontrar o melhor balanço entre responsividade e consumo de energia.

    Palestrante: George Silva

    Sala 41B - 17hs - Livros eletrônicos interativos com HTML5 e ePub3

    A utilização conjunta dos padrões HTML5 e ePUB3 permite a criação de livros eletrônicos interativos, que são livros eletrônicos tradicionais com Apps em HTML5 embarcadas, expandindo consideravelmente as possibilidades de uso dos livros e possibilitando o reuso de conteúdos já existentes.

    Palestrante: Jomar Silva

    06/07:

    Sala 40T (Teatro) - 12hs - Desenvolvimento Apps Híbridos para dispositivos móveis com HTML5

    O número crescente de dispositivos móveis e sistemas operacionais que encontramos hoje na indústria, traz aos desenvolvedores um desafio técnico adicional: Como escrever aplicações com o menor custo e maior alcance de audiência ? Apps híbridos com HTML5 possibilitam aos desenvolvedores manter uma única base de código e gerar a partir dela Apps para diversos dispositivos e sistemas operacionais móveis, com maior flexibilidade e menor time to market.

    Palestrante: Jomar Silva

    Neste ano teremos uma surpresa especial para quem passar pelo stand da Intel.

    Algumas palestras serão transmitidas ao vivo, portanto fique ligado no site do evento para os links para a transmissão.

    Esperamos encontrar vocês por lá !

    Imagen del icono: 

    Adjuntos: 

    http://software.intel.com/sites/default/files/blog/394213/bonecos.jpg

    Разработка и оптимизация приложений Android* для платформы Intel® Atom™

    $
    0
    0

    Аннотация

    В этой статье подробно описываются способы разработки и портирования приложений Android для платформы Intel Atom, а также рассматриваются наиболее применяемые способы разработки приложений с помощью Android Native Development Kit (NDK) и оптимизации их производительности.

    1. Классификация приложений Android

    Приложения Android можно разделить на два типа, как показано на Рис. 1.

    • Приложения Dalvik включают код Java* и используют только официальные API из пакета SDK, а также необходимые файлы ресурсов, например XML- и PNG-файлы. Такие приложения компилируются в APK-файлы.
    • Приложения Android NDK, содержащие код Java и файлы ресурсов, а также исходный код на языке C/C++ и (иногда) код на ассемблере. Весь собственный код компилируется в библиотеку динамической компоновки (SO-файл), а затем вызывается кодом Java в основной программе с помощью механизма JNI.


    Рисунок 1:Два типа приложений Android

    2. Android Native Development Kit

    2.1 Введение

    Android Native Development Kit (NDK) — это мощное средство для разработки приложений Android, обладающее следующими возможностями:

    • Создание важных с точки зрения производительности частей приложений на собственном коде. При использовании кода Java исходный код необходимо интерпретировать на машинный язык с помощью виртуальной машины. Напротив, встроенный код компилируется и оптимизируется в двоичный код непосредственно перед выполнением. Используя собственный код нужным образом, можно создавать высокопроизводительный код в составе приложений. например, для аппаратного кодирования и декодирования видео, обработки графики и вычислений.
    • Использование существующего собственного кода. Код на языке C/C++ можно скомпилировать в динамическую библиотеку, которую код Java может вызвать с помощью механизма JNI.

    2.2 Описание средств

    При разработке можно использовать Intel® Hardware Execution Manager (Intel® HAXM) для повышения производительности эмулятора Android. HAXM — это ядро аппаратной виртуализации (гипервизор), основанное на технологии виртуализации Intel (Intel® VT) и ускоряющее эмуляцию приложений Android на основном компьютере. В сочетании с образами эмулятора Android x86, предоставляемыми корпорацией Intel, и официальным выпуском Android SDK Manager решение Intel HAXM обеспечивает более быструю эмуляцию Android в системах с поддержкой Intel VT. Дополнительные сведения о HAXM см. по адресу: http://software.intel.com.

    2.3 Установка HAXM

    Установить HAXM можно либо с помощью Android SDK Manager (рекомендуется), либо вручную, загрузив программу установки с веб-сайта Intel. Для автоматического обновления используйте установку с помощью Android SDK Manager, как показано на Рис. 2. [1]


    Рисунок 2:Установка Intel HAXM с помощью Android SDK Manager

    Также можно загрузить соответствующий установочный пакет с сайта http://www.intel.com/software/androidна базовую платформу, а затем следовать пошаговым инструкциям для установки.

    2.3.1 Настройте HAXM

    При запуске HAXM требуется системный образ Android x86 корпорации Intel. Загрузить системный образ можно с помощью Android SDK Manager или вручную с сайта Intel® Developer Zone.

    После успешной установки образы эмулятора автоматически выполняются с помощью двоичного файла emulator-x86 в составе Android SDK. Работа эмулятора Android ускоряется с помощью Intel VT, что ускоряет процесс разработки.

    3. Разработка и преобразование приложений NDK для архитектуры Intel Atom

    3.1 Разработка приложений NDK Intel Atom

    После успешной установки NDK уделите несколько минут ознакомлению с документами, находящимися в папке /docs/, особенно OVERVIEW.html и CPU-X86.html. Это полезно для понимания механизма NDK и принципов его использования.

    Разработку приложений NDK можно разделить на 5 этапов, как показано на Рис. 3:


    Рисунок 3:Процесс разработки приложений NDK

    Для иллюстрации этих 5 этапов используется демонстрационное приложение hello-jni. Демонстрационное приложение находится в папке NDK Root\samples\hello-jni [5]. Демонстрационное приложение hello-jni — это простое приложение в составе NDK. Это приложение получает строку из собственного метода в общей библиотеке и использует эту строку в пользовательском интерфейсе приложения.

    3.1.1. Создайте собственный код

    Создайте новый проект Android и поместите собственный исходный код в папку /jni/. Содержимое проекта показано на рис. 4. Эта демонстрация включает простую функцию в собственном коде с именем Java_com_example_hellojni_HelloJni_stringFromJNI(). Как показано в исходном коде, эта функция возвращает строку из JNI.


    Рисунок 4:Создание собственного кода

    3.1.2 Создайте файл MakeFile Android.mk

    Приложения NDK по умолчанию предназначены для платформы ARM. Для сборки приложений NDK для платформы Intel Atom необходимо добавить строку APP_ABI := x86 в файл MakeFile.


    Рисунок 5:Создание файла MakeFile

    3.1.3 Скомпилируйте собственный код

    Соберите собственный код, выполнив сценарий ndk-build в папке проекта. Сценарий находится в папке NDK верхнего уровня. Результат показан на Рис. 6.


    Рисунок 6:Скомпилированный собственный код

    Средства сборки автоматически копируют очищенные общие библиотеки в нужное расположение в папке проекта приложения.

    3.1.4 Вызов собственного кода из Java

    После успешного развертывания общей библиотеки можно вызвать функцию со стороны Java. Код показан на рис. 7. В коде Java создается вызов собственной функции stringFromJNI(), которая загружает общую библиотеку с помощью System.loadlibrary().


    Рисунок 7:Вызов собственного кода из Java

    3.1.5 Отладка с помощью GDB

    Для отладки приложения NDK с помощью GDB необходимо выполнение следующих условий:

    • Приложение NDK собрано с помощью ndk-build
    • Приложению NDK установлен атрибут debuggable в Android.manifest
    • Приложение NDK выполняется под управлением Android 2.2 (или более поздней версии)
    • Запущено только одно устройство назначения
    • Папка, в которой находится adb, добавлена в PATH

    Используйте команду ndk-gdb для отладки приложения. Можно либо задать точку останова, либо выполнять пошаговую отладку, чтобы отслеживать изменения значения переменной, как показано на Рис. 8.


    Рисунок 8:Отладка приложения NDK с помощью GDB

    3.2 Портирование существующих приложений NDK на устройства с Intel Atom

    В этом разделе предполагается, что у нас есть приложение Android для платформы ARM, и перед его развертыванием на платформе Intel Atom требуется его преобразовать.

    Процесс портирования приложений Android на платформу Intel Atom аналогичен процессу разработки. Действия показаны на Рис. 9.


    Рисунок 9:Преобразование приложений Android для платформы Intel Atom

    3.2.1 Преобразование приложений Dalvik

    Приложения Dalvik могут выполняться на устройствах с процессорами Intel Atom напрямую. Пользовательский интерфейс необходимо адаптировать к устройству назначения. У устройств с экраном высокого разрешения, например у планшетов с экраном разрешением 1280*800 или выше, выделяемая по умолчанию память может не соответствовать требованиям приложения, из-за чего может оказаться невозможно запустить это приложение. Для устройств с экраном высокого разрешения рекомендуется увеличить объем выделяемой по умолчанию памяти.

    3.2.2 Портирование приложений Android NDK

    Портирование приложений NDK немного сложнее, чем для приложений Dalvik. Все приложения NDK можно разделить на три типа на основе следующих свойств в собственном коде:

    • Приложение включает только код C/C++, не связанный с оборудованием
    • Приложение использует стороннюю библиотеку динамической компоновки
    • Приложение использует код ассемблера, тесно связанный с платформами архитектуры, отличной от IA

    Только код C/C++, не связанный с оборудованием

    1. Перекомпилируйте код, чтобы приложение успешно выполнялось на платформе Intel Atom.
    2. Откройте проект NDK, найдите файл Android.mk, добавьте строку APP_ABI := armeabi armeabi-v7a x86в файл Android.mk и заново скомпилируйте код с помощью сценария ndk-build.
    3. Если файл Android.mk не найден, используйте команду ndk-build APP_ABI="armeabi armeabi-v7a x86"для сборки проекта.
    4. Заново упакуйте приложение для поддерживаемых платформ x86.

    Если собственный код использует стороннюю библиотеку динамической компоновки, общую библиотеку необходимо перекомпилировать в версию x86 для платформы Intel Atom.

    Если собственный код включает код ассемблера, тесно связанный с платформами архитектуры, отличной от IA, необходимо переписать код на ассемблере для IA или на C/C++.

    4. Рекомендуемые способы разработки собственного кода

    4.1 Принудительное выравнивание памяти

    Из-за различий между архитектурами, платформами и компиляторами размер данных одних и тех же структур данных может различаться на разных платформах. Без принудительного выравнивания памяти возможны ошибки загрузки или несовпадение объема данных. [2]

    В следующем примере кода показана разница в размере одной и той же структуре данных на разных платформах:

    struct TestStruct {
    int mVar1;
    long long mVar2;
    int mVar3;
    };

    Это простая структура с тремя переменными: mVar1, mVar2, и mVar3.

    mVar1 — целочисленное значение, оно будет занимать 4 байта
    mVar2 — длинное целое, оно будет занимать 8 байтbr /> mVar3 — также целочисленное и будет занимать 4 байта.

    Сколько места потребуется на платформах ARM и Intel Atom?

    Объем скомпилированных данных для платформ ARM и Intel Atom (с использованием компилятора по умолчанию) показан на Рис. 10. На платформе ARM автоматически применяется двойное выравнивание malign, и переменные занимают 24 байта, тогда как на платформе x86 они занимают 16 байт.


    Рисунок 10:Выделение памяти при компиляции с флагами по умолчанию

    8-байтовая (64-разрядная) переменная mVar2 дает другой результат для TestStruct, поскольку в ARM требуется 8-байтовое выравнивание для 64-разрядных переменных, таких как mVar2. В большинстве случаев это не приводит к неполадкам, поскольку при сборке приложения для платформы x86 вместо ARM требуется полная повторная сборка.

    Тем не менее, если в приложении выполняется сериализация классов или структур, возможно несоответствие размеров. Например, мы создаем файл в приложении ARM; приложение записывает тестовую структуру в файл. Если потом загрузить данные из этого файла на платформе x86, размер класса в приложении будет отличаться от размера класса в файле. Аналогичные неполадки выравнивания памяти могут возникать в сетевом трафике, ожидающем определенной компоновки памяти.

    Параметр компилятора GCC -malign-double обеспечивает одинаковое выравнивание памяти на платформах x86 и ARM.


    Рисунок 11:Выделение памяти при добавлении флагов -malign-double

    4.2 Портирование инструкций NEON* в SSE [3]

    4.2.1 NEON

    Технология ARM NEON* используется главным образом в мультимедиа, например в смартфонах и приложениях для телевидения высокой четкости. Согласно документации ARM*, это технология на базе 128-разрядной системы SIMD, представляющая собой расширение процессоров ARM* серии Cortex*–A. Это расширение обеспечивает по крайней мере трехкратное повышение производительности по сравнению с архитектурой ARM* v5 и двукратное — по сравнению с ARM* v6. Дополнительные сведения о технологии NEON см. по адресу: http://www.arm.com/products/processors/technologies/neon.php.

    4.2.2 SSE: аналог Intel

    SSE — это потоковое расширение SIMD для архитектуры Intel IA. Процессоры Intel Atom в настоящее время поддерживают набор расширений SSSE3 и более ранние версии, но пока не поддерживают SSE4.x. SSE — это 128-разрядная система, обрабатывающая упаковку данных с плавающей запятой. Началом данной модели выполнения следует считать технологию MMX. SSx — новое поколение, заменившее MMX. Дополнительные сведения см. в разделе "Volume 1: Basic Architecture"в Intel 64 and IA-32 Architectures Software Developer’s Manuals. Описание SSE, приведенное в разделе 5.5, содержит инструкции по SSE, SSE2, SSE3 и SSSE3. Эти операции с данными перемещают упакованные значения с плавающей запятой с заданной точностью между регистрами XMM или между этими регистрами и памятью. Регистры XMM служат в качестве замены регистров MMX.

    4.2.3 Из NEON в SSE на уровне ассемблера

    В руководстве для разработчиков содержатся ссылки на все команды SSE(x), но разработчикам также рекомендуется ознакомиться с различными командами SSE на уровне ассемблера, доступными по этой ссылке: http://neilkemp.us/src/sse_tutorial/sse_tutorial.html. Для доступа к базовой информации и к образцам кода используйте оглавление.

    Аналогичным образом, следующее руководство ARM содержит сведения о NEON и небольшие образцы кода ассемблера в разделе 1.4 ”Developing for NEON”: http://infocenter.arm.com/help/topic/com.arm.doc.dht0002a/DHT0002A_introducing_neon.pdf.

    Основные различия при сравнении ассемблерного кода NEON и SSE:

    • • Порядок следования байтов. Процессоры Intel поддерживают только прямой порядок (от младшего к старшему), а процессоры ARM* поддерживают как прямой, так и обратный порядок (от старшего к младшему). В приведенных примерах в коде ARM* используется прямой порядок байтов, как и необходимо для платформы Intel. Примечание. При компиляции для ARM подразумевается использование определенных флагов. Например, при компиляции для ARM* с помощью GCC* используются флаги –mlittle-endian и –mbig-endian. Дополнительные сведения см. по адресу http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html.
    • Степень детализации. В приведенных примерах простого ассемблерного кода сравним инструкцию ADDPS в SSE (Intel) с инструкцией VADD.ix в NEON (например, при x = 8 или 16). В последнем случае уровень детализации обрабатываемых данных более высокий.

    Примечание. Разумеется, приведенный список различий не является исчерпывающим. Существуют и другие различия между NEON и SSE.

    4.2.4 Из NEON в SSE на уровне C/C++

    При преобразовании кода C/C++ NEON в SSE могут возникать самые разные проблемы с API. Всегда помните: предполагается, что встроенный код сборки не используется, а используется только настоящий код C/C++. Инструкции NEON также включают некоторые собственные библиотеки C. Эти инструкции представляют собой код C, но их невозможно выполнить на платформе Intel, их необходимо переписывать.

    5. Оптимизация производительности приложений

    5.1 Настройка производительности

    В процессе кодирования используйте следующие методы оптимизации производительности приложения на платформе Intel Atom.

    5.1.1 Используйте встроенные функции

    Встроенными лучше всего делать небольшие функции, такие как, например, функция доступа к частным элементам данных. При использовании коротких функций увеличиваются издержки на их вызовы. Для длинных функций последовательность вызова и возврата занимает соответственно меньше времени, поэтому встраивание обеспечит меньший выигрыш. [4]

    Встраивание позволяет сократить издержки в следующих случаях:

    • Вызовы функций (включая передачу параметров и размещение адреса объектов в стеке)
    • Сохранение фрейма стека вызывающей стороны
    • Настройка нового стека
    • Передача возвращенного значения
    • Восстановление прежнего фрейма стека
    • Возврат

    5.1.2 Используйте Float вместо Double

    В большинстве случаев использование значений типа Float вместо Double ускоряет процесс вычисления данных и позволяет снизить нагрузку на память устройств с процессором Intel Atom.

    5.1.3 Многопоточный код

    Многопоточное кодирование позволяет использовать функцию гиперпоточности процессоров Intel Atom для повышения производительности всей системы и ускорения обработки данных. Дополнительные сведения о многопоточности см. по адресу: http://www.intel.com/content/www/us/en/architecture-and-technology/hyper-threading/hyper-threading-technology.html.

    5.2 Создание высокопроизводительных приложений с помощью установки различных флагов компилятора

    Сборка собственного кода в приложениях Android выполняется с помощью GCC. При компиляции на платформе Intel Atom рекомендуется добавить следующие флаги:

    -march=atom
    -msse4
    -mavx
    -maes

    Дополнительные сведения о параметрах компилятора см. в разделе: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

    6. Заключение

    В этом документе описывается разработка и оптимизация приложений для платформ Intel Atom, а также разработка и портирование приложений NDK.

    Основные рассмотренные вопросы:

    • В большинстве случаев приложения Android можно запускать на платформе Intel Atom напрямую. Для приложений NDK необходимо перекомпилировать собственный код. Если приложение содержит код ассемблера, эту часть кода необходимо переписать.
    • Для повышения производительности приложений Android используйте функции архитектуры Intel (IA).
    • Добавьте флаги компиляции для данной платформы, чтобы повысить эффективность кода сборки GCC.
  • Desarrolladores
  • Desarrolladores para Intel AppUp®
  • Android*
  • Android*
  • Procesadores Intel® Atom™
  • Phone
  • Tablet
  • Dirección URL
  • Разработка и портирование приложений Android* на основе NDK на архитектуру IA

    $
    0
    0

    Цель

    Эта статья представляет собой инструкцию базового уровня по созданию собственных приложений Android* (на базе NDK) для устройств с архитектурой Intel® (IA). Также мы рассмотрим вопрос портирования на платформу IA приложений Android NDK, созданных для устройств с другой архитектурой.

    Введение

    Приложения Android* могут включать собственный код, созданный с помощью пакета Native Development Kit (NDK). Этот пакет дает разработчикам возможность повторного использования устаревшего кода, создавать код для низкоуровневого взаимодействия с оборудованием, а также реализовывать функции, которые невозможно или затруднительно создавать другими способами.

    Эта статья содержит базовые сведения о создании приложений на базе NDK для архитектуры Intel, а также простые примеры портирования приложений на базе NDK на устройства с архитектурой Intel. Для демонстрации мы будем использовать пошаговый сценарий разработки простого приложения.

    Мы исходим из того, что вы уже установили среду разработки Android, включая Android SDK и NDK, а также настроили emulator-x86 для тестирования приложений. Дополнительные сведения см. в разделе сообщества Android на веб-сайте Intel. Для простоты среды разработки мы по большей части используем средства Linux* для командной строки.

    Создание приложения Android на базе NDK для устройств с архитектурой IA — пошаговая инструкция для простого приложения

    Предположим, что у нас есть код, использующий язык C и ассемблер для анализа CPUID (дополнительные сведения о CPUID см. по адресу http://en.wikipedia.org/wiki/CPUID*). Ниже приведен исходный код нашего приложения на языке C: файла cupid.c (приводится исключительно для демонстрации).

    Нам нужно вызвать cupid_parse из приложения Android (только для демонстрационных целей — функция cupid_parse предполагает наличие заранее выделенного буфера) и отобразить выходные данные в приложении.

    Ниже приведена пошаговая инструкция по созданию приложения Android от начала до конца с использованием указанного выше собственного кода.

    1. Создание проекта Android по умолчанию

    Пакет Android SDK включает средства командной строки для создания структуры проекта по умолчанию для типового простого приложения. Сначала мы создадим проект по умолчанию, а затем изменим исходный код Java, чтобы добавить вызовы JNI и нативный код.

    На приведенном выше снимке экрана мы сначала создали каталог labs/lab2, а затем использовали средство командной строки android для создания проекта по умолчанию. Мы указали android-15 в качестве уровня API и назвали наше приложение CPUIdApp с пакетом com.example.cpuid.

    Затем мы использовали средство командной строки ant для сборки проекта в режиме отладки и установили его с помощью adb (можно выполнить и переустановку, если приложение уже существует на целевом устройстве или эмуляторе). Мы исходим из того, что на компьютере запущен эмулятор (или к компьютеру подключено целевое устройство), и это единственное перечисленное устройство в выходных данных команды adb devices.

    Ниже приведен снимок экрана эмулятора Android x86 с ICS после выполнения описанного выше процесса.

    Теперь можно изменить приложение для использования нативного кода.

    2. Вызов нативного кода из Java

    В проекте Android по умолчанию создается исходный код Java для типичного проекта вида hello world с заданным пространством имен пакета (например, com.example.cpuid). На приведенном ниже снимке экрана показан исходный код, созданный для основного файла исходного кода Java.

    Чтобы использовать собственный код C/C++ в нашем файле Java необходимо сначала объявить вызов JNI и загрузить собственную библиотеку, как показано в выделенном желтом поле на приведенном ниже снимке экрана.

    Собственный код возвращает строку java, которую мы можем использовать в любом месте кода java. Как показано на снимке экрана, приведенном выше, мы изменили TextView для отображения строки, которую мы получаем из вызова собственного кода. Это выделено красным на рисунке.

    Это очень простой способ объявления и использования собственных вызовов JNI в коде Java приложений Android. Затем мы будем использовать средство «javah» для создания заглушек заголовков JNI для собственного кода, добавления или изменения нативного кода для соответствия собственным заголовкам JNI.

    3. Использование средства javah для создания заглушек заголовков JNI для собственного кода

    Теперь нам нужно изменить собственный код так, чтобы он соответствовал спецификации вызовов JNI. Средство javah помогает автоматически создать нужные заглушки заголовков JNI на основе файлов исходного кода Java. Средству javah требуется скомпилированный файл класса Java для создания заголовков. Поэтому мы используем средство ant, чтобы быстро создать файлы классов Java, как показано на приведенном ниже снимке экрана (команда ant debug).

    Используйте средство javah для создания заголовка JNI, как показано на снимке экрана (второе выделенное желтым поле). Будет создан каталог jni и заглушка заголовка на основе класса Java. На приведенном ниже снимке экрана показа созданная заглушка заголовка JNI.

    Создайте соответствующий файл исходного кода C (com_example_cpuid_CPUIdApp.c) для заголовка, созданного выше. Ниже приведен исходный код:

    Мы вызываем собственный код cupid_parse и возвращаем обработанный буфер в виде строки JNI. Теперь все готово к компиляции собственного кода с помощью NDK x86.

    4. Сборка собственного кода с NDK для x86

    Дополнительные сведения об установке и использовании NDK для IA см. в разделе сообщества Android на сайте Intel /en-us/articles/ndk-for-ia).

    Пакет Android NDK использует системы сборки, для которой требуется настраиваемый файл makefile Android.mk, который должен находиться в папке jni проекта для компиляции собственного кода. В файле Android.mk указываются все файлы собственного исходного кода C/C++ для компиляции, заголовки и тип сборки (например: shared_library).

    Ниже приведен код файла makefile Android для нашего проекта (jni/Android.mk)

    Это простой сценарий с двумя файлами исходного кода на языке C со сборкой общей библиотеки.

    Теперь мы можем выполнить команду ndk-build APP_ABI=x86 для сборки собственного кода и создать общую библиотеку. Система сборки Android также предоставляет дополнительный необязательный файл Application.mk, с помощью которого можно указать дополнительные параметры конфигурации. Например, мы можем указать все поддерживаемые ABI в файле Application.mk. Команда ndk-build создает собственные общие библиотеки для всех архитектур.

    На приведенном выше снимке экрана показана успешная компиляция собственного кода для x86, а также создание и установка общей библиотеки. Теперь все готово к сборке нашего приложения Android и его установки и запуска на эмуляторе x86 или устройстве назначения.

    5. Пересборка, установка и запуск приложения Android NDK для IA

    Мы можем использовать команду ant debug clean, чтобы очистить старые файлы сборки, а повторная команда ant debug заново запустит полную пересборку проекта Android. Используйте adb для переустановки приложения на устройстве назначения или эмуляторе x86, как показано на снимке экрана ниже.

    На приведенном ниже снимке экрана показан значок приложения в эмуляторе x86 и результат выполнения приложения в эмуляторе x86.

    Мы успешно собрали приложение Android на базе NDK.

    Использование набора инструментов NDK x86 для портирования существующих приложений на базе NDK на устройства с архитектурой IA

    Приложения Android с нативным кодом, как правило, имеют стандартную структуру проекта с папкой jni, содержащей собственный исходный код, и соответствующими файлам сборки Android.mk/Application.mk. В предыдущем разделе мы рассмотрели простой пример с собственным исходным кодом и соответствующим файлом Android.mk.

    Пакет Android NDK позволяет сразу указать все целевые ABI в файле Application.mk и автоматически создать собственные общие библиотеки для всех целевых платформ. Система сборки Android автоматически упакует все целевые собственные библиотеки внутри APK, а во время установки диспетчер пакетов Android установит только ту собственную библиотеку, которая соответствует архитектуре платформы назначения.

    Можно вызвать ndk-build или указать библиотеку в Application.mk.

    APP_ABI := all

    ИЛИ

    APP_ABI := armeabi armeabi-v7a x86

    Дополнительные сведения см. по адресу http://developer.android.com/sdk/ndk/index.html.

    Для портрования существующего приложения Android с нативным кодом, которое в настоящий момент не предназначено для архитектуры x86, применяется процесс изменения приложения для поддержки IA. В большинстве случаев этот процесс довольно прост (как мы рассмотрели выше), если приложение не использует специализированные конструкции или ассемблер исключительно для одной определенной архитектуры. Возможны другие проблемы, например, выравнивание памяти или использование инструкций, применяемых для определенных платформ. Дополнительные сведения см. по адресу: /en-us/articles/ndk-android-application-porting-methodologies.

    Выводы

    В этой статье мы рассмотрели создание и портирование приложений Android на базе NDK на архитектуру IA. Мы рассмотрели пошаговый процесс создания приложения на базе NDK для IA от начала до конца. Также мы рассмотрели простой процесс портирования существующих приложений Android на базе NDK на архитектуру IA с помощью средств пакета NDK.

  • Desarrolladores
  • Desarrolladores para Intel AppUp®
  • Android*
  • Android*
  • Migración
  • Phone
  • Tablet
  • Dirección URL
  • Рекомендации по установке образа Intel® Atom x86 для Android* Jelly Bean 4.2

    $
    0
    0

    Введение

    Эти рекомендации помогут вам установить образ Intel® Atom x86 для Android* Jelly Bean, что может пригодиться при разработке на платформе Intel x86.

    Предварительные требования

    Чтобы установить образ для эмулятора Android x86, требуется пакет Android SDK. Инструкции по установке и настройке пакета Android SDK см. на сайте для разработчиков Android (http://developer.android.com/sdk/).

    Замечание: Для ускорения образа x86 для Android можно использовать Intel Hardware Accelerated Execution Manager (HAXM). Дополнительные сведения см. в разделе "Оптимизация"в этом документе.

    Известные проблемы:

    • Неполадки камеры: сбой камеры при записи видео в системном образе Android 4.2. Эта проблема описана в следующих статьях: http://code.google.com/p/android/issues/detail?id=41227
    • Неполадки браузера: на компьютерах с 32-разрядной Windows Vista браузер вызывает произвольные аварийные сбои эмулятора. Эта проблема описана в следующих статьях: http://code.google.com/p/android/issues/detail?id=42733
    • Неполадки стабильности: возможен аварийный сбой эмулятора, если значение ОЗУ устройства в AVD равно 1024. В настоящее время Intel ведет дополнительное изучение этой неполадки.

    Установка

    Загрузка с помощью Android SDK Manager

    1. Запустите Android SDK Manager.
    2. В разделе Android 4.2 (API 17) выберите Intel x86 Atom System Image:

    3. Затем нажмите кнопку Install Package.
    4. Прочитайте лицензионное соглашение с корпорацией Intel. Если вы принимаете условия соглашения, выберите Accept и нажмите кнопку Install.
    5. Диспетчер SDK Manager загрузит и извлечет системный образ в нужное расположение в папке Android SDK.

    Использование системного образа

    1. Запустите Android AVD Manager и создайте новое виртуальное устройство AVD, выбрав для параметра Target значение Android 4.2 – API Level 17, а для параметра CPU/ABI — значение Intel Atom (x86).

      Образ Intel Atom x86 для Android Jelly Bean может использовать аппаратные возможности графического процессора (GPU) для повышения производительности в играх, программах с высокой графической нагрузкой и при обработке элементов пользовательского интерфейса. Для наивысшей производительности установите флажок Use Host GPU при создании образа.

      Примечание:Функциональность и производительность GPU зависит от установленного в компьютере видеоадаптера и графических драйверов. Ускорение GPU необходимо включать для каждого AVD.

      Примечание:Если значение Intel Atom (x86) параметра CPU/ABI недоступно, проверьте правильность установки системного образа.

    2. Нажмите кнопку Create AVD.
    3. Виртуальное устройство AVD успешно создано и готово к использованию:

    Оптимизация

    Ускорение CPU

    Производительность образа Intel Atom x86 для Android Jelly Bean можно повысить с помощью аппаратной виртуализации на основе технологии Intel VT-x.

    Если на вашем компьютере установлен процессор Intel с поддержкой VT-x, рекомендуется использовать Intel Hardware Acceleration Execution Manager (HAXM) вместе с этим системным образом. Дополнительные сведения о Intel HAXM см. по адресу http://www.intel.com/software/android.

    Примечание:Решение Intel HAXM поддерживает только операционные системы Windows и OS X. Для серверов на базе Linux повышения производительности эмуляторы можно обеспечить с помощью виртуальной машины на базе ядра (KVM). Сведения об установке и настройке KVM в ОС Ubuntu см. в этом руководстве: https://help.ubuntu.com/community/KVM/Installation

    Copyright (C) 2013 Intel Corporation. All rights reserved.
    Intel, Atom, and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.
    All products, computer systems, dates, and figures specified are preliminary based on current expectations, and are subject to change without notice.
    * Другие имена и торговые марки могут быть собственностью третьих лиц.

  • Desarrolladores
  • Android*
  • Android*
  • Herramientas para desarrollo de Android*
  • Intel Hardware Accelerated Execution Manager (HAXM)
  • Procesadores Intel® Atom™
  • Phone
  • Dirección URL
  • Реализация сенсорного интерфейса в новых и существующих играх

    $
    0
    0

    Распространение устройств Android* открыло новую эру в области разработки игр: в игры стало возможным привнести «волшебство» сенсорного управления, но при этом создателям игр пришлось столкнуться с целым рядом новых проблем. Во всей истории видеоигр разработчикам приходилось адаптировать свои игры для мышей, клавиатур, джойстиков, других игровых контроллеров. Сенсорные экраны — это еще один интерфейс управления, реализация которого сопряжена с дополнительными затратами на разработку и контроль качества, особенно для существующих игр. Далее мы рассмотрим некоторые часто встречающиеся проблемы и возможные способы их решения.

    Основы сенсорного управления

    Начиная работу в этой области, важно оценить, какими преимуществами обладает данный интерфейс, и как наиболее эффективно использовать эти преимущества. Некоторые игры проще приспособить к сенсорному управлению, другие — сложнее, но даже в самых сложных играх, плохо пригодных для сенсорного управления, адаптация может быть проведена как удачно, так и неудачно. Итак, если оставить за кадром огромную рыночную долю устройств Android с сенсорным экраном, в чем заключается преимущество использования таких устройств?

    Самая простая иллюстрация: представьте себе, с каким удовольствием ребенок рисует пальцами. Все люди с детства привычны к сенсорному управлению: на интуитивном уровне все дотрагиваются до предметов, передвигают их пальцами. Мы видим, как интерфейс меняется в результате наших действий и реагирует на них. Мы можем мгновенно зафиксировать взаимосвязь между нашими действиями и результатом на экране. Иллюзия тактильной обратной связи — это важное преимущество касания. Любая игра с самого начала должна дать пользователям привыкнуть к новым ощущениям, ощутить интуитивное чувство движения, оценить достоинства реакции механики интерфейса. Правильно созданный сенсорный интерфейс сам по себе может стать увлекательной игрой или важным ее компонентом.

    Механика интерфейса должна быть привычной, естественной и плавной. При этом важно добиться достаточно высокой частоты кадров; более простой, но быстро реагирующий на действия пользователя интерфейс предпочтительнее, чем очень красивый, но запаздывающий интерфейс. Без сенсорного экрана интерфейс меню с частотой 15 кадров в секунду не менее удобен, чем при частоте 30 кадров в секунду. Но при использовании сенсорного экрана низкая частота кадров делает работу с интерфейсом психологически некомфортной, особенно при прокрутке и движениях, где требуется плавность. Кроме того, на большинстве устройств со снижением частоты кадров снижается и способность записывать касания сенсорного экрана, что приводит к ошибкам ввода и дополнительно раздражает пользователей. Но даже и без этого достаточно одного лишь психологического эффекта, чтобы отвратить пользователей от такого интерфейса; недостаточно плавный интерфейс может не сильно отставать по фактическому удобству использования, но привлекательностьсенсорного интерфейса будет существенно ниже. Это недостаток интуитивного принципа работы с сенсорными экранами: пользователь не только сразу же ожидает определенной реакции интерфейса, но и раздражается, если его ожидания не оправдываются.

    На практике, при разработке игр непросто гарантировать определенную частоту кадров, тем более что производительность различных устройств Android может существенно различаться. Для настройки графических параметров игры в соответствии с производительностью устройства можно использовать определение семейства набора микросхем при первом запуске игры. Также можно упростить области интерфейса, в которых часто используется сенсорная прокрутка и аналогичные действия. Например, если заменить трехмерный, обновляемый в реальном времени фон меню на высококачественный снимок экрана, интерфейс будет работать значительно быстрее без существенного снижения наглядного качества.

    Основы проектирования

    При проектировании интерфейсов следует учитывать не только общие принципы психологии пользователей, но и целый ряд более конкретных вопросов. В частности, в каких именно местах пользователь будет касаться экрана, и каким образом будут использоваться эти точки касания? Сколько пальцев одновременно будет использовать игрок? Использовать более двух касаний одновременно нежелательно, если предполагается, что пользователь в ходе игры будет удерживать устройство в руках. В некоторых играх, когда два пользователя играют с одним и тем же планшетом, может потребоваться обработка множества точек касания одновременно, а многие наиболее мощные устройства поддерживают десять или более точек одновременного касания. Тем не менее, некоторые устройства с мультисенсорным вводом поддерживают касание лишь в двух точках одновременно, что может вызвать трудности, если пользователю нужно быстро переместить одну из двух активных точек касания в новое место: если устройство не обнаружит «отпускание» второго касания до нового касания в другом месте, новое касание может быть не зарегистрировано. Определить, поддерживает ли устройство мультисенсорный ввод, нетрудно. Определить поддержку более чем двух одновременных касаний устройствами Android в данный момент весьма непросто, поскольку нужные данные не раскрываются манифестом android.hardware.touchscreen. Надеюсь, со временем это будет доработано.

    Если наша игра предназначена не для одного определенного устройства, а для нескольких устройств, следует уделить большое внимание размеру и соотношению сторон экрана. Интерфейс, вполне удобный на экране с соотношением сторон 4:3, может оказаться неудобным на устройстве с экраном 16:9. Может быть непросто приспособить один и тот же интерфейс к экранам всех размеров, от 4 до 12 дюймов. Разные пользователи могут держать устройства в руках по-разному; большие пальцы могут естественным образом касаться экрана в разных местах. Места сенсорного управления, удобные для планшетов, могут быть неудобными для телефонов (или наоборот). При этом руки пользователя ни в коем случае не должны загораживать основной экран игрового процесса.

    Перечисленные проблемы можно решить только путем тестирования и ступенчатой разработки; можно использовать ряд приемов, чтобы настроить интерфейс согласно потребностям каждого пользователя. Например, при начальной настройке игра может предложить пользователю расположить большие пальцы на экране наиболее естественным и удобным образом и затем соответственно настроить интерфейс. Все основные сенсорные платформы поддерживают определение размера экрана и разрешения DPI, что позволяет разработчикам принимать оптимальные решения и выбирать версии интерфейса, оптимизированные для планшетов и для телефонов. В идеале интерфейсы должны быть полностью масштабируемыемыми; тем не менее, это может быть непросто, поскольку существует множество устройств с самыми разными размерами экрана.

    Отсутствие обратной связи: кнопки без тактильной реакции

    До недавнего времени интерфейс всех без исключения видеоигр и компьютерных игр имел одну важную общую черту: когда пользователь нажимал на клавишу, он на ощупь чувствовал нажатие клавиши; это позволяло немедленно узнать, что команда пользователя была дана, даже до получения звуковой и визуальной реакции игры. Одна из серьезнейших проблем создания игр с сенсорным управлением заключается в том, что эта проверенная, удобная, привычная и безотказная механическая связь заменяется гладким стеклом, не обеспечивающим никакой тактильной обратной связи. Рассмотрим один из наиболее очевидных недостатков этого изменения: все клавиши на клавиатурах и кнопки на джойстиках и других игровых контроллерах имеют естественные границы; пользователь без труда наощупь определяет эти границы, что помогает поддерживать контакт с интерфейсом и с безупречной точностью выбирать, какие именно кнопки следует нажимать. Кроме того, обычно между соседними клавишами или кнопками есть некоторый промежуток, что дает возможность пользователям естественным образом нажимать точно в середину клавиш и кнопок и, тем самым, повышает точность. Игрок лишается непосредственного ощущения нажатия кнопки и прекращения ее движения, когда она доходит до упора в нажатом положении; поэтому игрок лишается уверенности и определенности в своих действиях; для получения обратной связи ему остается полагаться лишь на частоту опроса устройства и на реагирование игры. Если опираться только на визуальную и акустическую обратную связь, увеличивается задержка между каждым действием и реакцией на него; возникает запаздывание, значительно затрудняющее управление в некоторых типах игр. Наиболее строгие требования к клавишам и кнопкам джойстиков действуют в играх с рукопашными боями и различными единоборствами, поскольку приходится очень быстро обрабатывать команды нескольких игроков. Впрочем, и в классические шутеры, и в аркады намного удобнее играть, используя кнопки и клавиши с тактильной обратной связью и мгновенной реакцией.

    Каким же образом добиться аналогичного удобства от гладкой стеклянной панели? На момент написания этой статьи идеального решения не существовало; шел лишь процесс адаптации. Все потребительские устройства, предназначенные для игр, по-прежнему оснащаются «настоящими» кнопками, но на большинстве устройств с сенсорными экранами таких кнопок нет. Некоторые платформы поддерживают API для применения внешних игровых контроллеров, как проводных, так и подключаемых по интерфейсу Bluetooth. Это вполне разумное решение. Тем не менее, если мы стремимся распространить наши игры в сектор исключительно сенсорных устройств, наши игры должны быть полностью совместимы с сенсорным управлением. Для решения этой задачи можно использовать несколько стратегий.

    Во-первых, на некоторых устройствах можно использовать вибрацию в качестве альтернативы тактильной обратной связи. Вибрацию поддерживают почти все телефоны и ряд планшетов. Такая обратная связь удобна при работе с меню и другими элементами интерфейса; она обеспечивает «ощущение» подтверждения того или иного действия без звука (пользователь может играть в тихом общественном месте). Но это решение ни в коем случае нельзя считать панацеей: вибрация поддерживается не всеми устройствами, уровень обратной связи ограничивается слабой вибрацией, да и задержки существенно больше, чем при нажатии обычных кнопок.

    Акустическая обратная связь также достойна упоминания. Негромкие щелчки или схожие звуки, сопровождающие успешное использование кнопки, могут быть полезны, даже в сочетании с вибрацией. Это неплохое дополнение интерфейса, оно делает интерфейс удобнее, но помогает лишь обойти проблему, а не решить ее. Акустическая обратная связь не годится, если пользователь играет в тихой среде; задержки также представляют собой серьезную проблему для игр, где крайне важна моментальная реакция на случайные события.

    Все перечисленные методики не решают самую важную проблему: пальцы пользователя должны в течение всей напряженной игры оставаться на нужных элементах интерфейса. Виртуальную кнопку невозможно «нащупать», поэтому легко потерять положение кнопки. В результате пользователь будет промахиваться мимо кнопок, и, например, в критический момент вместо открытия огня будет судорожно нажимать пальцем пустое место, что, разумеется, не вызовет восторга. Все эти факторы необходимо внимательно рассмотреть и учесть в процессе первоначального проектирования. В некоторых играх, например, можно вовсе отказаться от фиксированного расположения самых главных кнопок: пусть все важные элементы интерфейса следуют за пальцами пользователя по мере их перемещению по экрану. Если речь идет о «виртуальном джойстике», можно разрешить пользователю продолжить перетаскивание по экрану даже за пределами выделенной области джойстика, если пользователь движет пальцем непрерывно, не отрывая его от экрана.

    Ряд преимуществ есть и у механики «длительного касания», когда пользователь касается и удерживает нажатой определенную область экрана до какого-либо события. Это может быть, например, контекстное меню или дополнительные параметры. Как правило, длительные касания не очень интуитивны, поэтому лучше оставить их для второстепенных функций игры. Впрочем, они могут быть удобны для опытных игроков; с помощью длительных касаний можно фиксировать дополнительное подтверждение для определенных типов игр. Длительное касание должно сопровождаться правильно подобранным использованием вибрационной, акустической и визуальной обратной связи, чтобы сообщить пользователю об успешности выполненной операции (особенно для таких действий как перетаскивание объектов).

    Различное оборудование

    На некоторых платформах эта проблема имеет большее значение, на других — меньшее, но эта проблема в любом случае нуждается в решении, если ваша игра предназначается более чем для одного семейства устройств. За последние несколько лет устройства Android стали более схожими, но все равно существуют значительные различия в качестве сенсорных контроллеров, в количестве одновременно обрабатываемых точек касания, в длительности задержек сенсорного управления и звуковой обратной связи, а также в прочих особенностях оборудования. Для гибридных устройств, таких как смартфоны с клавиатурами, следует подумать об обработке событий, отправляемых ОС Android при физическом включении клавиатуры (ее выдвижении и пр.). Это позволит плавно перейти от использования экранной клавиатуры к вводу с аппаратной клавиатуры с более полным использованием игрового экрана.

    Разработчики музыкальных игр, где большое значение имеет темп и скорость обработки ввода в строго заданное время, должны учитывать, что внутренние аудиосистемы некоторых платформ и устройств работают с длительными задержками, из-за чего синхронизация музыки и действий будет крайне затруднена для пользователей таких устройств. На некоторых платформах низкоуровневые параметры API (например, «встроенные» действия Android) позволяют ускорить обработку ввода и снизить задержки звуковой обратной связи при использовании определенных типов оборудования или в будущих версиях ОС. Со временем вопросы синхронизации звука, связанные с особенностями платформ и оборудования, будут решены путем расширенного тестирования и доработок со стороны производителей устройств, но пока разработчики игр должны отдавать себе отчет о возможных проблемах.

    Итоговые тезисы

    Многие фундаментальные принципы создания игр остаются в силе и при использовании сенсорных экранов. Об этих принципах следует помнить всегда:

    У пользователя должно все получаться, ему должно быть удобно и нетрудно.

    Дайте игрокам возможность сразу почувствовать себя опытными и умелыми — это повысит удобство игры. Это, на самом деле, вовсе не то же самое, что «легкая» игра; это создание ощущения сложности при «обманчиво легкой» игре. Да, разумеется, существуют «хардкорные» геймеры, не терпящие упрощений, и некоторые из нас по-прежнему считают именно такой бескомпромиссный подход единственно заслуживающим уважения; но «хардкорный» подход к играм вообще мало совместим с сенсорными экранами и компактными устройствами. По крайней мере, старайтесь, чтобы пользователю понравилось начало игры.

    Первые несколько минут игрового процесса имеют наиважнейшее значения.

    Необходимо сразу же, как можно скорее произвести на игрока благоприятное впечатление. При разработке обычных игр уже давно наиболее важным отрезком времени считаются первые 15 минут, но в мобильных играх, пожалуй, стоит сократить это время, поскольку мобильные пользователи склонны уделять играм меньше внимания. Постарайтесь полностью «выложиться» в первые две минуты. Если новые пользователи проведут эти две минуты в растущем раздражении, пытаясь привыкнуть к «неполноценному» интерфейсу, то у пользователей вряд ли хватит терпения, чтобы уделить вашей игре длительное время. Разумеется, мы выпускаем не только простые «казуальные» игры, но даже в самых сложных играх все равно существует оптимальный баланс в процессе вовлечения пользователя в игру и обучения его взаимодействию с игрой.

    Старайтесь, чтобы игра ощущалась пользователем как можно более естественно, удобно и привычно.

    Вне зависимости от того, для какой платформы ваша игра предназначалась изначально, при реализации сенсорного управления стремитесь сделать так, чтобы у пользователя возникало ощущение, что эта игра с самого начала делалась для сенсорного интерфейса. «Прикрученные на коленке» сенсорные интерфейсы существенно снижают удовольствие от игрового процесса, что обязательно скажется и на рейтинге игры, и на объеме ее продаж. При разработке в реальных условиях всегда существует целый ряд ограничений; иногда для полноценной переделки игровой механики и интерфейса попросту не хватает времени или средств. Но при любых ограничениях старайтесь сделать как можно более естественный и удобный интерфейс, и ваши усилия в конечном итоге непременно окупятся.

    Перспективы

    Несколько мыслей на будущее. Мир мобильных устройств быстро развивается. В ближайшем будущем появятся и новые интерфейсы, и новые сценарии использования. Уже сейчас можно подключить обычный телефон к телевизору по интерфейсу HDMI, используя при этом телевизор в качестве монитора, а телефон в качестве контроллера. Это станет еще удобнее с развитием беспроводных стандартов HDMI. Некоторые телефоны уже оснащаются компактными проекторами. Теоретически можно играть на большом экране, имея телефон, светлую стену в качестве экрана и компактный игровой контроллер с интерфейсом Bluetooth. Существуют и мощные ТВ на базе Android с различными приставками; все это поможет расширить рыночный охват вашей игры.

    Кроме того, возможно, что сами «экраны» могут смениться виртуальными интерфейсами, которые могут отображаться с помощью особых очков или даже проецироваться на сетчатку глаза пользователя. Возможные разновидности «надеваемых» компьютеров заслуживают упоминания, поскольку они позволяют использовать «жестовые» интерфейсы наподобие Xbox* Kinect*. Такие интерфейсы будут совместимы с сенсорным управлением, но с еще меньшим объемом физической обратной связи (без вибрации и т. п.).

    Впрочем, какими бы путями не развивались мобильные игры, это в любом случае будет увлекательно и интересно.

    Об авторе:

    Джон Бергман (John Bergman) — исполнительный директор компании Guild Software Inc. Джон — опытный разработчик, дизайнер и руководитель онлайн-игр, он основал компанию Guild Software в 1998 году с единственной целью: создавать онлайн-игры нового поколения. Компания Guild Software разработала с нуля полнофункциональный «движок» для MMO-игр, а в 2004 году с успехом выпустила игру «Vendetta Online», которая поступила в продажу во всех крупных розничных сетях.

    Позже эта игра прославилась как первая традиционная компьютерная MMO-игра, перенесенная на мобильную платформу; в 2011 году партнеры по реализации этого проекта, корпорации Verizon и Motorola, провели обширную кампанию телевизионной рекламы. Вне работы Джон занимается обучением начинающих разработчиков игр, консультирует перспективные новые проекты и участвует в работе различных связанных с играми консультативных советов в нескольких университетах.

    Notices

    INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.

    UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

    Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

    The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

    Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.

    Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or go to: http://www.intel.com/design/literature.htm

    Software and workloads used in performance tests may have been optimized for performance only on Intel microprocessors. Performance tests, such as SYSmark and MobileMark, are measured using specific computer systems, components, software, operations, and functions. Any change to any of those factors may cause the results to vary. You should consult other information and performance tests to assist you infully evaluating your contemplated purchases, including the performance of that product when combined with other products.

    Any software source code reprinted in this document is furnished under a software license and may only be used or copied in accordance with the terms of that license.

    Intel and the Intel logo are trademarks of Intel Corporation in the US and/or other countries.

    Copyright © 2012 Intel Corporation. All rights reserved.

    *Other names and brands may be claimed as the property of others.

  • Desarrolladores
  • Android*
  • Android*
  • Dirección URL
  • Build An Android Mobile Application Binary Using Intel App Dev Center Build Web Service

    $
    0
    0

    The App Dev Center build web service can be used to build a mobile application binary without going through the XDK. 

    In order to use the App Dev Center build web service, developers must email html5tools@intel.com from the email address of their valid account to be approved for use of these services and obtain a valid Customer ID and a valid Partner Code to identify their requests.

    Commands

    This command will return a link to an iOS or Android binary of a preconfigured application

    This command will return the build status for the application on the specified platform
    This command will create a new application
    Returns a certificate signing request
    This command will return a list of applications for a particular account
    This command will return a list of builds previously made for a particular application
    This command returns the certification type
    This command uploads a certificate and private key or a P12 file containing both in order for a particular account to build iOS applications
    This command will upload several icon and splash images at once
    This command uploads the large launch icon for an iOS application
    This command uploads the large splash image for an iOS or Android application
    This command will upload a provisioning profile for an iOS application.
    This command will upload and save the push certificate for an iOS application.
    This command will upload and save the small icon image for an application
    This command uploads the small splash image for an iOS or Android application

    This support function will determine if a x509 certificate and private key are related.

    NOTE: Use of the build web service is primarily intended for partners who do a large number of builds and need to automate the process. It is not recommended for the general user who builds apps one at a time. Most users should perform builds via the XDK or App Dev Center. 

    For more information,  you can go to Intel Web Service API Online documentation

  • Android app development
  • Imagen del icono: 


    Blast from My Past, How Meteor's Helped Me Understand Touch Sensors

    $
    0
    0

    After getting my Star Trek on while reading about writing code for the sensors on the Intel® Ultrabook at codeproject.com, I was pleased to see that Adrian Atkison had submitted an article titled, “Meteor Madness.” The game is reminiscent of way too many hours I spent on an Atari* avoiding and destroying astrological objects that can be found just outside Mars in our solar system. One of Mr. Atkison’s innovations is allowing both touch and classic keyboard control simultaneously during game play.  Since I have a historical feel for the game I found the explanations in this article particularly helpful in getting my new-to-sensors head around what one can do when going from traditional input devices to a touch input. Well done Adrian, I’m going to go blow up some space rocks.


    Meteor Madness Article –
    http://www.codeproject.com/Articles/480771/Meteor-Madness

    Gameplay Demo on Youtube –
    http://youtu.be/7PMhxBsmMLM 

    ‘Roid Rage Game on Windows 8 Store –
    http://apps.microsoft.com/windows/en-us/app/roid-rage/2d6287ff-e08f-4499-8245-d00899fd5824

     

  • Tim Duncan touch sensor codeproject contest
  • Imagen del icono: 

    Running Out of Gas? Intel Ultrabook Sensors to the Rescue!

    $
    0
    0

    As I begin my 3rd article on what I’ve learned from about development for Intel® Ultrabooks™ on codeproject.com, I feel I need to bring the subject closer to earth. I am so glad Dr. A. Bell submitted his article to the site called, “Road and Driving Pattern Analyzer using Ultrabook™.” I drive about 15,000 miles per year for commuting and vacations, some years more. One such vacation was a 6 week journey through the southwestern United States with my wife and dog.  Now if you’ve ever watched Roadrunner* cartoons you have a good idea where we were. We saw so many beautiful vistas and learned a little as well.  There are phenomenal landscapes and fascinating pre-history, but there's also a lot of time on the road looking at different shades of dirt.  For me, I spend a fair amount of the time playing with various calculations in my head like trip miles per hour including gas/potty/food stops or more importantly, is there enough gas in the tank to get to the next fueling station (a real concern when crossing Death Valley for instance).  Too bad I didn't have a device and application that approaches what Dr. Bell's analyzer does, I'd have never got bored.  Check out the references at the bottom of the article - they really help explain the possibilities of combining generally available information systems like web maps with Intel Ultrabook sensor specific data to create compelling and often even useful applications.  Oh well, now that I read about connecting the app to Microsoft* Bing* and my own Intel Ultrabook's GPS we just may have to bring the kids along on the next trek.

    Google* Maps Image of Our Route

    Road and Driving Pattern Analyzer using Ultrabook™ -
    http://www.codeproject.com/Articles/481804/Road-and-Driving-Pattern-Analyzer-using-Ultrabook

  • intel ultrabook tim duncan GPS maps
  • Imagen del icono: 

    Wakelocks: Detect No-Sleep Issues in Android* Applications

    $
    0
    0

    Abstract

    Android* applications may increase battery consumption significantly if they use wakelocks improperly. In this document, we will give some hints and tips on how to identify No Sleep bugs related to wakelock misuse.

    1. Introduction
    2. Wakelock
    2.1. What is it?
    2.2. Android User Wakelocks
    2.3. Android Kernel Wakelocks
    2.4. No-Sleep bugs
    3. Identifying No Sleep ugs
    3.1. Using adb
    3.2. Using BetterBatteryStats application
    4. Test case
    5. Conclusion
    6. Reference

    1. Introduction

    Limiting battery power consumption is essential for smartphones. To get the best autonomy possible, Android OS is designed to opportunistically go into sleep mode as soon as it detects no user activity on the system. Some applications require the device to stay on even if there is no user interaction for a long time. Examples of this are watching a video, listening to music, using GPS, and playing a game. Android provides such a mechanism for the OS or applications in order to keep the device awake. This mechanism is called a wakelock. For more details, please read Christopher Bird’s article: “Wakelocks for Android”.

    The introduction of such a mechanism puts the responsibility of managing the component’s activities on the application developer. If used incorrectly, the application can drain the battery significantly even when the application is not running in the foreground.

    2. Wakelock

    2.1. What is it?

    A wakelock is a software mechanism to control the power state of the host device. The OS exports explicit power management handles and APIs to specify when a particular component needs to stay on, or awake, until it is explicitly released from duty.

    The wakelock mechanism is implemented in two levels: user and kernel. The figure shows the internal design of Android wakelock implementation. The user wakelock can be utilized by either high-level OS services or applications and is provided by the power management service. It allows an application to control the power state of the device. A kernel wakelock is held by the OS kernel or a driver. A user wakelock is mapped to a kernel wakelock. Any active kernel-level wakelock prevents the system from being suspended to ACPI S3 (suspended to RAM) state, which is the highest power saving state for mobile devices.

    2.2. Android User Wakelocks

    The Android framework exports the wakelock mechanism through the PowerManager.Wakelock class and identifies four types of user wakelocks:

    Flag ValueCPUScreenKeyboard

    PARTIAL_WAKE_LOCK

    On

    Off

    Off

    SCREEN_DIM_WAKE_LOCK

    On

    Dim

    Off

    SCREEN_BRIGHT_WAKE_LOCK

    On

    Bright

    Off

    FULL_WAKE_LOCK

    On

    Bright

    Bright

    Note that since API level 17, FULL_WAKE_LOCK has been deprecated. Applications should use FLAG_KEEP_SCREEN_ON.

    Wakelocks can be acquired to force some of the components (CPU, screen, and keyboard) to stay awake.

    Use special caution with the PARTIAL_WAKE_LOCK as the CPU will continue to run regardless of any display timeouts or the state of the screen and even if the user presses the power button. This may lead to silent power drain as the phone looks like it is in standby mode (screen is off), but is actually fully awake.

    In all other wakelocks, the user can still put the device to sleep using the power button. All wakelocks, except partial wakelocks, will be implicitly released after the power button is pressed.

    This is how applications can hold a wakelock. It is basically an Acquire/Release mechanism. The application acquires a wakelock when it needs some components to stay on. When those are not needed anymore, the wakelock needs to be released.

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
    wl.acquire();
    ..screen will stay on during this section..
    wl.release();

    2.3. Android Kernel Wakelocks

    Kernel wakelocks are low-level wakelocks held by the kernel. They can be acquired/ released internally from the kernel. As such, application developers have less direct control on them, but an application’s behaviour can indirectly trigger these wakelocks and increase battery consumption inadvertently.

    Here are examples of kernel wakelocks.

    Wlan_rx: Held by the kernel when data is sent or received over Wi-Fi*.

    PowerManagerService: Is the container for all partial wakelocks.

    Sync: Held while the sync process is running.

    Alarm_rtc: Handles the alarm (when an application or process checks periodically on something).

    Main: Keeps the kernel awake. This is the last one to be released when the system goes to suspend mode.

    2.4. No-Sleep bugs

    The application has to release every wakelock it acquires at some point to allow the system to go back to a deep sleep mode. This acquire/release mechanism may lead to some bugs if the wakelock is never released. A wakelock remains held even if the application holding it is not running in the foreground anymore. A wakelock is released when it is explicitly released by a release call or if the application is actually killed (force close). Leaving some wakelocks held prevents the system from going into deep sleep mode even if there is no activity, significantly increasing the power drain and silently reducing the battery autonomy. This is called a No-Sleep bug. Due to the event-driven nature of Android, developers may not think of all the code paths that their applications had acquired wakelocks and, therefore, need to close. This type of bug is called a No-Sleep bug code path.

    Another occurrence of this type of bug is when the release happens before the wakelock has been effectively acquired. This can happen in multithreaded code where the acquisition and release of the wakelock happen in different threads. This is called a No-Sleep bug race condition.

    The last issue is the No-sleep dilation, where the wakelock is acquired longer than what is actually necessary.

    Why are these issues important to look at? According to a study made by P. Vekris: “55% of 328 applications using wakelocks do not follow our policies for no-sleep bugs” [2012]. Some major applications have been released with No-Sleep bugs. So developers need to be aware of this specific point in order for their applications to run optimally.

    3. Identifying No Sleep bugs

    The no sleep bug can be tackled in two ways: either a static analysis doing a code path scanning or dynamically at run time. In this paper we will focus on run-time analysis.

    This method does not guarantee you’ll find all the wakelocks bugs in an application. It will however help you spot some wakelock issues if they occur during run time. To identify a wakelock issue, you need to follow a code path where the wakelock is not released. Testing an application against no sleep bugs involves manipulating the application, trying different ways to exit it, at different places in the application to see if a wakelock persists.

    In some cases, it may be necessary to prevent the system from going into deep sleep even if the application is not in the foreground anymore. An application may need to perform a task in the background. This is the case, for example, if the application has to perform a long download: a video or game dataset. The application may be put in the background by the user while it’s downloading, but the phone should stay awake until the download is completed. In that case, the application may hold a wakelock until the download is completed. Of course, you should check that the wakelock is released at some point. For example, if the phone loses network connection in the middle of a download, the phone should not remain awake if the action cannot be performed anymore.

    In summary, identifying a No Sleep bug is very context dependent. There is no predefined criterion that allows someone to easily identify this issue. Only common sense can assess these types of bugs.

    3.1. Using adb

    The simplest tools to look at wakelocks are shell commands.

    To get a full picture of the kernel wakelocks, type:

    adb shell cat /proc/wakelocks

    namecountexpire_countwake_countactive_sincetotal_time
    "PowerManagerService"1502000337817677431
    "main"15000984265842688
    "alarm"151207920217778251643
    "radio-interface"1600016676538930
    "alarm_rtc"8044001204136324759
    "gps-lock"100010753659786
    namesleep_timemax_timelast_change
    "PowerManagerService"957294091221409216636679723417252748
    "main"02124247323559498127170228
    "alarm"2176173620473579769419723371461242
    "radio-interface"016593284969486387144974
    "alarm_rtc"1200253446201660829365019483176054624
    "gps-lock"01075365978637632803440

    For images using kernel 3.4 or higher, use “adb shell cat /sys/kernel/debug/wakeup_sources.” Even though it gives all the information, this format is not very user friendly. The tools we are introducing below are much handier.

    A simple way to check a specific application is by using “adb shell dumpsys power.” Below is a typical output of this command. You can see in red the user wakelocks present at the time the command was issued. This command gives a snapshot of the user wakelocks present in the system.

    Power Manager State:
    mIsPowered=true mPowerState=3 mScreenOffTime=1618305 ms
    mPartialCount=3
    mWakeLockState=SCREEN_ON_BIT
    mUserState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT
    mPowerState=SCREEN_BRIGHT_BIT SCREEN_ON_BIT
    mLocks.gather=SCREEN_ON_BIT
    mNextTimeout=2382037 now=2378097 3s from now
    mDimScreen=true mStayOnConditions=3 mPreparingForScreenOn=false mSkippedScreenOn=false
    mScreenOffReason=0 mUserState=3
    mBroadcastQueue={-1,-1,-1}
    mBroadcastWhy={0,0,0}
    mPokey=0 mPokeAwakeonSet=false
    mKeyboardVisible=false mUserActivityAllowed=true
    mKeylightDelay=6000 mDimDelay=587000 mScreenOffDelay=7000
    mPreventScreenOn=false mScreenBrightnessOverride=-1 mButtonBrightnessOverride=-1
    mScreenOffTimeoutSetting=600000 mMaximumScreenOffTimeout=2147483647
    mLastScreenOnTime=27380
    mBroadcastWakeLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
    mStayOnWhilePluggedInScreenDimLock=UnsynchronizedWakeLock(mFlags=0x6 mCount=0 mHeld=true)
    mStayOnWhilePluggedInPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=true)
    mPreventScreenOnPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
    mProximityPartialLock=UnsynchronizedWakeLock(mFlags=0x1 mCount=0 mHeld=false)
    mProximityWakeLockCount=0
    mProximitySensorEnabled=false
    mProximitySensorActive=false
    mProximityPendingValue=-1
    mLastProximityEventTime=0
    mLightSensorEnabled=true mLightSensorAdjustSetting=0.0
    mLightSensorValue=11.0 mLightSensorPendingValue=10.0
    mHighestLightSensorValue=47 mWaitingForFirstLightSensor=false
    mLightSensorPendingDecrease=false mLightSensorPendingIncrease=false
    mLightSensorScreenBrightness=42 mLightSensorButtonBrightness=0 mLightSensorKeyboardBrightness=0
    mUseSoftwareAutoBrightness=true
    mAutoBrightessEnabled=true
    creenBrightnessAnimator:
    animating: start:42, end:42, duration:480, current:42
    startSensorValue:47 endSensorValue:11
    startTimeMillis:2361638 now:2378092
    currentMask:SCREEN_BRIGHT_BIT
    mLocks.size=4:
    SCREEN_DIM_WAKE_LOCK          'StayOnWhilePluggedIn_Screen_Dim' activated (minState=1, uid=1000, pid=388)
    PARTIAL_WAKE_LOCK             'StayOnWhilePluggedIn_Partial' activated (minState=0, uid=1000, pid=388)
    PARTIAL_WAKE_LOCK             'HDA_PARTIAL_WAKE_LOCK' activated (minState=0, uid=10046, pid=4690)
    PARTIAL_WAKE_LOCK             'AudioOut_2' activated (minState=0, uid=1013, pid=157)
    mPokeLocks.size=0:

    To identify if any wakelocks still held after an application has been put in background, you can follow this process:

    1. Connect the device to USB.
    2. Launch the application and play with it.
    3. Press the power button to go to sleep mode or exit the application in some way.
    4. Wait for about 20 sec.
    5. Type the following instruction in command line:
    > adb shell dumpsys power
    6. Check if there are any PARTIAL_WAKE_LOCKs like this one for example:
    PARTIAL_WAKE_LOCK       ‘AudioOut_2’ activated(minState=0, uid=1013, pid=157)
    7.Repeat step 5 every 15 sec 3 to 5 times. If the result stays the same, there may be an issue.

    3.2. Using BetterBatteryStats application

    BetterBatteryStats* (https://play.google.com/store/apps/details?id=com.asksven.betterbatterystats&hl=en) is an Android app by Sven Knispel that you can buy on Google Play. It collects information that allows you to spot battery drain, especially wakelock issues.

    First, by selecting the ‘Other’ entry, you can check the deep sleep and awake modes versus the total time. Ideally, most of the time, the phone should be in Deep Sleep if it is not in use.

    You can also compare the Awake time vs. the Screen On time to see when there is actual activity. Under normal conditions, the Screen On time and the Awake time should be close.

    You can check the battery charge evolution and the awake, Screen On, and Wi-Fi* states over time.

    Then you can check the kernel wakelocks. You can check the time spent within each kernel wakelock type as well as the count. High time or high counts may be symptomatic of a problem. From this report you cannot link a hotspot to a specific application or process but you can spot a specific behaviour that may be triggered by a specific application.

    In the Kernel Wakelock report, the line “PowerManagerService” aggregates the time spent in user wakelocks. If this line shows a hot spot, you can drill down by checking the Partial Wakelock report.

    Most of the time, the partial wakelock refers to the application that holds it. It’s a great help to find the culprit. Though some times, some activities may be launched by other apps. For example, a game may play sound through the AudioOut channel assigned to the Android Media gallery. If not coded properly, it would be the game’s fault for not closing the sound channel. It is never the Android Gallery’s fault.

    The AlarmManager may signal that wake ups were caused by alarms or that an application has made numerous alarm modifications. You may want to check the Alarm section but it will only work if you have a rooted image.

    Network entry is also accessible only on rooted images. It can be useful if you suspect some high traffic on the network. The multipdp/svnet-dormancy kernel wakelock may indicate that you also have some high network usage.

    4. Test case

    Let’s consider a real case using a game. Start it and play for about five minutes, and then exit the game in an unusual way. In our case we forced the exit by pressing the Home button. The music stopped, and the home screen displayed. From a user standpoint, everything looks fine. After a few minutes of inactivity the screen goes dark as expected. Let’s leave the phone in this state for about half an hour and then check it with BestBatteryStats. On the “Other” screen, you can see that the phone remained awake despite the fact the screen was not on. You can also see that the battery depletion rate is at 8.5%/hr. So in this state, the phone with a full battery will last no more than 12 hrs.

    Now let’s look at the Kernel wakelocks. We can see that two kernel wakelocks remain despite the fact that there is no activity. One is the PowerManagerService, which means that there is a user partial wakelock, and the other is an AudioOutLock wait lock. Let’s have a look at the Partial wakelock screen.

    Looking at the partial wakelock screen, we can see that an audio channel is still open with the media gallery application. This is curious as the media gallery application was not used explicitly by the user. The game actually launched the Media Gallery for the game’s music playback. The developer has simply forgotten to close the audio channel when the application is interrupted by the home button. The developer needs to take this case into consideration and modify the application accordingly.

    5. Conclusion

    Wakelocks are very useful and powerful tools. But if misused, they can have a very negative effect on the device battery life, considerably impacting the user experience. It is important for developers to check during QA that their code is not causing any No Sleep bugs. They should consider using the available tools to analyse the battery impact of their application in real life usage and try to limit their impact on the customer device as much as possible.

    6. Reference

  • Desarrolladores
  • Android*
  • Android*
  • Dirección URL
  • “一次编写,随处运行” Intel HTML5技术研讨会

    $
    0
    0

    HTML5 是一种开放标准。通过使用此标准,开发人员只需编写一次程序,即可在任何地方运行。 这一跨平台方法能够显著增加开发人员的总体潜在受众,同时在不同屏幕尺寸上为用户带来更一致的体验。因此,HTML5 是应用程序开发领域的未来趋势,英特尔认为需要帮助经验丰富的开发人员迁移到这一跨平台方法,并支持新的开发人员借助这一出色的全新方法快速跟上行业发展步伐,以确保这些开发人员能够在几乎所有现代计算平台上部署其应用程序和游戏.

    最近在上海举办的“一次编写,随处运行” Intel HTML5技术研讨会,给软件开发人员有机会:

    •  率先领略HTML5应用在英特尔平台上的全新体验; 
    • 了解英特尔平台上HTML5的软件开发工具;
    •  英特尔技术工程师就您关心的技术焦点等问题展开深入探讨。

    讲座内容如下(我们特别记录了讲座实况,使不能现场参加的开发人员也能有机会了解内容):

    HTML5简介 (50mins) (讲座视频
    HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本。本讲座主要介绍HTML5标准的发展历程、HTML5的特点和优势以及HTML5标准中新加入的功能。

    开发高性能HTML5应用 (60mins) (讲座视频
    软件性能对于HTML5应用而言尤其重要。本讲座将分享一些开发高性能HTML5应用的最佳实践,包括可能带来百倍性能提升的编程模式,以及各种编程模式导致不同性能的底层原因。同时,我们会介绍Intel开发的HTML5性能分析工具。

    Intel HTML5应用开发工具简介 (90mins) 

    Intel开发了一系列HTML5应用开发工具,其中包括HTML5应用开发集成环境Intel XDK和HTML5应用移植工具Intel HTML5 App Porter。这些工具可以有效的帮助开发者快速创建、开发、测试、调试、打包、部署和移植HTML5应用程序。

    1. 基于WebRTC*的协作服务平台
    2. 从本地应用到HTML5应用
    3. 英特尔HTML5开发环境

     

  • Desarrolladores
  • Desarrolladores para Intel AppUp®
  • Socios
  • Profesores
  • Estudiantes
  • Android*
  • Apple iOS*
  • Apple Mac OS X*
  • Microsoft Windows* 8
  • HTML5
  • HTML5
  • Principiante
  • Intermedio
  • Intel® HTML5 Development Environment
  • Dirección URL
  • Empecemos
  • Mejora del rendimiento
  • Google Play: Приложение с неколькими APK для различных нативных платформ

    $
    0
    0

    До недавнего времени у некоторых разработчиков приложений, содержащих нативный код, существовала проблема при добавлении поддержки х86-й архитектуры, после добавления еще одной библиотеки, собранной под х86, размер установочного пакета приложение мог существенно увеличиться. Прежде всего это касалось приложений, в которых размер библиотеки был сравним с размером остальной части пакета: ресурсов, графики, Java кода. Я работал с несколькими разработчиками ПО, которые не готовы были включать поддержку х86 как раз по этой причине. Тогда единственным решением было - создавать отдельное приложение, как, например, поступили с приложение Good for Enterprise, для х86-й платформы разработчики создали отдельное приложение GFE - Intel. При этом это было именно новое приложение, которое не унаследовало от оригинального продукта ни счетчика загрузок, ни рейтинга.

    И не было никакого другого способа решить эту проблему, ранее существовала возможность добавлять несколько APK пакетов к одному приложению, но отличаться они могли только параметрами текстур, поддержкой различных размеров экрана, уровнем API.

    И вот, совсем недавно, компания Google объявила о новом способе фильтрации пакетов приложения - по аппаратной платформе. Что это означает для разработчика - теперь, если появилась необходимость добавить поддержку новой аппаратной платформы, но есть опасения, что размер приложения может значительно увеличится можно поступить просто, создать несколько APK пакетов под каждую платформу. Google Play их будет различать по именам подкаталогов внутри папки lib: armeabi, armeabi-v7a, x86 и, соответственно, будет предлагать к загрузке пакет, соответствующий аппаратной платформе пользователя.

    Как это реализовывается на практике. Сначала необходимо собрать APK файлы под необходимые нативные платформы, причем один пакет, как и раньше, может содержать поддержку для двух и более платформ. Например отдельно собирается пакет под х86 и отдельно под ARM, ARMv7. При этом при создании новой сборки необходимо менять параметр Version Code в манифесте приложения, т.к. для приложения в Google Play не может существовать два APK файла, пусть даже и различающихся поддержкой нативныъ латформ, но с одной версией.

    Пакеты созданы, подписаны, можно загружать. Заходим в панель управления, выбираем (или создаем) приложение, переключаемся на закладку "APK Files".

    Загружаем наш первый пакет, порядок загрузки роли не играет. После загрузки. если все прошло успешно видим следующую информации о пакете.

    Там же видим, что пакет (в данном случае) будет использован для загрузки на х86-е устройства.

    Загружаем следующий пакет, так же видим информацию о нативных платформах.

    В списке видим информацию о всех APK файлах приложения.

    Как видите оба пакета активны и готовы к установке на устройства пользователей.

  • Android apps
  • google play
  • ndk
  • Imagen del icono: 

  • Tutorial
  • Установка образа Android 4.4.1 (Jelly Bean) для эмулятора

    $
    0
    0

    В конце августа компания Intel выпустила образ для эмулятора Android 4.1.1 (Jelly Bean). Используя данный образ разработчики могут начать разработывать и тестировать в эмуляторе приложения для Jelly Bean в том числе разрабатываемые под x86-ю платформу.

    Существует два способа установки данного образа - установка вручную, установка с помощью Android SDK Manager.



    Установка вручную

    1. Зайдите на страницу загрузкии скачайте образ sysimg_x86-16_r01.zip

    2. Откройте на диске каталог, в который был установлен Android SDK

    3. Откройте подкаталог system-images\android-16\x86 . Если в каталоге ранее отсутствовал путь android-16\x86 - создайте требуемые подкаталоги.

    4. Распакуйте содержимое скачанного архива в папку x86. Образ установлен и готов к использованию.



    Установка через Android SDK Manager

    1. Запустите Android SDK Manager и разверните ветку API 16. Если при открытии менеджера данная ветка у вас не отображается - установите все рекомендуемые обновления. Возможно, что даже после обновдления ветка не появится в списке компонентов для установа. В этом случае перезапустите Android SDK Manager.



    2. Далее необходимо отметить пункт Intel x86 Atom System Image и нажать кнопку Install. После завершения процесса установке образу будет готов к использованию.



    Важным преимуществом при использовании образа Jelly Bean для х86 является возможность его запуска совместно с Intel Hardware Accelerated Execution Manager . Его использование позволяет производительность эмулятора близкую к производительности реального устройства. О том как установить и настроить Intel HAXM вы можете прочитать в статье Как разогнать эмулятор Android

  • android emulator
  • jelly bean
  • HAXM
  • Imagen del icono: 

  • Tutorial
  • Android SDK4.0.3 及以上版本支持 Intel x86 模拟器

    $
    0
    0

    现在 Android SDK 终于有了 Intel x86 上的模拟器了, 现在在 sdk manager 上可以下载相应的模拟器映像:

    下载安装完之后就可以在虚拟机选项中选择cpu为intel x86:

     实际运行比arm模拟器快太多了,毕竟是原生支持,现在在没有手机的情况下终于可以直接用模拟器来调试程序了:

  • Curated Home
  • Imagen del icono: 

  • News

  • Meshcentral.com - News update

    $
    0
    0

    Hi everyone. First, for people in the US, happy long weekend! I just wanted to give an update on what is going on with Meshcentral.com. Here is a lot of interest in the technology and so, I have been busy fixing and improving all sorts of things, most of the focus is on the server side and underlying peer-to-peer routing. But I got two fun things to report:

    Intel Remote Wake.As annonced previously, Meshcentral supports Intel Remote Wake, this is a technology that allows users to wake up sleeping computers on the Internet. It's like an internet version of wake-on-lan. I have been improving the was I handle this feature on Intel based platforms in the last two weeks, with some more fixes coming soon. Motherboards with Intel Remote Wake are starting to be avaialble, one user pointed me to the ASRock web site where they show their users how to use Meshcentral.com to wakeup their PC remotely including from a cellphone.

    Intel Developer Forum. This year Intel IDF is in San Francisco September 10 to 12th and I will be a speaker at a lab. I am just about to start working on the content that will focus on how to connect Intel Platforms to the cloud. What makes me excited about this presentation is the there are plenty of platform and processor features (Intel AMT, Intel Remote Wake, AES-NI, RANDRD, Wake-on-LAN, TPM) that can be used to connect platforms to the cloud. Since Meshcentral uses all of these, I will be able to help understand what all of these can do and how build them into your product.

    Ok, that is it for now. Hope to see many of you at IDF!
    Ylian
    meshcentral.com

  • Mesh
  • MeshCentral
  • MeshCentral.com
  • p2p
  • Intel Remote Wake
  • Remote Wake
  • wake
  • Sleep
  • IDF
  • Developer Forum
  • IDF 2013
  • san francisco
  • Ylian
  • Imagen del icono: 

  • Meshcentral
  • Intel Software marcando presença no TDC São Paulo!

    $
    0
    0

    Na próxima semana a Intel Software participará do TDC São Paulo, que vai acontecer entre os dias 10 e 14 de Julho na Universidade Anhembi Morumbi.

    Em nosso stand você poderá conhecer melhor nossas tecnologias, as iniciativas do grupo de Software da Intel e nossas comunidades (Android, Servers/HPC, HTML5 e Ultrabooks/Windows).

    Venha conhecer nossos Community Managers e traga idéias e sugestões para que possamos sempre trazer o melhor para você!

    Durante o evento também iremos apresentar as seguintes palestras:

    Dia 10/07:

    Desenvolvendo Apps Multiplataforma para dispositivos móveis com HTML5 

    Palestrante: Jomar Silva

    Trilha: HTML5 e Javascript

    Horário: 13:10 às 14:00

    O desenvolvimento de aplicativos para dispositivos móveis multiplataforma é o grande desafio de hoje para que os desenvolvedores possam maximizar a audiência de seus Apps, minimizando o seu esforço para desenvolver e manter as aplicações. Um desafio adicional está relacionado com os ambientes de compilação destas aplicações, pois atualmente cada plataforma (iOS, Android, etc) demanda um ambiente específico para isso, portanto serviços na nuvem que realizam a compilação e empacotamento de aplicativos são fundamentais. Iremos abordar na palestra as APIs e serviços na nuvem existentes atualmente para auxiliar os desenvolvedores, além de apresentar exemplos de código de apps em HTML5 com acesso a recursos nativos (sensores) dos dispositivos móveis.

    Dia 11/07

    Afinal, o que é um Community Manager? 

    Palestrantes: Luciano Palma e George Silva

    Trilha: Marketing Digital

    Horário:11:10 às 12:00

    O cargo de Community Manager é bastante recente, e por isso suas fronteiras ainda estão me fase de definição. Venha para esta palestra para entender o que fazem os Community Managers da Intel em seu dia a dia, discutir este novo papel profissional e descobrir se este pode ser o seu próximo emprego. Principais abordagens: A importância das Comunidades para empresas - Perfil do Community Manager; - Técnicas, Ferramentas e Atividades do Community Manager; - Habilidades e conhecimentos aplicados no dia-a-dia por quem exerce este papel numa empresa líder de mercado.

    Computação Manycore: uma arquitetura muito além do multicore! 

    Palestrante:Luciano Palma

    Trilha:HPC

    Horário:14:10 às 15:00

    O uso de múltiplos cores e múltiplos threads em paralelo é fundamental para a Computação de Alto Desempenho. Dentro deste contexto, a Intel criou um chip com uma arquitetura inovadora que expande os limites da computação e aloja até 61 núcleos de processamento em um único chip e disponibiliza até 244 threads simultâneas. Venha conhecer a arquitetura Manycore, que é utilizada no computador mais potente do mundo, o Tianhe-2. Nesta sessão, apresentaremos a arquitetura de um sistema equipado com o coprocessador Intel Xeon Phi e mostraremos como tirar proveito de máquinas com altíssimo poder de processamento através de paralelismo.

    Dia 12/07

    Escreva sua app Android sem gastar energia

    Palestrante:George Silva

    Trilha:Android

    Horário:16:40 às 17:30

    As restrições das plataformas móveis, a concorrência e a facilidade dos usuários em recomendar ou criticar as aplicações tornaram o desafio dos desenvolvedores muito maior nas lojas de aplicativos. Além das preocupações com arquitetura e um bom plano de testes, as restrições de bateria e desempenho menor que as plataformas tradicionas exigem mais criatividade para encontrar o melhor balanço entre responsividade e consumo de energia. Nosso foco será apresentar um guia prático de como criar software eficiente no uso de energia, discutir quando precisamos lidar com o balanço entre resposta ao usuário e uso de energia visitando as principais ferramentas que auxiliam o desenvolvedor a melhorar o uso de energia e a responsividade de sua aplicação. Venha conhecer o trabalho que a Intel Software está fazendo no ecossitema Android que beneficia o desenvolvimento para todos dispositivos.

    Utilizando multi-touch e sensores com JavaFX e JNI 

    Palestrante:Felipe Pedroso

    Trilha:Java

    Horário:10:10 às 11:00

    Entenda os benefícios que a plataforma JavaFX traz no desenvolvimento de aplicações para Ultrabooks e quais são as novas formas de interação com esses dispositivos. Conheça também os desafios que o desenvolvedor enfrenta para utilização dos sensores presentes nesses dispositivos.

    Dia 14/07:

    Desafios na produção de games no Brasil 

    Palestrantes:Juliano Alves e Mauricio Alegretti

    Trilha:Games

    Horário:17:40 às 18:30

    Inovação na Experiência do Usuário: Apresentando o Intel Perceptual Computing SDK 

    Palestrantes:Felipe Pedroso

    Trilha:Games

    Horário:A definir

    Nos últimos anos a experiência proporcionada ao usuário vem se tornando um fator determinante para o sucesso das apps. A Intel apresenta o Intel Perceptual Computing SDK com um demo produzido pela parceira Smyowl. O SDK proporciona ao usuário uma interação mais natural, imersiva e intuitiva através de reconhecimento de voz, análise facial, reconhecimento de gestos com as mãos e dedos e rastreamento de objetos.

    Esperamos você lá!

  • windows 8
  • html5
  • android
  • HPC
  • ultrabook
  • Imagen del icono: 

    Intel Software marcando presença no TDC São Paulo!

    $
    0
    0

    Na próxima semana a Intel Software participará do TDC São Paulo, que vai acontecer entre os dias 10 e 14 de Julho na Universidade Anhembi Morumbi.

    Em nosso stand você poderá conhecer melhor nossas tecnologias, as iniciativas do grupo de Software da Intel e nossas comunidades (Android, Servers/HPC, HTML5 e Ultrabooks/Windows).

    Venha conhecer nossos Community Managers e traga idéias e sugestões para que possamos sempre trazer o melhor para você!

    Durante o evento também iremos apresentar as seguintes palestras:

    Dia 10/07:

    Desenvolvendo Apps Multiplataforma para dispositivos móveis com HTML5 

    Palestrante: Jomar Silva

    Trilha: HTML5 e Javascript

    Horário: 13:10 às 14:00

    O desenvolvimento de aplicativos para dispositivos móveis multiplataforma é o grande desafio de hoje para que os desenvolvedores possam maximizar a audiência de seus Apps, minimizando o seu esforço para desenvolver e manter as aplicações. Um desafio adicional está relacionado com os ambientes de compilação destas aplicações, pois atualmente cada plataforma (iOS, Android, etc) demanda um ambiente específico para isso, portanto serviços na nuvem que realizam a compilação e empacotamento de aplicativos são fundamentais. Iremos abordar na palestra as APIs e serviços na nuvem existentes atualmente para auxiliar os desenvolvedores, além de apresentar exemplos de código de apps em HTML5 com acesso a recursos nativos (sensores) dos dispositivos móveis.

    Dia 11/07

    Afinal, o que é um Community Manager? 

    Palestrantes: Luciano Palma e George Silva

    Trilha: Marketing Digital

    Horário:11:10 às 12:00

    O cargo de Community Manager é bastante recente, e por isso suas fronteiras ainda estão me fase de definição. Venha para esta palestra para entender o que fazem os Community Managers da Intel em seu dia a dia, discutir este novo papel profissional e descobrir se este pode ser o seu próximo emprego. Principais abordagens: A importância das Comunidades para empresas - Perfil do Community Manager; - Técnicas, Ferramentas e Atividades do Community Manager; - Habilidades e conhecimentos aplicados no dia-a-dia por quem exerce este papel numa empresa líder de mercado.

    Computação Manycore: uma arquitetura muito além do multicore! 

    Palestrante:Luciano Palma

    Trilha:HPC

    Horário:14:10 às 15:00

    O uso de múltiplos cores e múltiplos threads em paralelo é fundamental para a Computação de Alto Desempenho. Dentro deste contexto, a Intel criou um chip com uma arquitetura inovadora que expande os limites da computação e aloja até 61 núcleos de processamento em um único chip e disponibiliza até 244 threads simultâneas. Venha conhecer a arquitetura Manycore, que é utilizada no computador mais potente do mundo, o Tianhe-2. Nesta sessão, apresentaremos a arquitetura de um sistema equipado com o coprocessador Intel Xeon Phi e mostraremos como tirar proveito de máquinas com altíssimo poder de processamento através de paralelismo.

    Dia 12/07

    Escreva sua app Android sem gastar energia

    Palestrante:George Silva

    Trilha:Android

    Horário:16:40 às 17:30

    As restrições das plataformas móveis, a concorrência e a facilidade dos usuários em recomendar ou criticar as aplicações tornaram o desafio dos desenvolvedores muito maior nas lojas de aplicativos. Além das preocupações com arquitetura e um bom plano de testes, as restrições de bateria e desempenho menor que as plataformas tradicionas exigem mais criatividade para encontrar o melhor balanço entre responsividade e consumo de energia. Nosso foco será apresentar um guia prático de como criar software eficiente no uso de energia, discutir quando precisamos lidar com o balanço entre resposta ao usuário e uso de energia visitando as principais ferramentas que auxiliam o desenvolvedor a melhorar o uso de energia e a responsividade de sua aplicação. Venha conhecer o trabalho que a Intel Software está fazendo no ecossitema Android que beneficia o desenvolvimento para todos dispositivos.

    Utilizando multi-touch e sensores com JavaFX e JNI 

    Palestrante:Felipe Pedroso

    Trilha:Java

    Horário:10:10 às 11:00

    Entenda os benefícios que a plataforma JavaFX traz no desenvolvimento de aplicações para Ultrabooks e quais são as novas formas de interação com esses dispositivos. Conheça também os desafios que o desenvolvedor enfrenta para utilização dos sensores presentes nesses dispositivos.

    Dia 14/07:

    Desafios na produção de games no Brasil 

    Palestrantes:Juliano Alves e Mauricio Alegretti

    Trilha:Games

    Horário:17:40 às 18:30

    Inovação na Experiência do Usuário: Apresentando o Intel Perceptual Computing SDK 

    Palestrantes:Felipe Pedroso

    Trilha:Games

    Horário:A definir

    Nos últimos anos a experiência proporcionada ao usuário vem se tornando um fator determinante para o sucesso das apps. A Intel apresenta o Intel Perceptual Computing SDK com um demo produzido pela parceira Smyowl. O SDK proporciona ao usuário uma interação mais natural, imersiva e intuitiva através de reconhecimento de voz, análise facial, reconhecimento de gestos com as mãos e dedos e rastreamento de objetos.

    Esperamos você lá!

  • windows 8
  • html5
  • android
  • HPC
  • ultrabook
  • Imagen del icono: 

    Отладка в ОС Android* на процессоре Intel® Atom™ с помощью JTAG

    $
    0
    0

    .

    Для системных интеграторов и производителей устройств важно взаимодействие с драйверами устройств и системным ПО. Это особенно важно, если нужно реализовать поддержку какого-либо дополнительного устройства или осуществить портирование без потери производительности.

    В следующих главах мы рассмотрим решения для отладки на основе стандарта IEEE 1149.1 (JTAG). Мы обратим внимание на архитектурные различия между ARM* и Intel®, способные повлиять на отладку на уровне системы.

    1.1Отладка JTAG

    Для отладки системного ПО уровня ОС и драйверов устройств наиболее распространенным методом является использование интерфейса JTAG. Стандарт JTAG IEEE 1149.1 определяет стандартный тестовый порт доступа и архитектуру граничного сканирования для портов тестового доступа, применяемых для тестирования печатных плат. Этот стандарт часто называют просто интерфейсом отладки JTAG. Из стандарта тестирования печатных плат он превратился в ставший стандартом де-факто интерфейс для отладки платформ независимо от ОС и на уровне ОС.

    Дополнительные сведения о JTAG и его использовании в отладке современного ПО см. в статье Рэнди Джонсона и Стюарта Кристи "JTAG 101; IEEE 1149.x and Software Debug".

    С точки зрения производителей устройств, разработчиков приложений и драйверов, понимание взаимодействия между драйверами и программными компонентами в различных подсистемах микросхем и устройств важно для определения стабильности платформы. С точки зрения проверки микросхем низкоуровневый комплект ПО обеспечивает тестовую среду, позволяющую сымитировать факторы нагрузки, которым платформа будет подвергаться при ее реальном использовании. Для работы с современными системами требуется понимать, как работают все их компоненты вместе в реальной обстановке; положительных результатов тестирования отдельных компонентов недостаточно. Именно на этом уровне и используется отладка на базе JTAG. Благодаря связи JTAG с аппаратным уровнем можно экспортировать сведения о состоянии в ОС Android на целевом устройстве.

    Для отладки драйверов устройств особенно важно знать и точное состояние периферийного устройства в наборе микросхем, и взаимодействие драйвера устройства с уровнем ОС и остальным ПО.

    Если рассматривать Android с точки зрения отладки системы, если изучить драйверы устройств и ядро ОС, то видно, что это просто специализированная разновидность Linux. С ней можно работать как с любой разновидностью Linux с ядром версии 2.6.3x или более поздней.

    Процессор Intel® Atom™ Z2460 поддерживает граничное сканирование IEEE-1149.1 и IEEE-1149.7 (JTAG), интерфейс параллельной трассировки MPI PTI, а также трассировку инструкций на базе Branch Trace Storage (BTS), Last Branch Record (LBR) и Architectural Event Trace (AET) с помощью порта Intel XDP, совместимого с JTAG.

    Различные поставщики JTAG предлагают решения для отладки систем с поддержкой Android, в том числе следующие:
    • Wind River (http://www.windriver.com/products/JTAG-debugging/)
    • Lauterbach (http://www.lauterbach.com)
    • Intel (http://software.intel.com - могут действовать ограничения доступа)

    1.2.  Отладка ОС Android

    Отладка платформ Android осложняется тем, что обычно система Android стремится перейти в состояние простоя и сна для оптимизации расхода электроэнергии. Таким образом, отладка режима пониженного потребления электроэнергии становится непростой задачей.

    • Можно поддерживать функциональность JTAG в некоторых состояниях пониженного потребления электроэнергии.
    • Там, где это невозможно, следует запускать JTAG сразу же после включения питания набора микросхем, отвечающего за работу JTAG.

    Многие проблемы уровня ОС на платформах такого типа обычно связаны и изменениями режима электропитания и последовательностями засыпания и пробуждения устройств.

    Системный отладчик на основе агента отладки или интерфейса JTAG очень полезен для решения ряда важных задач разработки ОС.

    С помощью отладчика можно проверить процесс загрузки, выявлять и исправлять неполадки стабильности, такие как ошибки времени выполнения, сбои сегментации или неверный запуск служб при загрузке.

    Также отладчик дает возможность выявлять и устранять ошибки конфигурации ОС благодаря доступу к таблицам страниц, таблицам дескрипторов и дереву инструкций. Трассировка инструкций в сочетании с доступом к таблице памяти может быть полезно для выявления причин переполнения стека, утечки памяти и даже случаев повреждения данных.

    На рис. 1 показано преобразование таблицы страниц из физических в виртуальные адреса памяти. Для платформы x86 характерна высокая гибкость в определении глубины таблиц преобразования и точность адресации блоков памяти. Такое удобство доступа и представления памяти играет важную роль для разработки системы на уровне ОС.


    Рис. 1. Преобразование логического адреса в линейный

    Для преобразования логического адреса в линейный адрес процессор выполняет следующие действия:

    1. С помощью смещения в селекторе сегмента находит дескриптор сегмента в таблице GDT или LDT и считывает его в процессор. (Этот шаг требуется только в случае загрузки нового селектора сегмента в сегментный регистр.)
    2. Проверяет дескриптор сегмента, чтобы выяснить наличие прав доступа и диапазон сегмента и убедиться, что сегмент доступен и смещение находится в пределах сегмента.
    3. Добавляет базовый адрес сегмента из дескриптора сегмента к смещению для получения линейного адреса.
    4. Если страничное преобразование не используется, процессор непосредственно сопоставляет линейный адрес физическому (то есть линейный адрес выводится на шину адреса процессора). Если линейное адресное пространство разбито на страницы, в процесс преобразования линейного адреса в физический добавляется второй уровень.

    В защищенном режиме архитектура Intel позволяет либо непосредственно сопоставить линейное адресное пространство большому объему физической памяти (например, в 4 ГБ ОЗУ), либо косвенно (с помощью страничной адресации) сопоставить его меньшему объему физической памяти и дискового пространства. Последний метод сопоставления линейного адресного пространства часто называют виртуальной памятью или виртуальной памятью со страничным преобразованием адресов по требованию.
    При использовании страничного преобразования процессор делит линейное адресное пространство на страницы фиксированного размера (обычно 4 Кб), которые сопоставляются физической памяти и/или дисковому пространству. Когда программа (или задача) ссылается на логический адрес в памяти, процессор преобразует этот адрес в линейный адрес, а затем с помощью механизма страничной адресации преобразует линейный адрес в соответствующий физический адрес. Если страница, содержащая линейный адрес, не загружена в настоящий момент в физическую память, процессор генерирует исключение по отсутствию страницы (#PF). В этом случае обработчик исключений обычно дает указание операционной системе или исполняемой программе загрузить эту страницу из дискового хранилища в физическую память (в процессе операции другая страница может быть записана из физической памяти на диск). После загрузки страницы в физическую память значение, возвращенное обработчиком исключений, инициирует повторный запуск инструкции, в результате которой было сгенерировано исключение. При сопоставлении линейных адресов физическому адресному пространству и при генерации исключений по отсутствию страницы (если это необходимо) процессор использует информацию из каталогов страниц и таблиц страниц, сохраненных в памяти.
    Страничное преобразование отличается от сегментации тем, что страницы имеют одинаковый размер. Размер сегментов обычно совпадает с размером содержащихся в них фрагментов кода или структур данных, тогда как размер страниц фиксирован. Если для преобразования адресов используется только сегментация, структура данных, загруженная в память, будет находиться в памяти целиком. Если используется страничное преобразование, структура данных может быть частично загружена в память, а частично оставаться на диске.
    Чтобы уменьшить число тактов шинного обмена, необходимых для преобразования адреса, последние использованные записи каталога страниц и таблицы страниц загружаются в кэш-память процессора в компоненты, называемые буферами быстрого преобразования адресов (TLB). Буферы TLB обеспечивают выполнение большинства запросов чтения в текущем каталоге страниц и таблицах страниц без расходования тактов шинного обмена. Дополнительные такты шинного обмена требуются только тогда, когда в буферах TLB не содержится запись таблицы страниц; обычно это происходит в том случае, если страница не использовалась долгое время.

    Таковы два основных различия в разработке и настройке пакета программ ОС Android в архитектуре Intel и в других архитектурах. Модель адресации селектора с базой и смещением в сочетании с локальной и глобальной таблицами дескрипторов (LDT и GDT) обеспечивает глубокое многоуровневое преобразование адресов физической памяти в виртуальную память с изменяемой точностью адресации блоков памяти. Это очень удобно для нестандартной конфигурации памяти в сегментированной среде с защищенными изолированными областями памяти. Но при неправильном использовании в этом случае замедляется доступ к памяти. Таким образом, важно иметь хорошее представление преобразования страниц памяти.

    Еще одно различие между архитектурами заключается в обработке системных прерываний. Например, в ARM существует готовый набор аппаратных прерываний в зарезервированном адресном пространстве с 0x0 по 0x20. Эти расположения содержат инструкции переходов к обработчику прерываний. В архитектуре Intel используется выделенный контроллер аппаратных прерываний. Аппаратные прерывания недоступны напрямую в адресном пространстве памяти процессора, но обрабатываются путем доступа к контроллеру прерываний Intel 8529. Преимущество такого подхода состоит в том, что обработчик прерываний поддерживает прямую обработку прерываний ввода-вывода для подключенных устройств. В архитектурах без выделенного контроллера прерываний для решения этой задачи обычно применяется перегрузка прерывания IRQ более сложным обработчиком.

    2.1.Отладка драйверов устройств

    Отладчик JTAG уровня ОС должен обеспечивать наглядное представление потоков ядра и активных модулей ядра, а также других данных, экспортированных ядром. Для отладки динамически загружаемых служб и драйверов можно использовать исправление ядра или модуль ядра, экспортирующий расположение метода инициализации драйвера и метода деструкции в памяти.

    Для отладки конфигурации системы и драйверов устройств важно иметь возможность прямого доступа и проверки содержимого регистров конфигурации устройств. Эти регистры и их содержимое можно просто отобразить в виде списка шестнадцатеричных значений, либо можно представить их в виде битовых полей, как показано на рис. 2. Побитовое наглядное представление позволяет лучше понять процесс изменения состояния устройства в ходе отладки, когда соответствующий драйвер устройства взаимодействует с ним.

    Рис. 2. Регистры устройства в окне битовых полей

    Анализ кода после распаковки сжатого ядра Android zImage в память осуществляется путем высвобождения управления выполнением в отладчике до достижения start_kernel. При этом предполагается, что был загружен файл vmlinux, содержащий символьную информацию ядра. На этом этапе можно использовать программные точки останова. До этого момента в процессе загрузки следует использовать только аппаратные точки останова на базе регистров (чтобы избежать ситуации, когда отладчик попытается записать инструкции точек останова в память, которая еще не инициализирована). Затем ОС успешно загружается после достижения цикла бездействия mwait_idle.

    Кроме того, если решение для отладки предоставляет доступ к трассировке инструкций на базе Last Branch Storage (LBR), эта возможность в сочетании со всеми обычными функциями управления выполнением в отладчике JTAG позволяет принудительно останавливать выполнение при исключениях и анализировать поток событий исключения в обратной последовательности, что позволяет определять причину неполадок при выполнении.

    Записи Last Branch Record можно использовать для трассировки выполнения кода начиная с нужной точки сброса. Поскольку данные о прерывании выполнения кода сохраняются в этих записях MSR, отладчики могут реконструировать выполненный код, считав адреса To и From, получив доступ к памяти между этими двумя адресами и выполнив дизассемблирование кода. Дизассемблированный код обычно отображается в графическом пользовательском интерфейсе трассировки в интерфейсе отладчика. Это может помочь выяснить, какой код выполнялся перед прерыванием SMI (System Management Interrupt) или другим исключением, если в месте прерывания настроена точка останова.

    2.2.Аппаратные точки останова

    Как и в ARM, процессоры Intel поддерживают инструкции программных точек останова, а также аппаратные точки останова для данных и кода. В архитектуре ARM обычно имеется набор выделенных регистров для точек останова и точек наблюдения. В стандартной реализации поддерживается по 2 регистра каждого из этих типов. Когда эти регистры содержат значения, процессор проверяет данные доступа, чтобы задать адрес в памяти для регистра счетчика программы или доступ к памяти на чтение или запись. При осуществлении доступа выполнение останавливается. Такое поведение отличается от программных точек останова: их выполнение останавливается при получении инструкции точки останова. Поскольку инструкция точки останова заменяет инструкцию сборки, которая должна находиться в заданном адресе памяти, выполнение останавливается до момента, в котором была бы выполнена инструкция.

    Реализация аппаратных точек останова в архитектурах Intel и ARM очень похожа, но у Intel чуть выше гибкость.

    На всех ядрах процессоров Intel Atom имеется 4 регистра DR, где хранятся адреса, сравниваемые с полученными адресами шины памяти до (иногда после) выборки памяти.

    Можно использовать все четыре этих регистра, чтобы предоставлять адреса, переключающие любое из следующих событий управления отладкой:

    • 00 — прерывание при выполнении инструкции
    • 01 — прерывание только при записи данных
    • 10 — не задано ЛИБО (если архитектура допускает) прерывание при чтении или записи ввода-вывода
    • 11 — прерывание при чтении или записи данных, но не при выборке инструкций

    Таким образом, все 4 аппаратные точки останова могут служить как точками останова, так и точками наблюдения. Точки наблюдения могут работать в режиме только записи либо чтения и записи (или ввода-вывода).

    2.3. Отладка для разных платформ: Intel® Atom™ и ARM

    Многие разработчики, работающие с Intel Atom, могут обладать опытом разработки главным образом для RISC-процессоров с фиксированной длиной инструкций. Такая архитектура используется в процессорах MIPS и ARM. Модель перекрестной отладки для архитектур Intel Atom и ARM не имеет существенных отличий. Многие принципиальные методы и проблемы отладки совпадают.

    Впрочем, разработка на ПК с архитектурой Intel для устройств с Intel Atom имеет два существенных преимущества, особенно если встроенная операционная система является производной от одной из массовых стандартных ОС, таких как Linux или Windows. Первое преимущество заключается в наличии огромного количества средств тестирования, анализа потребляемого электропитания и отладки для разработчиков, работающих с архитектурой Intel. Второе преимущество заключается в возможности локальной отладки функциональной правильности и многопоточности приложений. Это преимущество будет описано ниже.

    Между процессорами Intel Atom и ARM существует ряд различий, о которых должны знать разработчики. Эти различия описываются в следующих главах.

    2.4.Инструкции различной длины

    В наборах инструкций IA-32 и Intel 64 используются инструкции разной длины. На отладчик это влияет следующим образом: отладчик не может просто исследовать код с фиксированными 32-разрядными интервалами. Необходимо интерпретировать и дизассемблировать машинные инструкции приложения на основе контекста этих инструкций. Расположение следующей инструкции зависит от расположения, размера и правильного декодирования предыдущей инструкции. В архитектуре АРМ, напротив, отладчику достаточно следить за последовательностью кода, переключающую из режима ARM в режим Thumb или в расширенный режим Thumb и обратно. В пределах одного режима все инструкции и адреса памяти имеют размер либо 32, либо 16 разрядов. Разработчики микропрограмм и драйверов устройств, которым требуется точно адресовать вызовы к определенным регистрам устройства и использовать окно памяти отладчика, должны понимать возможное влияние инструкций различной длины.

    2.5. Аппаратные прерывания

    Еще одна разница в архитектуре может оказаться важной при отладке системного кода, отвечающего за обработку аппаратных прерываний. В архитектуре ARM векторы исключений:

    • 0 — сброс
    • 1 — отмена
    • 2 — отмена данных
    • 3 — отмена упреждающей выборки
    • 4 — неопределенная инструкция
    • 5 — прерывание (IRQ)
    • 6 — быстрое прерывание (FIRQ)

    назначаются адресам с 0x0 по 0x20. Эта область памяти защищена, в ней невозможно перераспределение. Обычно все векторные расположения с 0x0 по 0x20 содержат переходы к адресу памяти, где находится настоящий код обработчика исключений. Применительно к вектору сброса это означает, что 0x0 является переходом к расположению кода загрузки микропрограммы или платформы. Из-за такого подхода реализация аппаратных прерываний и обработчиков сигналов ОС в архитектуре ARM является менее гибкой, но с более высоким уровнем стандартизации. «Поймать» прерывание отладчиком очень просто: достаточно установить аппаратную точку останова в расположении вектора в диапазоне адресов с 0x0 по 0x20.

    В архитектуре Intel используется выделенный контроллер аппаратных прерываний. Прерывания

    • 0 — системный таймер
    • 1 — клавиатура
    • 2 — каскадный второй контроллер прерывания
    • 3 — последовательный интерфейс COM2
    • 4 — последовательный интерфейс COM1
    • 5 — параллельный интерфейс LPT
    • 6 — контроллер дисковода для гибких дисков
    • 7 — доступное прерывание
    • 8 — часы CMOS реального времени
    • 9 — звуковой адаптер
    • 10 — сетевой адаптер
    • 11 — доступное прерывание
    • 12 — доступное прерывание
    • 13 — числовой процессор
    • 14 — интерфейс жесткого диска IDE
    • 15 — интерфейс жесткого диска IDE

    — недоступны напрямую в адресном пространстве памяти процессора, но обрабатываются путем доступа к контроллеру прерываний Intel 8259. В списке прерываний видно, что контроллер поддерживает прямую обработку аппаратных прерываний ввода-вывода подключенных устройств, которые обрабатываются посредством прерываний IRQ или быстрых прерываний на платформе ARM. Эта возможность упрощает реализацию правильной обработки прерываний в архитектуре Intel на уровне ОС, особенно для ввода-вывода устройств. Сопоставление программных исключений, таких как отмены или сбои сегментации, также обрабатываются более гибко в архитектуре Intel; оно осуществляется портом контроллера прерываний, адресация к которому осуществляется через таблицу дескрипторов прерываний (IDT). Сопоставление IDT аппаратным прерываниям определяется системными программами. Кроме того, невозможно с легкостью получать такие исключения при отладке, не учитывающей системные программы. В архитектуре Intel для отладки программных событий, переключающих аппаратные прерывания, требуется определенное знание уровня ОС. Необходимо знать, каким образом сигналы ОС этих исключений соотносятся с контроллером прерываний. Даже в отладчике системного уровня сопоставленная в памяти таблица сигналов из ОС будет перехватывать исключения на уровне ОС, а не на аппаратном уровне.

    2.6.Одношаговые инструкции

    В архитектуре ARM нет явных одношаговых инструкций. В архитектуре Intel одношаговые переходы уровня сборки часто реализуются в отладчике напрямую с помощью таких инструкций. В ARM однократный переход инструкции реализуется в виде команды «Выполнять до прерывания». Отладчик должен проверить код, чтобы убедиться в том, что учитываются все пути кода (особенно при отступлении от инструкции ветви). С точки зрения реализации отладчика, при этом возникают некоторые издержки, но их объем незначителен, поскольку реализация «Выполнять до прерывания» все равно будет требоваться для переходов в высокоуровневом языке. Разработчики ПО должны учитывать это различие, поскольку оно может вызвать слегка иное поведение переходов.

    2.7.Сопоставление виртуальной памяти

    Реализация таблицы дескрипторов и преобразования страниц для сопоставления виртуальной памяти очень похожи, по крайней мере по принципу работы. В архитектуре Intel глобальная и локальная таблицы дескрипторов (GDT и LDT) позволяют управлять уровнем вложенности страниц памяти в виртуальном адресном пространстве. На рис. 3 представлено преобразование линейного адреса в физический в архитектуре Intel.

    Рис. 3. Преобразование страниц в архитектуре Intel®

    В архитектуре ARM таблицы страниц первого и второго уровней определяют более прямой поиск страниц виртуальной памяти глубиной не более одного или двух уровней. На рис. 4 показано преобразование линейного адреса в физический адрес.

    Рис. 4. Преобразование страниц в архитектуре ARM

    В архитектуре Intel поддерживаются различные уровни таблиц дескрипторов, таблиц страниц, доступ к 32-разрядному адресному пространству в реальном режиме и 64-разрядная адресация в защищенном режиме, зависимая от модели селектора «база : смещение». В различных режимах ARM модель «база : смещение» не используется. В архитектуре Intel можно явным образом задать более глубокий поиск таблиц страниц. В ARM заданный набор — две таблицы. В архитектуре Intel таблицы дескрипторов могут маскировать вложенные таблицы, поэтому фактическая глубина таблицы страницы может вдвое или втрое превышать глубину в архитектуре ARM.

    Механизм преобразования страниц Intel обеспечивает более высокую гибкость в работе с памятью системы и механизмов, используемых уровнем ОС для выделения определенных блоков памяти, таких как защищенных блоков для выполнения приложений. Но при этом разработчикам становится сложнее получить полную картину виртуализации памяти и устранить утечки памяти и нарушения доступа к памяти (сбои сегментации). Такая проблема была бы менее важна для полнофункциональных ОС с большим объемом памяти. Операционные системы реального времени, более зависимые от правильной работы с памятью, более уязвимы для таких неполадок.

    Технология гиперпоточности Intel®

    С точки зрения отладки, нет разницы между физическим ядром процессора и логическим ядром, реализованным при помощи технологии гиперпоточности Intel. Включение гиперпоточности происходит в процессе инициализации платформы в BIOS. Поэтому с точки зрения приложения нет сколько-нибудь заметной разницы между физическими и логическими ядрами. Эта технология обеспечивает одновременное выполнение нескольких потоков, поэтому отладка работает в точности так же, как на системах с несколькими физическими ядрами.

    Компоненты микросхемы ЦП и взаимодействие между ядрамиMulti-Core

    Из-за взаимодействия десятков программных и аппаратных компонентов внутри одной микросхемы существенно усложняется поиск причин неполадок при отладке. Взаимодействие между различными программными компонентами часто зависит от времени. При отладке кода со взаимодействием между компонентами обычно невозможно просто пошагово выполнять один определенный компонент. Традиционная отладка с помощью printf также неэффективна в данном случае, поскольку изменения при отладке могут отрицательно повлиять на временные параметры и привести к еще более серьезным проблемам, действуя наподобие физического принципа неопределенности Гейзенберга (согласно этому принципу, в частности, любые попытки измерения скорости и положения частицы сами по себе вносят возмущения в движение частицы и непредсказуемо меняют ее скорость, т. е. наблюдение характеристик меняет эти характеристики).

    4.1.Отладка трассировки событий

    Существует множество программных средств статического анализа и основанных на них технологий трассировки событий, которые помогают решить эту задачу. Они имеют общий принцип работы, состоящий в использовании буферной памяти DRAM небольшого размера — в эту память загружаются данные события во время их создания, а затем используется какой-либо механизм протоколирования, записывающий результат трассировки в файл журнала. Мониторинг трассировки данных может выполняться в режиме реального времени при непосредственном взаимодействии с API протоколирования данных трассировки или в автономном режиме с использованием различных средств просмотра трассировки для анализа сложных взаимосвязей между программными компонентами. Наиболее распространены три таких программных средства — LTTng*, Ftrace* и SVEN*.

    Далее приведена таблица сравнения этих трех средств, предназначенных в основном для операционных систем типа Linux* и поэтому совместимых с Android*.

    Рис. 5. Различные решения для трассировки событий

    Дополнительные сведения см. на соответствующих веб-сайтах:

  • Desarrolladores
  • Android*
  • Android*
  • Procesadores Intel® Atom™
  • Movilidad
  • Dirección URL
  • Slides da palestra: Escreva sua App Android sem gastar energia

    $
    0
    0

    Veja como foi a Palestra "Escreva sua App Android sem gastar energia" durante o FISL 14 na PUCRS em Porto Alegre. George, Community Manager de Android teve o prazer de representar a intel Brasil no palco do evento mais importante de Software Livre do Brasil.

    Focada em descrever as implicações do consumo de energia da sua App dentro do sistema operacional Android, esta apresentação além de indicar alguns dos gastões em dispositivos móveis, também abordou alguns métodos de como medir o consumo de energia e ferramentas para fazê-lo da maneira mais fácil.

    Confira os slides da palestra e entre em contato com o George para discutir mais sobre o assunto!

    Referências:

  • Android apps HAXM
  • Imagen del icono: 

    Viewing all 473 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>