| // Copyright 2018 syzkaller project authors. All rights reserved. |
| // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "sync/atomic" |
| ) |
| |
| type Stat uint64 |
| |
| type Stats struct { |
| crashes Stat |
| crashTypes Stat |
| crashSuppressed Stat |
| vmRestarts Stat |
| newInputs Stat |
| execTotal Stat |
| hubSendProgAdd Stat |
| hubSendProgDel Stat |
| hubSendRepro Stat |
| hubRecvProg Stat |
| hubRecvProgDrop Stat |
| hubRecvRepro Stat |
| hubRecvReproDrop Stat |
| } |
| |
| func (stats *Stats) all() map[string]uint64 { |
| return map[string]uint64{ |
| "crashes": stats.crashes.get(), |
| "crash types": stats.crashTypes.get(), |
| "suppressed": stats.crashSuppressed.get(), |
| "vm restarts": stats.vmRestarts.get(), |
| "manager new inputs": stats.newInputs.get(), |
| "exec total": stats.execTotal.get(), |
| "hub: send prog add": stats.hubSendProgAdd.get(), |
| "hub: send prog del": stats.hubSendProgDel.get(), |
| "hub: send repro": stats.hubSendRepro.get(), |
| "hub: recv prog": stats.hubRecvProg.get(), |
| "hub: recv prog drop": stats.hubRecvProgDrop.get(), |
| "hub: recv repro": stats.hubRecvRepro.get(), |
| "hub: recv repro drop": stats.hubRecvReproDrop.get(), |
| } |
| } |
| |
| func (s *Stat) get() uint64 { |
| return atomic.LoadUint64((*uint64)(s)) |
| } |
| |
| func (s *Stat) inc() { |
| s.add(1) |
| } |
| |
| func (s *Stat) add(v int) { |
| atomic.AddUint64((*uint64)(s), uint64(v)) |
| } |