dumpsys.cpp revision f45fa6b2853cc32385375a0b63ee39ad6a968869
1f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross/* 2f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Command that dumps interesting system state to the log. 3f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * 4f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 5f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 6f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#define LOG_TAG "dumpsys" 7f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 8f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Log.h> 9f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <binder/Parcel.h> 10f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <binder/ProcessState.h> 11f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <binder/IServiceManager.h> 12f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/TextOutput.h> 13f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Vector.h> 14f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 15f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <getopt.h> 16f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <stdlib.h> 17f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <stdio.h> 18f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <string.h> 19f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <unistd.h> 20f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <sys/time.h> 21f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 22f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossusing namespace android; 23f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 24f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossstatic int sort_func(const String16* lhs, const String16* rhs) 25f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross{ 26f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross return lhs->compare(*rhs); 27f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross} 28f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 29f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossint main(int argc, char* const argv[]) 30f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross{ 31f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross sp<IServiceManager> sm = defaultServiceManager(); 32f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross fflush(stdout); 33f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (sm == NULL) { 34f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross ALOGE("Unable to get default service manager!"); 35f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aerr << "dumpsys: Unable to get default service manager!" << endl; 36f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross return 20; 37f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 38f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 39f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross Vector<String16> services; 40f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross Vector<String16> args; 41f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (argc == 1) { 42f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross services = sm->listServices(); 43f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross services.sort(sort_func); 44f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross args.add(String16("-a")); 45f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } else { 46f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross services.add(String16(argv[1])); 47f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross for (int i=2; i<argc; i++) { 48f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross args.add(String16(argv[i])); 49f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 50f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 51f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 52f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross const size_t N = services.size(); 53f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 54f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (N > 1) { 55f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross // first print a list of the current services 56f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aout << "Currently running services:" << endl; 57f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 58f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross for (size_t i=0; i<N; i++) { 59f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross sp<IBinder> service = sm->checkService(services[i]); 60f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (service != NULL) { 61f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aout << " " << services[i] << endl; 62f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 63f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 64f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 65f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 66f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross for (size_t i=0; i<N; i++) { 67f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross sp<IBinder> service = sm->checkService(services[i]); 68f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (service != NULL) { 69f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (N > 1) { 70f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aout << "------------------------------------------------------------" 71f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross "-------------------" << endl; 72f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aout << "DUMP OF SERVICE " << services[i] << ":" << endl; 73f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 74f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross int err = service->dump(STDOUT_FILENO, args); 75f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross if (err != 0) { 76f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aerr << "Error dumping service info: (" << strerror(err) 77f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross << ") " << services[i] << endl; 78f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 79f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } else { 80f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross aerr << "Can't find service: " << services[i] << endl; 81f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 82f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross } 83f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 84f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross return 0; 85f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross} 86