Home | History | Annotate | Download | only in syz-manager
      1 // Copyright 2018 syzkaller project authors. All rights reserved.
      2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
      3 
      4 package main
      5 
      6 import (
      7 	"sync/atomic"
      8 )
      9 
     10 type Stat uint64
     11 
     12 type Stats struct {
     13 	crashes          Stat
     14 	crashTypes       Stat
     15 	crashSuppressed  Stat
     16 	vmRestarts       Stat
     17 	newInputs        Stat
     18 	execTotal        Stat
     19 	hubSendProgAdd   Stat
     20 	hubSendProgDel   Stat
     21 	hubSendRepro     Stat
     22 	hubRecvProg      Stat
     23 	hubRecvProgDrop  Stat
     24 	hubRecvRepro     Stat
     25 	hubRecvReproDrop Stat
     26 }
     27 
     28 func (stats *Stats) all() map[string]uint64 {
     29 	return map[string]uint64{
     30 		"crashes":              stats.crashes.get(),
     31 		"crash types":          stats.crashTypes.get(),
     32 		"suppressed":           stats.crashSuppressed.get(),
     33 		"vm restarts":          stats.vmRestarts.get(),
     34 		"manager new inputs":   stats.newInputs.get(),
     35 		"exec total":           stats.execTotal.get(),
     36 		"hub: send prog add":   stats.hubSendProgAdd.get(),
     37 		"hub: send prog del":   stats.hubSendProgDel.get(),
     38 		"hub: send repro":      stats.hubSendRepro.get(),
     39 		"hub: recv prog":       stats.hubRecvProg.get(),
     40 		"hub: recv prog drop":  stats.hubRecvProgDrop.get(),
     41 		"hub: recv repro":      stats.hubRecvRepro.get(),
     42 		"hub: recv repro drop": stats.hubRecvReproDrop.get(),
     43 	}
     44 }
     45 
     46 func (s *Stat) get() uint64 {
     47 	return atomic.LoadUint64((*uint64)(s))
     48 }
     49 
     50 func (s *Stat) inc() {
     51 	s.add(1)
     52 }
     53 
     54 func (s *Stat) add(v int) {
     55 	atomic.AddUint64((*uint64)(s), uint64(v))
     56 }
     57