AndroidEmu: Android Emulation Library Overview
==============================================

Introduction:
-------------

I. Overview:
------------

The Android emulator is now a set of binaries which are built from essentially
two code bases:

- The 'classic' code-base, under $AOSP/external/qemu/, which is based on
  a really old version of QEMU 1.x, heavily patched, implementing a very large
  set of features.

- The 'QEMU2' code-base, under $AOSP/external/qemu-android/, which is based
  on a much more recent version of QEMU 2.x, very lightly patched at the moment,
  but which doesn't implement many Android-specific features to replace the
  classic emulator.

There are other differences, for example:

- The QEMU2 code base supports Android ARM64, MIPS64, x86 and x86_64
  system images (but not 32-bit ARM or MIPS). While the classic one only
  supports 32-bit ARM, MIPS, x86 and x86_64.

- The QEMU2 emulator has much better i/o performance through the use of
  virtio virtual devices.

- The classic emulator has a skinnable UI based on SDL2, with a prototype
  new one based on Qt. The QEMU2 one only displays a mere rectangle.

A small number of Android-specific features have been manually ported to the
QEMU2 code base to enable it to boot Android system images, which meant
rewriting from scratch existing support code (QEMU2 and classic internals are
quite different, so code sharing is actually pretty low).

However, this scheme doesn't really scale, and new features are being added to
the classic emulator at increased speed now, making this manual porting process
even more cumbersome.

To solve this, the classic codebase is going to be refactored into the
following:

  - A static library, named 'AndroidEmu', providing as many Android-specific
    emulation features as possible, in a way that doesn't depend on _any_ QEMU
    internals.

  - An 'engine' (QEMU1) that actually implements the emulation runtime
    and virtual hardware board.

  - A QEMU1-specific 'glue' between these two, that provides the necessary
    plumbing between the above two components.

Meanwhile, the QEMU2 code base will be modified to link against exactly the
same AndroidEmu library, with the help of its own custom 'glue', to form the
final QEMU2 binary.

The goals of AndroidEmu are the following:

  - Being a standalone component that comes with its own set of unit-tests
    that can be run on each build to catch regressions and issues as soon
    as possible (unlike the rest of QEMU1 / QEMU2 which is essentially
    not unit-testable).

  - Providing a UI layer decoupled from the underlying emulation engine
    (be it based on SDL2, as currently, or on Qt, as in the future).

This can be illustrated as follows:

    ____________     ____________     _________        ____________________
   |            |   |            |   |         |      |                    |
   | AndroidEmu | + | QEMU1 Glue | + |  QEMU1  |  ==  |  Classic emulator  |
   |____________|   |____________|   |_________|      |____________________|

    ____________     ____________     _________        ____________________
   |            |   |            |   |         |      |                    |
   | AndroidEmu | + | QEMU2 Glue | + |  QEMU2  |  ==  |   QEMU2 emulator   |
   |____________|   |____________|   |_________|      |____________________|

    ____________     ____________        ______________________________
   |            |   |            |      |                              |
   | AndroidEmu | + | unit tests |  ==  |  AndroidEmu unit-test suite  |
   |____________|   |____________|      |______________________________|



II. AndroidEmu interfaces:
--------------------------

To achieve this, a series of programming techniques will be used, for example
(all paths relative to $AOSP/external/qemu/):

- AndroidEmu provides generic functions that can be called directly from
  glue code. For example:

      android/telephony/: contains generic AndroidEmu code used to support
      GSM and SMS emulation.

      telephony/: contains QEMU1-specific code that uses the generic code
      and plugs it into the rest of the emulation engine (e.g. providing
      a CharDriverState* instance for the emulated modem serial line).

      NOTE: This is the current location, it will be moved to another
            directory that collects all glue code. See sections below.

- AndroidEmu can provide abstract interfaces that are implemented by the
  library in a generic way, but can also be overriden by a QEMU1/QEMU2
  specific implementation. For example (all paths relative to external/qemu/):

    Most of the AndroidEmu code that needs to deal with asynchronous events
    doesn't know if it runs within the QEMU event loop, or a more generic
    one.

    This is done by providing a generic abstract C++ interface to event loops
    (android::base::Looper), which has both a generic implementation, based
    on select(), as well as another one based on the QEMU main event loop
    (android::qemu::Looper).

    The code in AndroidEmu calls android::base::ThreadLooper::get() to
    retrieve the Looper instance for the current thread. By default this
    method lazily creates a generic android::base::Looper on-demand.

    However, when the main QEMU main thread starts, it will create a new
    android::qemu::Looper instance, and inject it through ThreadLooper::set()
    into the current thread.

    As such, any AndroidEmu code that runs in this thread will use QEMU1's
    main event loop without knowing it.

    For more details look at the following sources:

      android/base/async/Looper.h
      android/base/async/Looper.cpp
      android/base/async/ThreadLooper.h
      android-qemu1-glue/base/async/Looper.cpp

    Technically, only the last source file is part of the QEMU1-specific glue.

- The android::base::System class provides an abstract interface to the
  underlying host system. Unit-tests can use an android::base::TestSystem
  instance that will automatically inject itself into the process for the
  duration of the test to ensure that operations are as hermetic as possible.


III. Emulator UI Considerations:
--------------------------------

