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