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 = [