Add SQL support to generate stacks.
This patch adds the ability control the stacks that you put into pprof
profiles (via the existing EXPERIMENTAL_PROFILE function).
EXPERIMENTAL_PROFILE function now takes a BLOB first parameter that
is a serialized form of a Stack object which is just a collection of
frames.
We also have the following functions to create such Stacks
* CAT_STACKS(root, level_1, …, leaf): Creates a Stack by concatenating
Frames or other Stacks. Also accepts strings for which it generates
a fake Frame
* STACK_FROM_STACK_PROFILE_FRAME(frame_id LONG): Takes a frame_id
(reference to the stack_profile_frame table)
* STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id LONG): Takes a
callsite_id (reference to the stack_profile_callsite table) and
generates a list of frames (by walking the stack_profile_callsite
table)
As a result we can now implement protoprofile as a SQL query, which this
patch also does to show how these functions can be used.
Change-Id: I9b59b7e1a457017cb135df5819e960783816bc95
diff --git a/Android.bp b/Android.bp
index 4d69c9a..4bff668 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6787,6 +6787,7 @@
srcs: [
"protos/perfetto/trace_processor/cloud_trace_processor.proto",
"protos/perfetto/trace_processor/metatrace_categories.proto",
+ "protos/perfetto/trace_processor/stack.proto",
"protos/perfetto/trace_processor/trace_processor.proto",
],
tools: [
@@ -6797,6 +6798,7 @@
out: [
"external/perfetto/protos/perfetto/trace_processor/cloud_trace_processor.pbzero.cc",
"external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pbzero.cc",
+ "external/perfetto/protos/perfetto/trace_processor/stack.pbzero.cc",
"external/perfetto/protos/perfetto/trace_processor/trace_processor.pbzero.cc",
],
}
@@ -6807,6 +6809,7 @@
srcs: [
"protos/perfetto/trace_processor/cloud_trace_processor.proto",
"protos/perfetto/trace_processor/metatrace_categories.proto",
+ "protos/perfetto/trace_processor/stack.proto",
"protos/perfetto/trace_processor/trace_processor.proto",
],
tools: [
@@ -6817,6 +6820,7 @@
out: [
"external/perfetto/protos/perfetto/trace_processor/cloud_trace_processor.pbzero.h",
"external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pbzero.h",
+ "external/perfetto/protos/perfetto/trace_processor/stack.pbzero.h",
"external/perfetto/protos/perfetto/trace_processor/trace_processor.pbzero.h",
],
export_include_dirs: [
@@ -9880,6 +9884,7 @@
"src/trace_processor/prelude/functions/pprof_functions.cc",
"src/trace_processor/prelude/functions/register_function.cc",
"src/trace_processor/prelude/functions/sqlite3_str_split.cc",
+ "src/trace_processor/prelude/functions/stack_functions.cc",
],
}
@@ -10000,6 +10005,7 @@
"src/trace_processor/stdlib/common/slices.sql",
"src/trace_processor/stdlib/common/timestamps.sql",
"src/trace_processor/stdlib/experimental/android_broadcast.sql",
+ "src/trace_processor/stdlib/experimental/proto_path.sql",
],
cmd: "$(location tools/gen_amalgamated_sql.py) --namespace=stdlib --cpp-out=$(out) $(in)",
out: [