-- -- Copyright 2024 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 -- -- https://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. INCLUDE PERFETTO MODULE graphs.search; -- Given a table containing the edges in a tree and a table of start_nodes, -- returns the ids of all the nodes reachable by walking up the tree from each -- of the start nodes. CREATE PERFETTO MACRO _tree_reachable_ancestors_or_self( tree TableOrSubquery, start_nodes TableOrSubquery ) RETURNS TableOrSubquery AS ( SELECT node_id AS id FROM graph_reachable_dfs!( (SELECT id AS source_node_id, parent_id AS dest_node_id FROM $tree), (SELECT id AS node_id FROM $start_nodes) ) );