Codebase list golang-github-vbauerster-mpb / 09a5086
Don't panic when bars have not equal decorators Vladimir Bauer 8 years ago
4 changed file(s) with 50 addition(s) and 22 deletion(s). Raw diff Collapse all Expand all
3737 bar.priority = priority
3838 heap.Fix(pq, bar.index)
3939 }
40
41 func (pq priorityQueue) maxNumP() int {
42 if pq.Len() == 0 {
43 return 0
44 }
45
46 max := pq[0].NumOfPrependers()
47 for i := 1; i < pq.Len(); i++ {
48 n := pq[i].NumOfPrependers()
49 if n > max {
50 max = n
51 }
52 }
53 return max
54 }
55
56 func (pq priorityQueue) maxNumA() int {
57 if pq.Len() == 0 {
58 return 0
59 }
60
61 max := pq[0].NumOfAppenders()
62 for i := 1; i < pq.Len(); i++ {
63 n := pq[i].NumOfAppenders()
64 if n > max {
65 max = n
66 }
67 }
68 return max
69 }
3636 // progress state, which may contain several bars
3737 pState struct {
3838 bHeap *priorityQueue
39 heapUpdated bool
3940 idCounter int
4041 width int
4142 format string
9798 options = append(options, barWidth(s.width), barFormat(s.format))
9899 b := newBar(s.idCounter, total, p.wg, s.cancel, options...)
99100 heap.Push(s.bHeap, b)
101 s.heapUpdated = true
100102 s.idCounter++
101103 result <- b
102104 }:
111113 result := make(chan bool, 1)
112114 select {
113115 case p.operateState <- func(s *pState) {
114 b.Complete()
115 result <- heap.Remove(s.bHeap, b.index) != nil
116 if heap.Remove(s.bHeap, b.index) != nil {
117 s.heapUpdated = true
118 b.Complete()
119 result <- true
120 } else {
121 result <- false
122 }
116123 }:
117124 return <-result
118125 case <-p.quit:
211218 }
212219
213220 func (s *pState) writeAndFlush(tw, numP, numA int) (err error) {
214 if numP < 0 && numA < 0 {
215 return
216 }
217
218221 wSyncTimeout := make(chan struct{})
219222 time.AfterFunc(s.rr, func() {
220223 close(wSyncTimeout)
2424 close(p.done)
2525 }()
2626
27 numP, numA := -1, -1
28
27 var numP, numA int
2928 var timer *time.Timer
3029 var resumeTicker <-chan time.Time
31 resumeDelay := 300 * time.Millisecond
30 resumeDelay := 320 * time.Millisecond
3231
3332 for {
3433 select {
3938 runtime.Gosched()
4039 break
4140 }
42 b0 := (*s.bHeap)[0]
43 if numP == -1 {
44 numP = b0.NumOfPrependers()
45 }
46 if numA == -1 {
47 numA = b0.NumOfAppenders()
41 if s.heapUpdated {
42 numP = s.bHeap.maxNumP()
43 numA = s.bHeap.maxNumA()
44 s.heapUpdated = false
4845 }
4946 tw, _, _ := cwriter.TermSize()
5047 err := s.writeAndFlush(tw, numP, numA)
1717 close(p.done)
1818 }()
1919
20 numP, numA := -1, -1
20 var numP, numA int
2121
2222 for {
2323 select {
2828 runtime.Gosched()
2929 break
3030 }
31 b0 := (*s.bHeap)[0]
32 if numP == -1 {
33 numP = b0.NumOfPrependers()
34 }
35 if numA == -1 {
36 numA = b0.NumOfAppenders()
31 if s.heapUpdated {
32 numP = s.bHeap.maxNumP()
33 numA = s.bHeap.maxNumA()
34 s.heapUpdated = false
3735 }
3836 tw, _, _ := cwriter.TermSize()
3937 err := s.writeAndFlush(tw, numP, numA)