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