#!/bin/bash # Copyright 2016 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Uses Dremel queries to collect the inclusive and pairwise inclusive statistics # for odd/even profile collection session ids. # The data is collected for an odd or even collection session id. set -e if [ $# -lt 8 ]; then echo "Usage: collect_experiment_data_odd_even_session.sh cwp_table board " \ "board_arch Chrome_version Chrome_OS_version odd_even " \ "inclusive_output_file pairwise_inclusive_output_file" exit 1 fi readonly TABLE=$1 readonly INCLUSIVE_OUTPUT_FILE=$7 readonly PAIRWISE_INCLUSIVE_OUTPUT_FILE=$8 readonly PERIODIC_COLLECTION=1 WHERE_CLAUSE_SPECIFICATIONS="meta.cros.board = '$2' AND \ meta.cros.cpu_architecture = '$3' AND \ meta.cros.chrome_version LIKE '%$4%' AND \ meta.cros.version = '$5' AND \ meta.cros.collection_info.trigger_event = $PERIODIC_COLLECTION AND \ MOD(session.id, 2) = $6 AND \ session.total_count > 2000" # Collects the function, with its file, the object and inclusive count # fraction out of the total amount of inclusive count values. echo " SELECT replace(frame.function_name, \", \", \"; \") AS function, frame.filename AS file, frame.load_module_path AS dso, SUM(frame.inclusive_count) AS inclusive_count, SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count_fraction FROM $TABLE table, table.frame frame CROSS JOIN ( SELECT SUM(count) AS value FROM $TABLE WHERE $WHERE_CLAUSE_SPECIFICATIONS ) AS total WHERE $WHERE_CLAUSE_SPECIFICATIONS GROUP BY function, file, dso HAVING inclusive_count_fraction > 0.0 ORDER BY inclusive_count_fraction DESC; " | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv > \ "$INCLUSIVE_OUTPUT_FILE" # Collects the pair of parent and child functions, with the file and object # where the child function is declared and the inclusive count fraction of the # pair out of the total amount of inclusive count values. echo " SELECT CONCAT(replace(frame.parent_function_name, \", \", \"; \"), \";;\", replace(frame.function_name, \", \", \"; \")) AS parent_child_functions, frame.filename AS child_function_file, frame.load_module_path AS child_function_dso, SUM(frame.inclusive_count)/ANY_VALUE(total.value) AS inclusive_count FROM $TABLE table, table.frame frame CROSS JOIN ( SELECT SUM(count) AS value FROM $TABLE WHERE $WHERE_CLAUSE_SPECIFICATIONS ) AS total WHERE $WHERE_CLAUSE_SPECIFICATIONS GROUP BY parent_child_functions, child_function_file, child_function_dso HAVING inclusive_count > 0.0 ORDER BY inclusive_count DESC; " | dremel --sql_dialect=GoogleSQL --min_completion_ratio=1.0 --output=csv > \ "$PAIRWISE_INCLUSIVE_OUTPUT_FILE"