The code that handles the classic emulator's UI is currently divided into
the following groups :

  ui/console.c:
        QEMU1-specific code to manage console and displays.
        Essentially, QEMU differentiates between 'consoles' and 'displays'.

        A 'console' is an output surface that can hold either text or graphics.
        A given VM may have several consoles enabled at runtime.

        A display, named DisplayState in QEMU1, is something that can "display"
        one console at a time. It is possible to switch which console is
        being associated with a given DisplayState at runtime.

        Finally, a DisplayChangeListener is actually some code that actually
        shows a DisplayState to the screen, or does some specific handling
        (e.g. the VNC DisplayChangeListener can be used to send the
        DisplayState to a remote client using the VNC protocol.

  android-qemu1-glue/display.c:
        The DisplayChangeListener implementation used to send
        the DisplayState to the emulator's UI code.

  android/framebuffer.c:
        helper class acting as a bridge between the virtual framebuffer
        device, and the emulator's DisplayChangeListener.

  android/skin/:
        Main UI emulator code (responsible for displaying the
        emulator's window and its controls, handling use input). This only
        depends on stuff under android/utils/ and android/base/ and thus is
        already completely independent from QEMU1-specific code. However, it
        relies on client code to provide adequate callbacks to operate.

        The skin directory provides an abstract interface as well as an
        implementation backed by the SDL2 library.

  android/skin/qt/:
        An alternative implementation of the abstract skin interface based
        on the Qt widget toolkit (still experimental). Also independent from
        the rest of QEMU1.

        To build it, one must use the --ui=qt flag when calling
        android/configure.sh, android/rebuild.sh or package-release.sh

  android/emulator-window.c:
        The main glue code between the generic skin UI code and the QEMU1
        specific portions of the emulator. Provides appropriate callbacks.

This means that most of the UI code can already be placed in AndroidEmu, and
that it should also be possible to write a fake emulator backend for it in
order to generate a smaller program to test the emulator's UI, as in:

    ______________     __________________        ___________________________
   |              |   |                  |      |                           |
   |  AndroidEmu  | + |  Mock QEMU+Glue  |  ==  |  Android UI test program  |
   |______________|   |__________________|      |___________________________|

The goal of such a program would be to test the UI's features without having
to start a full emulation session (which typically also involves lots of manual
clicks to ensure that everything works correctly at the moment).

This effort is independent from the one described above but should simplify
and speed up work on the UI too.


IV. Refactoring plans:
----------------------

To get where we want, several things are going to change, and this section
tries to details them. Note that all details will probably appear in relevant
entries in http://b.android.com, this is a preview:


IV.1. Repository changes:
- - - - - - - - - - - - -

The manifest files used to manage emulator development branches will be
updated to rename the checkout names of the emulator source directories.

I.e. while the git repositories on android.googlesource.com will be the
same, the following changes in the checkout tree will happen:

  external/qemu          -> external/qemu1
  external/qemu-android  -> external/qemu2

When the source refactoring is completed, we may create a new git repository
named:

  external/android-emu/

To hold the shared AndroidEmu sources, and related build scripts.


IV.2. Source file changes:
- - - - - - - - - - - - - -

A new directory named external/qemu1/android-qemu1-glue/ will be created and
all sources under external/qemu1/android/ that still depend on QEMU-specific
declarations and functions will be moved here first.

The goal here is to keep all 'generic' AndroidEmu code under
external/qemu1/android/ at first (potentially moving it to its own location
like external/android-emu/ in the future).

After this, the code under android-qemu1-glue/ will be refactored into
generic and non-generic parts. The generic ones will be moved to
external/qemu1/android/, the non-generic ones will stay at the same location.

Similarly, external/qemu2/android-qemu2-glue/ will be created, and code
migrated there (however there is currently very little code in QEMU2 that
would be impacted by this).

As a reminder, there is a small amount of QEMU-specific code that deals with
Android that cannot be moved to the glue, due to the way the emulation engine
works. Examples are virtual hardware device implementations, initialization
and teardown code paths, or special features like transparent HTTP proxy
support which requires modifying the 'slirp' network stack (by adding only two
calls to AndroidEmu functions).


IV.3. Build system adjustments:
- - - - - - - - - - - - - - - -

The current build system assumes the following:

  - QEMU2 binaries can be rebuilt as stand-alone binaries before the QEMU1
    ones, through a specialized script (android/scripts/build-qemu-android.sh)

  - 'android/rebuild.sh' will rebuild QEMU1 binaries and copy QEMU2 prebuilts
    to the output directory location.

This only works because QEMU2 sources don't depend on other code from the
project, but this assumption will no longer hold true. As such, the build
system (more precisely android/configure.sh and android/rebuild.sh) will
have to be adjusted to ensure that:

  - AndroidEmu code is built as a standalone static library before anything
    else (with appropriate unit tests, which will be run as part of the
    build routine).

  - QEMU1 and QEMU2 are rebuilt after that, and include AndroidEmu headers,
    and link against the library when generating final executables. For
    example, this requires adding flags like --android-includes=<dir> and
    --android-libdir=<dir> to the QEMU2 'configure' script.

  - Ideally, all of AndroidEmu, QEMU1 and QEMU2 should be rebuilt by
    android/rebuild.sh at the same time (but in the correct order), to
    catch build breaks as soon as possible.

Note that this requires running the QEMU2 'configure' script which is
incredibly slow (e.g. about 15 seconds on a high-end workstation, for each
target host platform). It's probably a good idea to find a way to speed this
process.

Generally speaking, we want to keep the QEMU2 'configure' script as close from
upstream as possible. It's also not possible to put its output into version
control (it creates symlinks and Makefiles that contain hard-coded paths to
the original source directory in the build directory), so a more creative
solution will have to be found. Probably some way to template the 'configure'
output, given that the build uses hermetic (or pseudo-hermetic) toolchains
to build binaries.
