Home | History | Annotate | Download | only in emulation
      1 // Copyright (C) 2014 The Android Open Source Project
      2 //
      3 // This software is licensed under the terms of the GNU General Public
      4 // License version 2, as published by the Free Software Foundation, and
      5 // may be copied, distributed, and modified under those terms.
      6 //
      7 // This program is distributed in the hope that it will be useful,
      8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 // GNU General Public License for more details.
     11 
     12 #ifndef ANDROID_EMULATION_CPU_EMULATOR_H
     13 #define ANDROID_EMULATION_CPU_EMULATOR_H
     14 
     15 #include "android/base/String.h"
     16 
     17 namespace android {
     18 
     19 using ::android::base::String;
     20 
     21 // The list of CPU emulation acceleration technologies supported by the
     22 // Android emulator.
     23 //  CPU_ACCELERATOR_NONE means no acceleration is supported on this machine.
     24 //
     25 //  CPU_ACCELERATOR_KVM means Linux KVM, which requires a specific driver
     26 //  to be installed and that /dev/kvm is properly accessible by the current
     27 //  user.
     28 //
     29 //  CPU_ACCELERATOR_HAX means Intel's Hardware Accelerated eXecution,
     30 //  which can be installed on Windows and OS X machines running on an
     31 //  Intel processor.
     32 //
     33 enum CpuAccelerator {
     34     CPU_ACCELERATOR_NONE = 0,
     35     CPU_ACCELERATOR_KVM,
     36     CPU_ACCELERATOR_HAX,
     37 };
     38 
     39 // Return the CPU accelerator technology usable on the current machine.
     40 // This only returns CPU_ACCELERATOR_KVM or CPU_ACCELERATOR_HAX if the
     41 // corresponding accelerator can be used properly. Otherwise it will
     42 // return CPU_ACCELERATOR_NONE.
     43 CpuAccelerator  GetCurrentCpuAccelerator();
     44 
     45 // Return an ASCII string describing the state of the current CPU
     46 // acceleration on this machine. If GetCurrentCpuAccelerator() returns
     47 // CPU_ACCELERATOR_NONE this will contain a small explanation why
     48 // the accelerator cannot be used.
     49 String GetCurrentCpuAcceleratorStatus();
     50 
     51 // For unit testing/debugging purpose only, must be called before
     52 // GetCurrentCpuAccelerator().
     53 void SetCurrentCpuAcceleratorForTesting(CpuAccelerator accel,
     54                                         const char* status);
     55 
     56 }  // namespace android
     57 
     58 #endif  // ANDROID_EMULATION_CPU_EMULATOR_H
     59