49 lines
662 B
Go
49 lines
662 B
Go
package perf
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/anacrolix/missinggo"
|
|
)
|
|
|
|
type TimedLocker struct {
|
|
L sync.Locker
|
|
Desc string
|
|
}
|
|
|
|
func (me *TimedLocker) Lock() {
|
|
tr := NewTimer()
|
|
me.L.Lock()
|
|
tr.Mark(me.Desc)
|
|
}
|
|
|
|
func (me *TimedLocker) Unlock() {
|
|
me.L.Unlock()
|
|
}
|
|
|
|
type TimedRWLocker struct {
|
|
RWL missinggo.RWLocker
|
|
WriteDesc string
|
|
ReadDesc string
|
|
}
|
|
|
|
func (me *TimedRWLocker) Lock() {
|
|
tr := NewTimer()
|
|
me.RWL.Lock()
|
|
tr.Mark(me.WriteDesc)
|
|
}
|
|
|
|
func (me *TimedRWLocker) Unlock() {
|
|
me.RWL.Unlock()
|
|
}
|
|
|
|
func (me *TimedRWLocker) RLock() {
|
|
tr := NewTimer()
|
|
me.RWL.RLock()
|
|
tr.Mark(me.ReadDesc)
|
|
}
|
|
|
|
func (me *TimedRWLocker) RUnlock() {
|
|
me.RWL.RUnlock()
|
|
}
|