blob: 2a53f4b348fc72a854bbb8ab6a427129a0f2a322 [file] [log] [blame]
/* Copyright (C) 2007-2008 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
*/
#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include "android/utils/compiler.h"
ANDROID_BEGIN_HEADER
#define VERBOSE_TAG_LIST \
_VERBOSE_TAG(init, "emulator initialization") \
_VERBOSE_TAG(console, "control console") \
_VERBOSE_TAG(modem, "emulated GSM modem") \
_VERBOSE_TAG(radio, "emulated GSM AT Command channel") \
_VERBOSE_TAG(keys, "key bindings & presses") \
_VERBOSE_TAG(slirp, "internal router/firewall") \
_VERBOSE_TAG(timezone, "host timezone detection" ) \
_VERBOSE_TAG(socket, "network sockets") \
_VERBOSE_TAG(proxy, "network proxy support") \
_VERBOSE_TAG(audio, "audio sub-system") \
_VERBOSE_TAG(audioin, "audio input backend") \
_VERBOSE_TAG(audioout, "audio output backend") \
_VERBOSE_TAG(surface, "video surface support") \
_VERBOSE_TAG(qemud, "qemud multiplexer daemon") \
_VERBOSE_TAG(gps, "emulated GPS") \
_VERBOSE_TAG(nand_limits, "nand/flash read/write thresholding") \
_VERBOSE_TAG(hw_control, "emulated power/flashlight/led/vibrator") \
_VERBOSE_TAG(avd_config, "android virtual device configuration") \
_VERBOSE_TAG(sensors, "emulated sensors") \
_VERBOSE_TAG(memcheck, "memory checker") \
_VERBOSE_TAG(camera, "camera") \
_VERBOSE_TAG(adevice, "android device connected via port forwarding") \
_VERBOSE_TAG(sensors_port, "sensors emulator connected to android device") \
_VERBOSE_TAG(mtport, "multi-touch emulator connected to android device") \
_VERBOSE_TAG(mtscreen, "multi-touch screen emulation") \
_VERBOSE_TAG(gles, "hardware OpenGLES emulation") \
_VERBOSE_TAG(gles1emu, "emulated GLESv1 renderer") \
_VERBOSE_TAG(adbserver, "ADB server") \
_VERBOSE_TAG(adbclient, "ADB QEMU client") \
_VERBOSE_TAG(adb, "ADB debugger") \
_VERBOSE_TAG(asconnector, "Asynchronous socket connector") \
_VERBOSE_TAG(asyncsocket, "Asynchronous socket") \
_VERBOSE_TAG(sdkctlsocket, "Socket tethering to SdkControl server") \
_VERBOSE_TAG(updater, "Update checker") \
_VERBOSE_TAG(metrics, "Metrics reporting") \
_VERBOSE_TAG(rotation, "Device rotation debugging") \
_VERBOSE_TAG(goldfishsync, "Goldfish Sync Device") \
_VERBOSE_TAG(syncthreads, "HostGPU Sync Threads") \
#define _VERBOSE_TAG(x,y) VERBOSE_##x,
typedef enum {
VERBOSE_TAG_LIST
VERBOSE_MAX /* do not remove */
} VerboseTag;
#undef _VERBOSE_TAG
extern uint64_t android_verbose;
// Enable/disable verbose logs from the base/* family.
extern void base_enable_verbose_logs();
extern void base_disable_verbose_logs();
#define VERBOSE_ENABLE(tag) \
android_verbose |= (1ULL << VERBOSE_##tag)
#define VERBOSE_DISABLE(tag) \
android_verbose &= (1ULL << VERBOSE_##tag)
#define VERBOSE_CHECK(tag) \
((android_verbose & (1ULL << VERBOSE_##tag)) != 0)
#define VERBOSE_CHECK_ANY() \
(android_verbose != 0)
#define VERBOSE_PRINT(tag,...) \
do { if (VERBOSE_CHECK(tag)) dprint(__VA_ARGS__); } while (0)
// This omits the "emulator: " prefix.
#define VERBOSE_DPRINT(tag,format,...) \
do { if (VERBOSE_CHECK(tag)) { \
dprintn(format "\n", \
##__VA_ARGS__); } } while(0)
#define VERBOSE_FUNCTION_PRINT(tag,format,...) \
do { if (VERBOSE_CHECK(tag)) \
dprintn("emulator: %s: " format "\n", \
__func__, ##__VA_ARGS__); } while(0)
// This omits the "emulator: " prefix.
#define VERBOSE_FUNCTION_DPRINT(tag,format,...) \
do { if (VERBOSE_CHECK(tag)) \
dprintn("%s: " format "\n", \
__func__, ##__VA_ARGS__); } while(0)
#define VERBOSE_TID_PRINT(tag,...) \
do { if (VERBOSE_CHECK(tag)) \
android_tid_function_print(true, NULL, __VA_ARGS__); \
} while (0)
// This omits the "emulator: " prefix.
#define VERBOSE_TID_DPRINT(tag,...) \
do { if (VERBOSE_CHECK(tag)) \
android_tid_function_print(false, NULL, __VA_ARGS__); } \
while (0)
#define VERBOSE_TID_FUNCTION_PRINT(tag,...) \
do { if (VERBOSE_CHECK(tag)) \
android_tid_function_print(true, __func__, __VA_ARGS__); } \
while (0)
// This omits the "emulator: " prefix.
#define VERBOSE_TID_FUNCTION_DPRINT(tag,...) \
do { if (VERBOSE_CHECK(tag)) \
android_tid_function_print(false, __func__, __VA_ARGS__); } \
while (0)
/** DEBUG TRACE SUPPORT
**
** Debug messages can be sent by calling these functions:
**
** 'dprint' prints "emulator: ", the message, then appends a '\n'
** 'dprintn' prints the message as is
** 'dprintnv' is 'dprintn' but allows you to use a va_list argument
** 'dwarning' prints "emulator: WARNING: ", then appends a '\n'
** 'derror' prints "emulator: ERROR: ", then appends a '\n'
*/
extern void dprint( const char* format, ... );
extern void dprintn( const char* format, ... );
extern void dprintnv( const char* format, va_list args );
extern void dwarning( const char* format, ... );
extern void derror( const char* format, ... );
/** MULTITHREADED DEBUG TRACING
**
** 'android_tid_function_print' is for tracing in multi-threaded situations.
** It prints "emulator: " or not (depending on |use_emulator_prefix|),
** the thread id, a function name (|function|), the message, and finally '\n'.
*/
extern void android_tid_function_print(bool use_emulator_prefix,
const char* function,
const char* format, ... );
/** STDOUT/STDERR REDIRECTION
**
** allows you to shut temporarily shutdown stdout/stderr
** this is useful to get rid of debug messages from ALSA and esd
** on Linux.
**/
extern void stdio_disable( void );
extern void stdio_enable( void );
ANDROID_END_HEADER