You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.6 KiB
93 lines
2.6 KiB
#!/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. |
|
|
|
set -e |
|
|
|
if [ "$#" -ne 7 ]; then |
|
echo "USAGE: collect_experiment_data.sh cwp_table board board_arch " \ |
|
"Chrome_version Chrome_OS_version inclusive_output_file " \ |
|
"pairwise_inclusive_output_file" |
|
exit 1 |
|
fi |
|
|
|
readonly TABLE=$1 |
|
readonly INCLUSIVE_OUTPUT_FILE=$6 |
|
readonly PAIRWISE_INCLUSIVE_OUTPUT_FILE=$7 |
|
readonly PERIODIC_COLLECTION=1 |
|
readonly 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 \ |
|
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"
|
|
|