move dumpstate and dumpsys from frameworks/base to frameworks/native

Change-Id: I8a5318022ce5cd3e7c8055f21fe5da74639aa6c0
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp
new file mode 100644
index 0000000..7dad6b6
--- /dev/null
+++ b/cmds/dumpsys/dumpsys.cpp
@@ -0,0 +1,85 @@
+/*
+ * Command that dumps interesting system state to the log.
+ *
+ */
+
+#define LOG_TAG "dumpsys"
+
+#include <utils/Log.h>
+#include <binder/Parcel.h>
+#include <binder/ProcessState.h>
+#include <binder/IServiceManager.h>
+#include <utils/TextOutput.h>
+#include <utils/Vector.h>
+
+#include <getopt.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+using namespace android;
+
+static int sort_func(const String16* lhs, const String16* rhs)
+{
+    return lhs->compare(*rhs);
+}
+
+int main(int argc, char* const argv[])
+{
+    sp<IServiceManager> sm = defaultServiceManager();
+    fflush(stdout);
+    if (sm == NULL) {
+		ALOGE("Unable to get default service manager!");
+        aerr << "dumpsys: Unable to get default service manager!" << endl;
+        return 20;
+    }
+
+    Vector<String16> services;
+    Vector<String16> args;
+    if (argc == 1) {
+        services = sm->listServices();
+        services.sort(sort_func);
+        args.add(String16("-a"));
+    } else {
+        services.add(String16(argv[1]));
+        for (int i=2; i<argc; i++) {
+            args.add(String16(argv[i]));
+        }
+    }
+
+    const size_t N = services.size();
+
+    if (N > 1) {
+        // first print a list of the current services
+        aout << "Currently running services:" << endl;
+    
+        for (size_t i=0; i<N; i++) {
+            sp<IBinder> service = sm->checkService(services[i]);
+            if (service != NULL) {
+                aout << "  " << services[i] << endl;
+            }
+        }
+    }
+
+    for (size_t i=0; i<N; i++) {
+        sp<IBinder> service = sm->checkService(services[i]);
+        if (service != NULL) {
+            if (N > 1) {
+                aout << "------------------------------------------------------------"
+                        "-------------------" << endl;
+                aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
+            }
+            int err = service->dump(STDOUT_FILENO, args);
+            if (err != 0) {
+                aerr << "Error dumping service info: (" << strerror(err)
+                        << ") " << services[i] << endl;
+            }
+        } else {
+            aerr << "Can't find service: " << services[i] << endl;
+        }
+    }
+
+    return 0;
+}