aboutsummaryrefslogtreecommitdiffstats
path: root/syz-manager/stats.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-12-25 19:15:28 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-12-26 10:58:23 +0100
commit85d28281fb84c829e7bf77a9e115e985bc8c665c (patch)
tree76a52b58695611e34b6d1a093f8bfc27fa0341ee /syz-manager/stats.go
parent4f7962a7bb882af560bc5c66285424f6d3b73e45 (diff)
syz-manager: factor out rpc serving part
Update #605
Diffstat (limited to 'syz-manager/stats.go')
-rw-r--r--syz-manager/stats.go36
1 files changed, 35 insertions, 1 deletions
diff --git a/syz-manager/stats.go b/syz-manager/stats.go
index c6098b832..6c48a2047 100644
--- a/syz-manager/stats.go
+++ b/syz-manager/stats.go
@@ -4,6 +4,7 @@
package main
import (
+ "sync"
"sync/atomic"
)
@@ -23,10 +24,15 @@ type Stats struct {
hubRecvProgDrop Stat
hubRecvRepro Stat
hubRecvReproDrop Stat
+ corpusCover Stat
+ corpusSignal Stat
+
+ mu sync.Mutex
+ namedStats map[string]uint64
}
func (stats *Stats) all() map[string]uint64 {
- return map[string]uint64{
+ m := map[string]uint64{
"crashes": stats.crashes.get(),
"crash types": stats.crashTypes.get(),
"suppressed": stats.crashSuppressed.get(),
@@ -40,6 +46,30 @@ func (stats *Stats) all() map[string]uint64 {
"hub: recv prog drop": stats.hubRecvProgDrop.get(),
"hub: recv repro": stats.hubRecvRepro.get(),
"hub: recv repro drop": stats.hubRecvReproDrop.get(),
+ "cover": stats.corpusCover.get(),
+ "signal": stats.corpusSignal.get(),
+ }
+ stats.mu.Lock()
+ defer stats.mu.Unlock()
+ for k, v := range stats.namedStats {
+ m[k] = v
+ }
+ return m
+}
+
+func (stats *Stats) mergeNamed(named map[string]uint64) {
+ stats.mu.Lock()
+ defer stats.mu.Unlock()
+ if stats.namedStats == nil {
+ stats.namedStats = make(map[string]uint64)
+ }
+ for k, v := range named {
+ switch k {
+ case "exec total":
+ stats.execTotal.add(int(v))
+ default:
+ stats.namedStats[k] += v
+ }
}
}
@@ -54,3 +84,7 @@ func (s *Stat) inc() {
func (s *Stat) add(v int) {
atomic.AddUint64((*uint64)(s), uint64(v))
}
+
+func (s *Stat) set(v int) {
+ atomic.StoreUint64((*uint64)(s), uint64(v))
+}