-- -- Copyright 2019 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. -- SELECT RUN_METRIC('android/process_mem.sql'); SELECT RUN_METRIC('android/span_view_stats.sql', 'table_name', 'anon_rss'); SELECT RUN_METRIC('android/span_view_stats.sql', 'table_name', 'file_rss'); SELECT RUN_METRIC('android/span_view_stats.sql', 'table_name', 'swap'); SELECT RUN_METRIC('android/span_view_stats.sql', 'table_name', 'anon_and_swap'); SELECT RUN_METRIC('android/span_view_stats.sql', 'table_name', 'java_heap'); SELECT RUN_METRIC('android/mem_stats_priority_breakdown.sql', 'table_name', 'anon_rss'); SELECT RUN_METRIC('android/mem_stats_priority_breakdown.sql', 'table_name', 'file_rss'); SELECT RUN_METRIC('android/mem_stats_priority_breakdown.sql', 'table_name', 'swap'); SELECT RUN_METRIC('android/mem_stats_priority_breakdown.sql', 'table_name', 'anon_and_swap'); SELECT RUN_METRIC('android/mem_stats_priority_breakdown.sql', 'table_name', 'java_heap'); -- Find out all process + priority pairs with data to drive the joins (no outer join in sqlite). DROP VIEW IF EXISTS mem_all_processes; CREATE VIEW mem_all_processes AS SELECT DISTINCT process_name FROM ( SELECT process_name FROM anon_rss_stats_proto UNION SELECT process_name FROM file_rss_stats_proto UNION SELECT process_name FROM swap_stats_proto UNION SELECT process_name FROM anon_and_swap_stats_proto UNION SELECT process_name FROM java_heap_stats_proto ); DROP VIEW IF EXISTS mem_all_process_priorities; CREATE VIEW mem_all_process_priorities AS SELECT DISTINCT process_name, priority FROM ( SELECT process_name, priority FROM anon_rss_by_priority_stats_proto UNION SELECT process_name, priority FROM file_rss_by_priority_stats_proto UNION SELECT process_name, priority FROM swap_by_priority_stats_proto UNION SELECT process_name, priority FROM anon_and_swap_by_priority_stats_proto UNION SELECT process_name, priority FROM java_heap_by_priority_stats_proto ); DROP VIEW IF EXISTS process_priority_view; CREATE VIEW process_priority_view AS SELECT process_name, AndroidMemoryMetric_PriorityBreakdown( 'priority', priority, 'counters', AndroidMemoryMetric_ProcessMemoryCounters( 'anon_rss', anon_rss_by_priority_stats_proto.proto, 'file_rss', file_rss_by_priority_stats_proto.proto, 'swap', swap_by_priority_stats_proto.proto, 'anon_and_swap', anon_and_swap_by_priority_stats_proto.proto, 'java_heap', java_heap_by_priority_stats_proto.proto ) ) AS priority_breakdown_proto FROM mem_all_process_priorities LEFT JOIN anon_rss_by_priority_stats_proto USING (process_name, priority) LEFT JOIN file_rss_by_priority_stats_proto USING (process_name, priority) LEFT JOIN swap_by_priority_stats_proto USING (process_name, priority) LEFT JOIN anon_and_swap_by_priority_stats_proto USING (process_name, priority) LEFT JOIN java_heap_by_priority_stats_proto USING (process_name, priority); DROP VIEW IF EXISTS process_metrics_view; CREATE VIEW process_metrics_view AS SELECT AndroidMemoryMetric_ProcessMetrics( 'process_name', process_name, 'total_counters', AndroidMemoryMetric_ProcessMemoryCounters( 'anon_rss', anon_rss_stats_proto.proto, 'file_rss', file_rss_stats_proto.proto, 'swap', swap_stats_proto.proto, 'anon_and_swap', anon_and_swap_stats_proto.proto, 'java_heap', java_heap_stats_proto.proto ), 'priority_breakdown', ( SELECT RepeatedField(priority_breakdown_proto) FROM process_priority_view AS ppv WHERE mem_all_processes.process_name = ppv.process_name ) ) AS metric FROM mem_all_processes LEFT JOIN anon_rss_stats_proto USING (process_name) LEFT JOIN file_rss_stats_proto USING (process_name) LEFT JOIN swap_stats_proto USING (process_name) LEFT JOIN anon_and_swap_stats_proto USING (process_name) LEFT JOIN java_heap_stats_proto USING (process_name); DROP VIEW IF EXISTS android_mem_output; CREATE VIEW android_mem_output AS SELECT AndroidMemoryMetric( 'process_metrics', (SELECT RepeatedField(metric) FROM process_metrics_view) );