summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xloadbars239
1 files changed, 115 insertions, 124 deletions
diff --git a/loadbars b/loadbars
index 89ee056..608f593 100755
--- a/loadbars
+++ b/loadbars
@@ -47,7 +47,6 @@ use constant {
USER_ORANGE => 70,
USER_YELLOW0 => 50,
NULL => 0,
- DEBUG => 0,
};
$| = 1;
@@ -257,9 +256,8 @@ sub create_threads (@) {
sub main_loop ($@) {
my ( $dispatch, @threads ) = @_;
- my $num_stats = keys %CPUSTATS;
- $num_stats += keys %MEMSTATS_HAS if $C{showmem};
- $C{width} = $C{barwidth} * $num_stats;
+ my $num_stats = 1;
+ $C{width} = $C{barwidth};
my $app = SDL::App->new(
-title => $C{title},
@@ -280,134 +278,112 @@ sub main_loop ($@) {
my $font_height = 14;
my $displayinfo : shared = '';
- my $infotxt : shared = '';
- my $quit : shared = 0;
+ my $infotxt : shared = '';
+ my $quit : shared = 0;
my $resize_window : shared = 0;
my %newsize : shared;
my ( $t1, $t2 ) = ( Time::HiRes::time(), undef );
- my $event = SDL::Event->new();
- my $lock : shared = 0;
-
- my $event_thread = async {
- for ( ; ; ) {
- sleep 0.1 while $lock;
- $event->pump();
- $event->poll();
- $event->wait();
-
- my $type = $event->type();
- my $key_name = $event->key_name();
-
- debugsay "Event type=$type key_name=$key_name" if Loadbars::DEBUG;
- next if $type != 2;
-
- if ( $key_name eq '1' ) {
- $C{showcores} = !$C{showcores};
- set_showcores_regexp;
- $_->kill('USR1') for @threads;
- %AVGSTATS = ();
- %CPUSTATS = ();
- $displayinfo = 'Toggled CPUs';
- }
- elsif ( $key_name eq 'e' ) {
- $C{extended} = !$C{extended};
- $displayinfo = 'Toggled extended display';
-
- }
- elsif ( $key_name eq 'h' ) {
- say '=> Hotkeys to use in the SDL interface';
- say $dispatch->('hotkeys');
- $displayinfo = 'Hotkeys help printed on terminal stdout';
-
- }
- elsif ( $key_name eq 'm' ) {
- $C{showmem} = !$C{showmem};
- $displayinfo = 'Toggled show mem';
-
- }
- elsif ( $key_name eq 't' ) {
- $C{displaytxt} = !$C{displaytxt};
- $displayinfo = 'Toggled text display';
-
- }
- elsif ( $key_name eq 'u' ) {
- $C{displaytxthost} = !$C{displaytxthost};
- $displayinfo = 'Toggled number/hostname display';
-
- }
- elsif ( $key_name eq 'q' ) {
- $quit = 1;
- last;
-
- # Increase and decrease pairs
- }
- elsif ( $key_name eq 'a' ) {
- ++$C{average};
- $displayinfo = "Set sample average to $C{average}";
- }
- elsif ( $key_name eq 'y' or $key_name eq 'z' ) {
- my $avg = $C{average};
- --$avg;
- $C{average} = $avg > 1 ? $avg : 2;
- $displayinfo = "Set sample average to $C{average}";
-
- }
- elsif ( $key_name eq 's' ) {
- $C{factor} += 0.1;
- $displayinfo = "Set scale factor to $C{factor}";
- }
- elsif ( $key_name eq 'x' or $key_name eq 'z' ) {
- $C{factor} -= 0.1;
- $displayinfo = "Set scale factor to $C{factor}";
-
- }
- elsif ( $key_name eq 'd' ) {
- $C{inter} += 0.1;
- $displayinfo = "Set graph update interval to $C{inter}";
- }
- elsif ( $key_name eq 'c' or $key_name eq 'z' ) {
- my $int = $C{inter};
- $int -= 0.1;
- $C{inter} = $int > 0 ? $int : 0.1;
- $displayinfo = "Set graph update interval to $C{inter}";
- }
+ my $event_handler = sub {
+ my $event = SDL::Event->new();
+
+ $event->poll();
+
+ my $type = $event->type();
+ my $key_name = $event->key_name();
+
+ return if $type != 2;
+ debugsay "Event type=$type key_name=$key_name";
+
+ if ( $key_name eq '1' ) {
+ $C{showcores} = !$C{showcores};
+ set_showcores_regexp;
+ $_->kill('USR1') for @threads;
+ %AVGSTATS = ();
+ %CPUSTATS = ();
+ $displayinfo = 'Toggled CPUs';
+
+ }
+ elsif ( $key_name eq 'e' ) {
+ $C{extended} = !$C{extended};
+ $displayinfo = 'Toggled extended display';
+
+ }
+ elsif ( $key_name eq 'h' ) {
+ say '=> Hotkeys to use in the SDL interface';
+ say $dispatch->('hotkeys');
+ $displayinfo = 'Hotkeys help printed on terminal stdout';
+
+ }
+ elsif ( $key_name eq 'm' ) {
+ $C{showmem} = !$C{showmem};
+ $displayinfo = 'Toggled show mem';
+
+ }
+ elsif ( $key_name eq 't' ) {
+ $C{displaytxt} = !$C{displaytxt};
+ $displayinfo = 'Toggled text display';
+
+ }
+ elsif ( $key_name eq 'u' ) {
+ $C{displaytxthost} = !$C{displaytxthost};
+ $displayinfo = 'Toggled number/hostname display';
+
+ }
+ elsif ( $key_name eq 'q' ) {
+ $quit = 1;
+ return;
- elsif ( $key_name eq '9' ) {
- $newsize{width} = $C{width} - $C{barwidth} / 2;
- $newsize{height} = $C{height};
- $resize_window = 1;
- $displayinfo = "Resizing to $newsize{width}x$newsize{height}";
- $lock = 1;
- }
- elsif ( $key_name eq '0' ) {
- $newsize{width} = $C{width} + $C{barwidth} / 2;
- $newsize{height} = $C{height};
- $resize_window = 1;
- $displayinfo = "Resizing to $newsize{width}x$newsize{height}";
- $lock = 1;
- }
+ }
+ elsif ( $key_name eq 'a' ) {
+ ++$C{average};
+ $displayinfo = "Set sample average to $C{average}";
+ }
+ elsif ( $key_name eq 'y' or $key_name eq 'z' ) {
+ my $avg = $C{average};
+ --$avg;
+ $C{average} = $avg > 1 ? $avg : 2;
+ $displayinfo = "Set sample average to $C{average}";
+
+ }
+ elsif ( $key_name eq 's' ) {
+ $C{factor} += 0.1;
+ $displayinfo = "Set scale factor to $C{factor}";
+ }
+ elsif ( $key_name eq 'x' or $key_name eq 'z' ) {
+ $C{factor} -= 0.1;
+ $displayinfo = "Set scale factor to $C{factor}";
+
+ }
+ elsif ( $key_name eq 'd' ) {
+ $C{inter} += 0.1;
+ $displayinfo = "Set graph update interval to $C{inter}";
+ }
+ elsif ( $key_name eq 'c' or $key_name eq 'z' ) {
+ my $int = $C{inter};
+ $int -= 0.1;
+ $C{inter} = $int > 0 ? $int : 0.1;
+ $displayinfo = "Set graph update interval to $C{inter}";
+ }
+
+ elsif ( $key_name eq '9' ) {
+ $newsize{width} = $C{width} - $C{barwidth} / 2;
+ $newsize{height} = $C{height};
+ $resize_window = 1;
+ $displayinfo = "Resizing to $newsize{width}x$newsize{height}";
+ }
+ elsif ( $key_name eq '0' ) {
+ $newsize{width} = $C{width} + $C{barwidth} / 2;
+ $newsize{height} = $C{height};
+ $resize_window = 1;
+ $displayinfo = "Resizing to $newsize{width}x$newsize{height}";
}
};
do {
my ( $x, $y ) = ( 0, 0 );
- my $new_num_stats = keys %CPUSTATS;
- $new_num_stats += keys %MEMSTATS_HAS if $C{showmem};
-
- if ( $new_num_stats != $num_stats ) {
- %prev_stats = ();
- %last_loads = ();
-
- $num_stats = $new_num_stats;
- $newsize{width} = $C{barwidth} * $num_stats;
- $newsize{height} = $C{height};
- $resize_window = 1;
- $lock = 1;
- }
-
# Avoid division by null
# Also substract 1 (each bar is followed by an 1px separator bar)
my $width = $C{width} / ( $num_stats ? $num_stats : 1 ) - 1;
@@ -415,7 +391,7 @@ sub main_loop ($@) {
my ( $current_barnum, $current_corenum ) = ( -1, -1 );
for my $key ( sort keys %CPUSTATS ) {
- ++$current_barnum;
+ last if (++$current_barnum > $num_stats);
++$current_corenum;
my ( $host, $name ) = split ';', $key;
@@ -697,8 +673,11 @@ sub main_loop ($@) {
$app->update($rect_separator) if defined $rect_separator;
$x += $width + 1 + $add_x;
+
}
+ $event_handler->();
+
TIMEKEEPER:
$t2 = Time::HiRes::time();
@@ -711,12 +690,24 @@ sub main_loop ($@) {
$t1 = $t2;
+ my $new_num_stats = keys %CPUSTATS;
+ $new_num_stats += keys %MEMSTATS_HAS if $C{showmem};
+
+ if ( $new_num_stats != $num_stats ) {
+ %prev_stats = ();
+ %last_loads = ();
+
+ $num_stats = $new_num_stats;
+ $newsize{width} = $C{barwidth} * $num_stats;
+ $newsize{height} = $C{height};
+ $resize_window = 1;
+ }
+
if ($resize_window) {
- #eval '$app->resize( $C{width}, $C{height} );';
$C{width} = $newsize{width};
$C{height} = $newsize{height};
$app->resize( $C{width}, $C{height} );
- $resize_window = $lock = 0;
+ $resize_window = 0;
$redraw_background = 1;
}
@@ -730,7 +721,7 @@ sub main_loop ($@) {
say "Good bye";
# $_->kill('STOP') for @threads;
- $event_thread->join();
+#$event_thread->join();
exit 0;
}