master
go 35 lines 820 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package chartengine
4
5 import "sync/atomic"
6
7 type engineStats struct {
8 routeCacheHits uint64
9 routeCacheMisses uint64
10 }
11
12 // statsSnapshot is a lock-free snapshot of planner/runtime counters.
13 type statsSnapshot struct {
14 RouteCacheHits uint64
15 RouteCacheMisses uint64
16 }
17
18 // stats returns a lock-free snapshot of engine counters.
19 func (e *Engine) stats() statsSnapshot {
20 if e == nil {
21 return statsSnapshot{}
22 }
23 return statsSnapshot{
24 RouteCacheHits: atomic.LoadUint64(&e.state.stats.routeCacheHits),
25 RouteCacheMisses: atomic.LoadUint64(&e.state.stats.routeCacheMisses),
26 }
27 }
28
29 func (e *Engine) addRouteCacheHit() {
30 atomic.AddUint64(&e.state.stats.routeCacheHits, 1)
31 }
32
33 func (e *Engine) addRouteCacheMiss() {
34 atomic.AddUint64(&e.state.stats.routeCacheMisses, 1)
35 }