diff options
author | Charles Baylis <charles.baylis@linaro.org> | 2017-12-14 15:01:29 +0000 |
---|---|---|
committer | Charles Baylis <charles.baylis@linaro.org> | 2017-12-14 15:01:29 +0000 |
commit | 744f03d26fbfeeae5e4a754f1af7b528e35c82f6 (patch) | |
tree | 0a6b65190e4b971544fb0da4b260ae6fc0835452 | |
parent | 3ff839b9468ff9bc837464a7c96d922c4f34aff8 (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.pl | 74 |
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}}) { |