diff options
| author | hhvn <dev@hhvn.uk> | 2024-01-27 15:17:35 +0000 |
|---|---|---|
| committer | hhvn <dev@hhvn.uk> | 2024-01-27 15:17:35 +0000 |
| commit | 0064d3f30cb971cde1ec8214224497a158bc2649 (patch) | |
| tree | 2d32dd05c722847e4312970dfa6147fcf79a318f /status | |
| parent | 50e8e54ec6f7342fdf0a90c8e3cd652e4a1ac8b9 (diff) | |
Each bar has drawing goroutine. Mutexes eliminated.
Diffstat (limited to 'status')
| -rw-r--r-- | status/00-status.go | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/status/00-status.go b/status/00-status.go index 3543d0b..ec2a069 100644 --- a/status/00-status.go +++ b/status/00-status.go @@ -3,7 +3,6 @@ package status // import "hhvn.uk/hbspbar/status" import ( "fmt" "time" - "sync" "image" "image/color" @@ -12,32 +11,38 @@ import ( "hhvn.uk/hbspbar/common" ) -var Status map[int]*status -var Mutex sync.Mutex -var statusid map[string]int -var Updated chan bool -var updates chan *status +var NewBlocks = make(chan *Blocks) +var updates = make(chan *status) +var statusid = make(map[string]int) -const ( -) +type Blocks map[int]*status + +func (b *Blocks) Len() int { + return len(map[int]*status(*b)) +} + +func (b *Blocks) Get(i int) (s *status, ok bool) { + s, ok = (map[int]*status(*b))[i] + return +} + +type status struct { + Name string + I *image.RGBA + W int +} func init() { - Status = make(map[int]*status) - statusid = make(map[string]int) - Updated = make(chan bool) - updates = make(chan *status) + status := make(map[int]*status) go func() { - for { - s := <- updates - + for s := range updates { id := statusid[s.Name] - Mutex.Lock() - Status[id] = s - Mutex.Unlock() + status[id] = s - Updated <- true + b := Blocks(status) + NewBlocks <- &b } }() } @@ -52,12 +57,6 @@ func register(name string) { statusid[name] = nid } -type status struct { - Name string - I *image.RGBA - W int -} - func newUpdate(name string) (*status) { var s status |