@@ -844,8 +844,7 @@ class Stats(object):
844
844
self .values [key ] = (newval , newdelta )
845
845
return self .values
846
846
847
- DELAY_INITIAL = 0.25
848
- DELAY_REGULAR = 3.0
847
+ DELAY_DEFAULT = 3.0
849
848
MAX_GUEST_NAME_LEN = 48
850
849
MAX_REGEX_LEN = 44
851
850
DEFAULT_REGEX = r'^[^\(]*$'
@@ -856,6 +855,8 @@ class Tui(object):
856
855
def __init__ (self , stats ):
857
856
self .stats = stats
858
857
self .screen = None
858
+ self ._delay_initial = 0.25
859
+ self ._delay_regular = DELAY_DEFAULT
859
860
860
861
def __enter__ (self ):
861
862
"""Initialises curses for later use. Based on curses.wrapper
@@ -1027,6 +1028,7 @@ class Tui(object):
1027
1028
' p filter by PID' ,
1028
1029
' q quit' ,
1029
1030
' r reset stats' ,
1031
+ ' s set update interval' ,
1030
1032
' x toggle reporting of stats for individual child trace'
1031
1033
' events' ,
1032
1034
'Any other key refreshes statistics immediately' )
@@ -1106,10 +1108,41 @@ class Tui(object):
1106
1108
self .refresh_header (pid )
1107
1109
self .update_pid (pid )
1108
1110
break
1109
-
1110
1111
except ValueError :
1111
1112
msg = '"' + str (pid ) + '": Not a valid pid'
1112
1113
1114
+ def show_set_update_interval (self ):
1115
+ """Draws update interval selection mask."""
1116
+ msg = ''
1117
+ while True :
1118
+ self .screen .erase ()
1119
+ self .screen .addstr (0 , 0 , 'Set update interval (defaults to %fs).' %
1120
+ DELAY_DEFAULT , curses .A_BOLD )
1121
+ self .screen .addstr (4 , 0 , msg )
1122
+ self .screen .addstr (2 , 0 , 'Change delay from %.1fs to ' %
1123
+ self ._delay_regular )
1124
+ curses .echo ()
1125
+ val = self .screen .getstr ()
1126
+ curses .noecho ()
1127
+
1128
+ try :
1129
+ if len (val ) > 0 :
1130
+ delay = float (val )
1131
+ if delay < 0.1 :
1132
+ msg = '"' + str (val ) + '": Value must be >=0.1'
1133
+ continue
1134
+ if delay > 25.5 :
1135
+ msg = '"' + str (val ) + '": Value must be <=25.5'
1136
+ continue
1137
+ else :
1138
+ delay = DELAY_DEFAULT
1139
+ self ._delay_regular = delay
1140
+ break
1141
+
1142
+ except ValueError :
1143
+ msg = '"' + str (val ) + '": Invalid value'
1144
+ self .refresh_header ()
1145
+
1113
1146
def show_vm_selection_by_guest_name (self ):
1114
1147
"""Draws guest selection mask.
1115
1148
@@ -1156,14 +1189,14 @@ class Tui(object):
1156
1189
1157
1190
def show_stats (self ):
1158
1191
"""Refreshes the screen and processes user input."""
1159
- sleeptime = DELAY_INITIAL
1192
+ sleeptime = self . _delay_initial
1160
1193
self .refresh_header ()
1161
1194
start = 0.0 # result based on init value never appears on screen
1162
1195
while True :
1163
1196
self .refresh_body (time .time () - start )
1164
1197
curses .halfdelay (int (sleeptime * 10 ))
1165
1198
start = time .time ()
1166
- sleeptime = DELAY_REGULAR
1199
+ sleeptime = self . _delay_regular
1167
1200
try :
1168
1201
char = self .screen .getkey ()
1169
1202
if char == 'c' :
@@ -1174,23 +1207,28 @@ class Tui(object):
1174
1207
curses .curs_set (1 )
1175
1208
self .show_filter_selection ()
1176
1209
curses .curs_set (0 )
1177
- sleeptime = DELAY_INITIAL
1210
+ sleeptime = self . _delay_initial
1178
1211
if char == 'g' :
1179
1212
curses .curs_set (1 )
1180
1213
self .show_vm_selection_by_guest_name ()
1181
1214
curses .curs_set (0 )
1182
- sleeptime = DELAY_INITIAL
1215
+ sleeptime = self . _delay_initial
1183
1216
if char == 'h' :
1184
1217
self .show_help_interactive ()
1185
1218
if char == 'p' :
1186
1219
curses .curs_set (1 )
1187
1220
self .show_vm_selection_by_pid ()
1188
1221
curses .curs_set (0 )
1189
- sleeptime = DELAY_INITIAL
1222
+ sleeptime = self . _delay_initial
1190
1223
if char == 'q' :
1191
1224
break
1192
1225
if char == 'r' :
1193
1226
self .stats .reset ()
1227
+ if char == 's' :
1228
+ curses .curs_set (1 )
1229
+ self .show_set_update_interval ()
1230
+ curses .curs_set (0 )
1231
+ sleeptime = self ._delay_initial
1194
1232
if char == 'x' :
1195
1233
self .update_drilldown ()
1196
1234
except KeyboardInterrupt :
@@ -1267,6 +1305,7 @@ Interactive Commands:
1267
1305
p filter by PID
1268
1306
q quit
1269
1307
r reset stats
1308
+ s set update interval
1270
1309
x toggle reporting of stats for individual child trace events
1271
1310
Press any other key to refresh statistics immediately.
1272
1311
"""
0 commit comments