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/BUILD b/BUILD
index 49778a3..eef3522 100644
--- a/BUILD
+++ b/BUILD
@@ -1786,6 +1786,8 @@
"src/trace_processor/prelude/functions/register_function.h",
"src/trace_processor/prelude/functions/sqlite3_str_split.cc",
"src/trace_processor/prelude/functions/sqlite3_str_split.h",
+ "src/trace_processor/prelude/functions/stack_functions.cc",
+ "src/trace_processor/prelude/functions/stack_functions.h",
"src/trace_processor/prelude/functions/utils.h",
"src/trace_processor/prelude/functions/window_functions.h",
],
@@ -1910,6 +1912,7 @@
name = "src_trace_processor_stdlib_experimental_experimental",
srcs = [
"src/trace_processor/stdlib/experimental/android_broadcast.sql",
+ "src/trace_processor/stdlib/experimental/proto_path.sql",
],
)
@@ -4058,6 +4061,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",
],
visibility = [