@@ -38,13 +38,15 @@ impl TaskView {
38
38
. direction ( layout:: Direction :: Vertical )
39
39
. constraints (
40
40
[
41
- layout:: Constraint :: Length ( 5 ) ,
41
+ layout:: Constraint :: Length ( 1 ) ,
42
+ layout:: Constraint :: Length ( 6 ) ,
42
43
layout:: Constraint :: Percentage ( 60 ) ,
43
44
]
44
45
. as_ref ( ) ,
45
46
)
46
47
. split ( area) ;
47
48
49
+ let controls_area = chunks[ 0 ] ;
48
50
let stats_area = Layout :: default ( )
49
51
. direction ( layout:: Direction :: Horizontal )
50
52
. constraints (
@@ -54,29 +56,50 @@ impl TaskView {
54
56
]
55
57
. as_ref ( ) ,
56
58
)
57
- . split ( chunks[ 0 ] ) ;
59
+ . split ( chunks[ 1 ] ) ;
58
60
59
- let fields_area = chunks[ 1 ] ;
61
+ let fields_area = chunks[ 2 ] ;
62
+
63
+ let controls = Spans :: from ( vec ! [
64
+ Span :: raw( "controls: " ) ,
65
+ bold( "esc" ) ,
66
+ Span :: raw( " = return to task list, " ) ,
67
+ bold( "q" ) ,
68
+ Span :: raw( " = quit" ) ,
69
+ ] ) ;
60
70
61
71
let attrs = Spans :: from ( vec ! [ bold( "ID: " ) , Span :: raw( task. id_hex( ) ) ] ) ;
62
72
63
- let metrics = Spans :: from ( vec ! [
73
+ let mut total = vec ! [
64
74
bold( "Total Time: " ) ,
65
75
Span :: from( format!( "{:.prec$?}" , task. total( now) , prec = DUR_PRECISION , ) ) ,
66
- Span :: raw( ", " ) ,
76
+ ] ;
77
+
78
+ // TODO(eliza): maybe surface how long the task has been completed, as well?
79
+ if task. is_completed ( ) {
80
+ total. push ( Span :: raw ( " (completed)" ) ) ;
81
+ } ;
82
+
83
+ let total = Spans :: from ( total) ;
84
+
85
+ let busy = Spans :: from ( vec ! [
67
86
bold( "Busy: " ) ,
68
87
Span :: from( format!( "{:.prec$?}" , task. busy( ) , prec = DUR_PRECISION , ) ) ,
69
- Span :: raw( ", " ) ,
88
+ ] ) ;
89
+ let idle = Spans :: from ( vec ! [
70
90
bold( "Idle: " ) ,
71
91
Span :: from( format!( "{:.prec$?}" , task. idle( now) , prec = DUR_PRECISION , ) ) ,
72
92
] ) ;
73
93
94
+ let metrics = vec ! [ attrs, total, busy, idle] ;
95
+
74
96
let wakers = Spans :: from ( vec ! [
75
97
bold( "Current wakers: " ) ,
76
98
Span :: from( format!( "{} (" , task. waker_count( ) ) ) ,
77
99
bold( "clones: " ) ,
78
100
Span :: from( format!( "{}, " , task. waker_clones( ) ) ) ,
79
101
bold( "drops: " ) ,
102
+ Span :: from( format!( "{})" , task. waker_drops( ) ) ) ,
80
103
] ) ;
81
104
82
105
let mut wakeups = vec ! [
@@ -100,10 +123,11 @@ impl TaskView {
100
123
let mut fields = Text :: default ( ) ;
101
124
fields. extend ( task. formatted_fields ( ) . iter ( ) . cloned ( ) . map ( Spans :: from) ) ;
102
125
103
- let task_widget = Paragraph :: new ( vec ! [ attrs , metrics] ) . block ( block_for ( "Task" ) ) ;
126
+ let task_widget = Paragraph :: new ( metrics) . block ( block_for ( "Task" ) ) ;
104
127
let wakers_widget = Paragraph :: new ( vec ! [ wakers, wakeups] ) . block ( block_for ( "Waker" ) ) ;
105
128
let fields_widget = Paragraph :: new ( fields) . block ( block_for ( "Fields" ) ) ;
106
129
130
+ frame. render_widget ( Block :: default ( ) . title ( controls) , controls_area) ;
107
131
frame. render_widget ( task_widget, stats_area[ 0 ] ) ;
108
132
frame. render_widget ( wakers_widget, stats_area[ 1 ] ) ;
109
133
frame. render_widget ( fields_widget, fields_area) ;
0 commit comments