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/, 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.
