mirror of
https://github.com/stianeikeland/go-rpio.git
synced 2025-01-23 02:31:05 +01:00
Update benchmark
This commit is contained in:
parent
b1b8e25712
commit
6c29b50033
123
rpio_test.go
123
rpio_test.go
|
@ -120,7 +120,7 @@ func TestEvent(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkToggle(b *testing.B) {
|
func BenchmarkGpio(b *testing.B) {
|
||||||
src := Pin(3)
|
src := Pin(3)
|
||||||
src.Mode(Output)
|
src.Mode(Output)
|
||||||
src.Low()
|
src.Low()
|
||||||
|
@ -129,72 +129,65 @@ func BenchmarkToggle(b *testing.B) {
|
||||||
pin.Mode(Input)
|
pin.Mode(Input)
|
||||||
pin.PullDown()
|
pin.PullDown()
|
||||||
|
|
||||||
b.Run("old", func(b *testing.B) {
|
oldWrite := func(pin Pin, state State) {
|
||||||
for i := 0; i < b.N; i++ {
|
p := uint8(pin)
|
||||||
oldToggle(src)
|
|
||||||
|
setReg := p/32 + 7
|
||||||
|
clearReg := p/32 + 10
|
||||||
|
|
||||||
|
memlock.Lock()
|
||||||
|
defer memlock.Unlock()
|
||||||
|
|
||||||
|
if state == Low {
|
||||||
|
gpioMem[clearReg] = 1 << (p & 31)
|
||||||
|
} else {
|
||||||
|
gpioMem[setReg] = 1 << (p & 31)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
b.Run("current", func(b *testing.B) {
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
TogglePin(src)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkWrite(b *testing.B) {
|
|
||||||
src := Pin(3)
|
|
||||||
src.Mode(Output)
|
|
||||||
src.Low()
|
|
||||||
|
|
||||||
pin := Pin(2)
|
|
||||||
pin.Mode(Input)
|
|
||||||
pin.PullDown()
|
|
||||||
|
|
||||||
b.Run("old", func(b *testing.B) {
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
if i%2 == 0 {
|
|
||||||
oldWrite(src, High)
|
|
||||||
} else {
|
|
||||||
oldWrite(src, Low)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
b.Run("current", func(b *testing.B) {
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
if i%2 == 0 {
|
|
||||||
WritePin(src, High)
|
|
||||||
} else {
|
|
||||||
WritePin(src, Low)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func oldToggle(pin Pin) {
|
|
||||||
switch ReadPin(pin) {
|
|
||||||
case Low:
|
|
||||||
oldWrite(pin, High)
|
|
||||||
case High:
|
|
||||||
oldWrite(pin, Low)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func oldWrite(pin Pin, state State) {
|
oldToggle := func(pin Pin) {
|
||||||
p := uint8(pin)
|
switch ReadPin(pin) {
|
||||||
|
case Low:
|
||||||
setReg := p/32 + 7
|
oldWrite(pin, High)
|
||||||
clearReg := p/32 + 10
|
case High:
|
||||||
|
oldWrite(pin, Low)
|
||||||
memlock.Lock()
|
}
|
||||||
defer memlock.Unlock()
|
|
||||||
|
|
||||||
if state == Low {
|
|
||||||
gpioMem[clearReg] = 1 << (p & 31)
|
|
||||||
} else {
|
|
||||||
gpioMem[setReg] = 1 << (p & 31)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b.Run("write", func(b *testing.B) {
|
||||||
|
b.Run("old", func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
if i%2 == 0 {
|
||||||
|
oldWrite(src, High)
|
||||||
|
} else {
|
||||||
|
oldWrite(src, Low)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
b.Run("new", func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
if i%2 == 0 {
|
||||||
|
WritePin(src, High)
|
||||||
|
} else {
|
||||||
|
WritePin(src, Low)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
b.Run("toggle", func(b *testing.B) {
|
||||||
|
b.Run("old", func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
oldToggle(src)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
b.Run("new", func(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
TogglePin(src)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user