summaryrefslogtreecommitdiffstats
path: root/libutils/include/utils/CallStack.h
diff options
context:
space:
mode:
authorVijay Venkatraman <vijaykv@google.com>2017-01-05 10:39:38 -0800
committerVijay Venkatraman <vijaykv@google.com>2017-01-24 22:51:36 +0000
commit75acc7bf81d43850694d39d2c45a20ca81d99379 (patch)
tree39f8b964c90102fbc6a8b954110342724cf6f394 /libutils/include/utils/CallStack.h
parent897bc9b2b38ead33aa883359593eb4356b68bda2 (diff)
downloadsystem_core-75acc7bf81d43850694d39d2c45a20ca81d99379.tar.gz
system_core-75acc7bf81d43850694d39d2c45a20ca81d99379.tar.bz2
system_core-75acc7bf81d43850694d39d2c45a20ca81d99379.zip
Exporting C++ headers from system/core
Moved headers from include/libutils and include/libsysutils to libutils/include and libsysutils/include respectively, so they can be exported via these libs. They needed to be moved since Soong does not allow export from external folder. Added symlink from old locations. They are needed since Soong includes system/core/include by default. Once all modules are cleaned up to explicitly add the required libs, the symlinks will be removed. Moved headers of libutils to libutils_headers. They should be used by modules for header-only inlines. Added libutils_headers as dependency of libutils. Split of C++ headers into those that have no dependency and those that have dependency on libutils.so will be handled in a later CL. Test: Add above libs to shared lib of local module Change-Id: I122db72056b26b1f39bad1d9a0c2a1c5efda3550
Diffstat (limited to 'libutils/include/utils/CallStack.h')
-rw-r--r--libutils/include/utils/CallStack.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/libutils/include/utils/CallStack.h b/libutils/include/utils/CallStack.h
new file mode 100644
index 000000000..27e89f462
--- /dev/null
+++ b/libutils/include/utils/CallStack.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 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.
+ */
+
+#ifndef ANDROID_CALLSTACK_H
+#define ANDROID_CALLSTACK_H
+
+#include <android/log.h>
+#include <backtrace/backtrace_constants.h>
+#include <utils/String8.h>
+#include <utils/Vector.h>
+
+#include <stdint.h>
+#include <sys/types.h>
+
+namespace android {
+
+class Printer;
+
+// Collect/print the call stack (function, file, line) traces for a single thread.
+class CallStack {
+public:
+ // Create an empty call stack. No-op.
+ CallStack();
+ // Create a callstack with the current thread's stack trace.
+ // Immediately dump it to logcat using the given logtag.
+ CallStack(const char* logtag, int32_t ignoreDepth=1);
+ ~CallStack();
+
+ // Reset the stack frames (same as creating an empty call stack).
+ void clear() { mFrameLines.clear(); }
+
+ // Immediately collect the stack traces for the specified thread.
+ // The default is to dump the stack of the current call.
+ void update(int32_t ignoreDepth=1, pid_t tid=BACKTRACE_CURRENT_THREAD);
+
+ // Dump a stack trace to the log using the supplied logtag.
+ void log(const char* logtag,
+ android_LogPriority priority = ANDROID_LOG_DEBUG,
+ const char* prefix = 0) const;
+
+ // Dump a stack trace to the specified file descriptor.
+ void dump(int fd, int indent = 0, const char* prefix = 0) const;
+
+ // Return a string (possibly very long) containing the complete stack trace.
+ String8 toString(const char* prefix = 0) const;
+
+ // Dump a serialized representation of the stack trace to the specified printer.
+ void print(Printer& printer) const;
+
+ // Get the count of stack frames that are in this call stack.
+ size_t size() const { return mFrameLines.size(); }
+
+private:
+ Vector<String8> mFrameLines;
+};
+
+}; // namespace android
+
+#endif // ANDROID_CALLSTACK_H