auto import from //depot/cupcake/@135843
diff --git a/dumpeventlog/.classpath b/dumpeventlog/.classpath
new file mode 100644
index 0000000..b0326c8
--- /dev/null
+++ b/dumpeventlog/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/ddmlib"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/dumpeventlog/.project b/dumpeventlog/.project
new file mode 100644
index 0000000..c416f4f
--- /dev/null
+++ b/dumpeventlog/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>dumpeventlog</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/dumpeventlog/Android.mk b/dumpeventlog/Android.mk
new file mode 100644
index 0000000..7bb870d
--- /dev/null
+++ b/dumpeventlog/Android.mk
@@ -0,0 +1,5 @@
+# Copyright 2007 The Android Open Source Project
+#
+DUMPEVENTLOG_LOCAL_DIR := $(call my-dir)
+include $(DUMPEVENTLOG_LOCAL_DIR)/etc/Android.mk
+include $(DUMPEVENTLOG_LOCAL_DIR)/src/Android.mk
diff --git a/dumpeventlog/etc/Android.mk b/dumpeventlog/etc/Android.mk
new file mode 100644
index 0000000..8094734
--- /dev/null
+++ b/dumpeventlog/etc/Android.mk
@@ -0,0 +1,8 @@
+# Copyright 2007 The Android Open Source Project
+#
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_PREBUILT_EXECUTABLES := dumpeventlog
+include $(BUILD_HOST_PREBUILT)
+
diff --git a/dumpeventlog/etc/dumpeventlog b/dumpeventlog/etc/dumpeventlog
new file mode 100755
index 0000000..56f8c22
--- /dev/null
+++ b/dumpeventlog/etc/dumpeventlog
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright 2005-2007, The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+jarfile=dumpeventlog.jar
+frameworkdir="$progdir"
+libdir="$progdir"
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+    frameworkdir=`dirname "$progdir"`/tools/lib
+    libdir=`dirname "$progdir"`/tools/lib
+fi
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+    frameworkdir=`dirname "$progdir"`/framework
+    libdir=`dirname "$progdir"`/lib
+fi
+if [ ! -r "$frameworkdir/$jarfile" ]
+then
+    echo `basename "$prog"`": can't find $jarfile"
+    exit 1
+fi
+
+
+# Check args.
+if [ debug = "$1" ]; then
+    # add this in for debugging
+    java_debug=-agentlib:jdwp=transport=dt_socket,server=y,address=8050,suspend=y
+    shift 1
+else
+    java_debug=
+fi
+
+# Mac OS X needs an additional arg, or you get an "illegal thread" complaint.
+if [ `uname` = "Darwin" ]; then
+    os_opts="-XstartOnFirstThread"
+else
+    os_opts=
+fi
+
+if [ "$OSTYPE" = "cygwin" ] ; then
+    jarpath=`cygpath -w  "$frameworkdir/$jarfile"`
+    progdir=`cygpath -w  "$progdir"`
+else
+    jarpath="$frameworkdir/$jarfile"
+fi
+
+# need to use "java.ext.dirs" because "-jar" causes classpath to be ignored
+# might need more memory, e.g. -Xmx128M
+exec java -Xmx128M $os_opts $java_debug -Djava.ext.dirs="$frameworkdir" -Djava.library.path="$libdir" -jar "$jarpath" "$@"
diff --git a/dumpeventlog/etc/manifest.txt b/dumpeventlog/etc/manifest.txt
new file mode 100644
index 0000000..0eea915
--- /dev/null
+++ b/dumpeventlog/etc/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.android.dumpeventlog.DumpEventLog
diff --git a/dumpeventlog/src/Android.mk b/dumpeventlog/src/Android.mk
new file mode 100644
index 0000000..bf99375
--- /dev/null
+++ b/dumpeventlog/src/Android.mk
@@ -0,0 +1,14 @@
+# Copyright 2007 The Android Open Source Project
+#
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_JAR_MANIFEST := ../etc/manifest.txt
+LOCAL_JAVA_LIBRARIES := \
+	ddmlib
+LOCAL_MODULE := dumpeventlog
+
+include $(BUILD_HOST_JAVA_LIBRARY)
+
diff --git a/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java b/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java
new file mode 100644
index 0000000..6c528e1
--- /dev/null
+++ b/dumpeventlog/src/com/android/dumpeventlog/DumpEventLog.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dumpeventlog;
+
+import com.android.ddmlib.AndroidDebugBridge;
+import com.android.ddmlib.Device;
+import com.android.ddmlib.Log;
+import com.android.ddmlib.Log.ILogOutput;
+import com.android.ddmlib.Log.LogLevel;
+import com.android.ddmlib.log.LogReceiver;
+import com.android.ddmlib.log.LogReceiver.ILogListener;
+import com.android.ddmlib.log.LogReceiver.LogEntry;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Connects to a device using ddmlib and dumps its event log as long as the device is connected. 
+ */
+public class DumpEventLog {
+
+    /**
+     * Custom {@link ILogListener} to receive and save the event log raw output.
+     */
+    private static class LogWriter implements ILogListener {
+        private FileOutputStream mOutputStream;
+        private LogReceiver mReceiver;
+
+        public LogWriter(String filePath) throws IOException {
+            mOutputStream = new FileOutputStream(filePath);
+        }
+
+        public void newData(byte[] data, int offset, int length) {
+            try {
+                mOutputStream.write(data, offset, length);
+            } catch (IOException e) {
+                if (mReceiver != null) {
+                    mReceiver.cancel();
+                }
+                System.out.println(e);
+            }
+        }
+
+        public void newEntry(LogEntry entry) {
+            // pass
+        }
+
+        public void setReceiver(LogReceiver receiver) {
+            mReceiver = receiver;
+        }
+
+        public void done() throws IOException {
+            mOutputStream.close();
+        }
+    }
+
+    public static void main(String[] args) {
+        if (args.length != 2) {
+            System.out.println("Usage: dumpeventlog <device s/n> <filepath>");
+            return;
+        }
+        
+        // redirect the log output to /dev/null
+        Log.setLogOutput(new ILogOutput() {
+            public void printAndPromptLog(LogLevel logLevel, String tag, String message) {
+                // pass
+            }
+
+            public void printLog(LogLevel logLevel, String tag, String message) {
+                // pass
+            }
+        });
+        
+        // init the lib
+        AndroidDebugBridge.init(false /* debugger support */);
+        
+        try {
+            AndroidDebugBridge bridge = AndroidDebugBridge.createBridge();
+            
+            // we can't just ask for the device list right away, as the internal thread getting
+            // them from ADB may not be done getting the first list.
+            // Since we don't really want getDevices() to be blocking, we wait here manually.
+            int count = 0;
+            while (bridge.hasInitialDeviceList() == false) {
+                try {
+                    Thread.sleep(100);
+                    count++;
+                } catch (InterruptedException e) {
+                    // pass
+                }
+                
+                // let's not wait > 10 sec.
+                if (count > 100) {
+                    System.err.println("Timeout getting device list!");
+                    return;
+                }
+            }
+
+            // now get the devices
+            Device[] devices = bridge.getDevices();
+            
+            for (Device device : devices) {
+                if (device.getSerialNumber().equals(args[0])) {
+                    try {
+                        grabLogFrom(device, args[1]);
+                    } catch (FileNotFoundException e) {
+                        e.printStackTrace();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    return;
+                }
+            }
+            
+            System.err.println("Could not find " + args[0]);
+        } finally {
+            AndroidDebugBridge.terminate();
+        }
+    }
+
+    private static void grabLogFrom(Device device, String filePath) throws IOException {
+        LogWriter writer = new LogWriter(filePath);
+        LogReceiver receiver = new LogReceiver(writer);
+        writer.setReceiver(receiver);
+
+        device.runEventLogService(receiver);
+        
+        writer.done();
+    }
+}