// 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)) }