From cc387ba3b90e9b365f137c731cb4440256052e4d Mon Sep 17 00:00:00 2001 From: Tyler Stiene Date: Sun, 18 Apr 2021 00:30:27 -0400 Subject: [PATCH] sleepct and tests --- Makefile | 6 ++++ discord.go | 23 +++++++++++--- docs/test-cpu-memory.png | Bin 0 -> 36570 bytes mumble.go | 48 ++++++++++++++++------------- sleepct.go | 41 ++++++++++++++++++++++++ test-cpu-memory.png | Bin 0 -> 32227 bytes tickerct.go | 2 +- tickerct_test.go => timing_test.go | 30 ++++++++++++++++++ 8 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 docs/test-cpu-memory.png create mode 100644 sleepct.go create mode 100644 test-cpu-memory.png rename tickerct_test.go => timing_test.go (71%) diff --git a/Makefile b/Makefile index e4a2448..5d30e51 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,12 @@ dev-race: $(GOFILES) dev-profile: $(GOFILES) goreleaser build --skip-validate --rm-dist && sudo ./dist/mumble-discord-bridge_linux_amd64/mumble-discord-bridge -cpuprofile cpu.prof +test-chart: SHELL:=/bin/bash +test-chart: + go test & + until pidof mumble-discord-bridge.test; do continue; done; + psrecord --plot test-cpu-memory.png $$(pidof mumble-discord-bridge.test) + docker-latest: docker build -t stieneee/mumble-discord-bridge:latest . diff --git a/discord.go b/discord.go index 7d2f79f..272345b 100644 --- a/discord.go +++ b/discord.go @@ -61,7 +61,11 @@ func (dd *DiscordDuplex) discordSendPCM(ctx context.Context, wg *sync.WaitGroup, opusSilence = append(opusSilence, 0x00) } - ticker := NewTickerCT(20 * time.Millisecond) + // ticker := NewTickerCT(20 * time.Millisecond) + sleepTick := SleepCT{ + d: 20 * time.Millisecond, + t: time.Now(), + } lastReady := true var readyTimeout *time.Timer @@ -97,7 +101,10 @@ func (dd *DiscordDuplex) discordSendPCM(ctx context.Context, wg *sync.WaitGroup, return default: } - <-ticker.C + + // <-ticker.C + sleepTick.SleepNextTarget() + if (len(pcm) > 1 && streaming) || (len(pcm) > dd.Bridge.BridgeConfig.DiscordStartStreamingCount && !streaming) { if !streaming { log.Println("Debug: Discord start speaking") @@ -134,7 +141,8 @@ func (dd *DiscordDuplex) discordSendPCM(ctx context.Context, wg *sync.WaitGroup, // We want to do this after alerting the user of possible short speaking cycles for i := 0; i < 5; i++ { internalSend(opusSilence) - <-ticker.C + // <-ticker.C + sleepTick.SleepNextTarget() } dd.Bridge.DiscordVoice.Speaking(false) @@ -235,7 +243,10 @@ func (dd *DiscordDuplex) discordReceivePCM(ctx context.Context, wg *sync.WaitGro } func (dd *DiscordDuplex) fromDiscordMixer(ctx context.Context, wg *sync.WaitGroup, toMumble chan<- gumble.AudioBuffer) { - ticker := NewTickerCT(10 * time.Millisecond) + sleepTick := SleepCT{ + d: 10 * time.Millisecond, + t: time.Now(), + } sendAudio := false wg.Add(1) @@ -244,9 +255,11 @@ func (dd *DiscordDuplex) fromDiscordMixer(ctx context.Context, wg *sync.WaitGrou case <-ctx.Done(): wg.Done() return - case <-ticker.C: + default: } + sleepTick.SleepNextTarget() + dd.discordMutex.Lock() sendAudio = false diff --git a/docs/test-cpu-memory.png b/docs/test-cpu-memory.png new file mode 100644 index 0000000000000000000000000000000000000000..90a991416cceba0cea86d8ca83ee3923e145ff96 GIT binary patch literal 36570 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 XZohpTX7Y9dfqzslX)0zYm_GhL?#L7i literal 0 HcmV?d00001 diff --git a/mumble.go b/mumble.go index 1f60548..c248b57 100644 --- a/mumble.go +++ b/mumble.go @@ -44,7 +44,10 @@ func (m MumbleDuplex) OnAudioStream(e *gumble.AudioStreamEvent) { } func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, toDiscord chan []int16) { - ticker := NewTickerCT(10 * time.Millisecond) + sleepTick := SleepCT{ + d: 10 * time.Millisecond, + t: time.Now(), + } sendAudio := false bufferWarning := false @@ -58,7 +61,7 @@ func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, t default: } - <-ticker.C + sleepTick.SleepNextTarget() mutex.Lock() @@ -86,27 +89,28 @@ func (m MumbleDuplex) fromMumbleMixer(ctx context.Context, wg *sync.WaitGroup, t mutex.Unlock() - outBuf := make([]int16, 480) - - for i := 0; i < len(outBuf); i++ { - for j := 0; j < len(internalMixerArr); j++ { - outBuf[i] += (internalMixerArr[j])[i] - } - } - - if len(toDiscord) > 20 { - if !bufferWarning { - log.Println("Warning: toDiscord buffer size") - bufferWarning = true - } - } else { - if bufferWarning { - log.Println("Resolved: toDiscord buffer size") - bufferWarning = false - } - } - if sendAudio { + + outBuf := make([]int16, 480) + + for i := 0; i < len(outBuf); i++ { + for j := 0; j < len(internalMixerArr); j++ { + outBuf[i] += (internalMixerArr[j])[i] + } + } + + if len(toDiscord) > 20 { + if !bufferWarning { + log.Println("Warning: toDiscord buffer size") + bufferWarning = true + } + } else { + if bufferWarning { + log.Println("Resolved: toDiscord buffer size") + bufferWarning = false + } + } + select { case toDiscord <- outBuf: default: diff --git a/sleepct.go b/sleepct.go new file mode 100644 index 0000000..f5277c7 --- /dev/null +++ b/sleepct.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "sync" + "time" +) + +// SleepCT - Sleep constant time step crates a sleep based ticker +// designed maintain a sleep/tick interval +type SleepCT struct { + sync.Mutex + d time.Duration // duration + t time.Time // last time target +} + +func (s *SleepCT) SleepNextTarget() { + s.Lock() + + now := time.Now() + + var last time.Time + if s.t.IsZero() { + fmt.Println("SleepCT reset") + last = now.Add(-s.d) + } else { + last = s.t + } + + // Next Target + s.t = last.Add(s.d) + + d := s.t.Sub(now) + + time.Sleep(d) + + // delta := now.Sub(s.t) + // fmt.Println("delta", delta, d, time.Since(s.t)) + + s.Unlock() +} diff --git a/test-cpu-memory.png b/test-cpu-memory.png new file mode 100644 index 0000000000000000000000000000000000000000..50c4db5e36a16a7fbe9fad672f6bbd70f2301cf7 GIT binary patch literal 32227 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