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