Update benchmark

This commit is contained in:
Drahoslav 2018-06-06 00:41:50 +02:00
parent b1b8e25712
commit 6c29b50033

View File

@ -120,7 +120,7 @@ func TestEvent(t *testing.T) {
}
func BenchmarkToggle(b *testing.B) {
func BenchmarkGpio(b *testing.B) {
src := Pin(3)
src.Mode(Output)
src.Low()
@ -129,72 +129,65 @@ func BenchmarkToggle(b *testing.B) {
pin.Mode(Input)
pin.PullDown()
b.Run("old", func(b *testing.B) {
for i := 0; i < b.N; i++ {
oldToggle(src)
oldWrite := func(pin Pin, state State) {
p := uint8(pin)
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) {
p := uint8(pin)
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)
oldToggle := func(pin Pin) {
switch ReadPin(pin) {
case Low:
oldWrite(pin, High)
case High:
oldWrite(pin, Low)
}
}
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)
}
})
})
}