aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Baylis <charles.baylis@linaro.org>2017-12-14 15:01:29 +0000
committerCharles Baylis <charles.baylis@linaro.org>2017-12-14 15:01:29 +0000
commit744f03d26fbfeeae5e4a754f1af7b528e35c82f6 (patch)
tree0a6b65190e4b971544fb0da4b260ae6fc0835452
parent3ff839b9468ff9bc837464a7c96d922c4f34aff8 (diff)
Improve More/Less mechanism.
Don't use <details>/<summary> as it is not well supported in older browsers. Now use a Javascript handler. Also use more/less support to hide tasks with very low CPU usage from the top menu. Change-Id: Ica235813f2e62a1987dd6a2c545917709c2e5dfa
-rw-r--r--perf-utilization.pl74
1 files changed, 64 insertions, 10 deletions
diff --git a/perf-utilization.pl b/perf-utilization.pl
index 22f5fc5..43faa74 100644
--- a/perf-utilization.pl
+++ b/perf-utilization.pl
@@ -4,8 +4,9 @@ use File::Temp qw/ tempfile tempdir /;
use strict;
my $REPORT_INTERVAL=0.1; # default to 0.1s
+my $DEFAULT_PROFILE_LIMIT=7;# default number of entries in profile
my $PERF="perf"; # default perf binary
-my $MIN_TASK_CPU=1; # hide tasks below 5% CPU usage in menu
+my $MIN_TASK_CPU=1; # hide tasks below this %age CPU usage in menu
my ($SAMPLE_INTERVAL, $INPUT, $OUTPUT);
while (@ARGV)
@@ -155,6 +156,46 @@ span.hoverprofile {
/*box-shadow: inset 0px 0px 10000px rgba(255,255,255,0.6);*/
background-color: #dddddd;
}
+
+.profiletable {
+ white-space:pre;
+ font-family: monospace;
+}
+
+.moreless {
+ cursor:pointer;
+}
+
+.lessmore {
+ cursor:pointer;
+}
+
+.moreless span.more {
+ display: initial;
+}
+
+.moreless span.less {
+ display: none;
+}
+
+.lessmore span.less {
+ display: initial;
+}
+
+.lessmore span.more {
+ display: none;
+}
+
+.button {
+ display: inline-block;
+ text-decoration: none;
+ color: #fff;
+ font-weight: bold;
+ background-color: #5490c0;
+ padding: 3px;
+ border: 1px solid #2c6090;
+}
+
</style>
</head>
<body>
@@ -176,7 +217,7 @@ function highlight_pids(list)
// var style="box-shadow: inset 0px 0px 10000px rgba(255,255,255,0.6);";
// var style="border-color: black; border-style: solid;";
// var style="box-shadow: 0 0 0 1px black;";
- var style="border-color: black;";
+ var style="border-color: black; color: white;";
styleSheet.insertRule(".pid"+p+" { " +style+ "}");
});
}
@@ -197,18 +238,31 @@ function delete_rules()
selectedpid = -1;
while (styleSheet.cssRules.length > 0) { styleSheet.deleteRule(0); }
}
+
+function do_moreless(elem)
+{
+ if (elem.className == "moreless")
+ {
+ elem.className = "lessmore";
+ } else {
+ elem.className = "moreless";
+ }
+}
</script>
<div id="allcontent">
EOF
my $max_count=1+($time[$#time]-$time[0])/$SAMPLE_INTERVAL;
-print $fh qq(<div id="pidtaskwrapper">);
+print $fh qq(<div id="pidtaskwrapper" class="moreless">);
+print $fh qq(<span class="more button" onclick="do_moreless(this.parentElement)">Show all tasks</span>);
+print $fh qq(<span class="less button" onclick="do_moreless(this.parentElement)">Show tasks above $MIN_TASK_CPU% cpu usage</span>);
+print $fh qq(<br>);
foreach my $pid (sort keys %task)
{
my $task_cpu = $pid_count{$pid}/$max_count;
- next if $task_cpu < ($MIN_TASK_CPU/100);
+ my $class = $task_cpu > ($MIN_TASK_CPU/100) ? "" : "less";
my $task_cpu_pct=sprintf("%.1f%%",100*$task_cpu);
- print $fh qq(<span class="pidtask pid$pid" onclick="do_click($pid)">);
+ print $fh qq(<span class="pidtask pid$pid $class" onclick="do_click($pid)">);
print $fh qq($pid<br>$task{$pid}<br>$task_cpu_pct);
print $fh qq(</span>);
}
@@ -258,21 +312,21 @@ for (my $i=0;$i<$#cpu;$i++)
{
my $prof_pct = sprintf("%5.1f%%", 100 * $lochash->{$loc} / $n);
my $line = qq($prof_pct - $loc\n);
- if ($count++ > 7) {
+ if ($count++ > $DEFAULT_PROFILE_LIMIT) {
$remainder .= $line
} else {
$top_part .= $line
}
}
- if ($remainder)
- {
- $str .= "<p><details><summary>Profile contains $count entries<br><pre>$top_part</pre></summary><pre>$remainder</pre></details>";
+ if ($remainder) {
+ my $more = $count - $DEFAULT_PROFILE_LIMIT;
+ $str .= qq(<p><div class="moreless" onclick="do_moreless(this)"><span class="profiletable">$top_part</span><span class="more">More... ($more more entries)</span><span class="less"><span class="profiletable">$remainder</span>Less...</span></div>);
} else {
$str .= "<p><pre>$top_part</pre>";
}
my $max_counts=$REPORT_INTERVAL/$SAMPLE_INTERVAL;
- $str .= "Threads active in this timeslot<p>";
+ $str .= "<br>Threads active in this timeslot<p>";
$str .= "<table><tr><th>PID</th><th>Task name</th><th>CPU usage</th></tr>";
foreach my $pid (sort keys %{$pids{$c}})
{