refactor: rewrite waitForVideoStreamingStatus to use ticker instead of time.Sleep

This commit is contained in:
Siyuan 2025-11-21 10:34:11 +00:00
parent 4244c84a2a
commit 26872ee0b6
2 changed files with 31 additions and 10 deletions

View File

@ -48,6 +48,18 @@ const (
VideoStreamingStatusInactive VideoStreamingStatus = 0 VideoStreamingStatusInactive VideoStreamingStatus = 0
) )
func (s VideoStreamingStatus) String() string {
switch s {
case VideoStreamingStatusActive:
return "active"
case VideoStreamingStatusStopping:
return "stopping"
case VideoStreamingStatusInactive:
return "inactive"
}
return "unknown"
}
func NewNative(opts NativeOptions) *Native { func NewNative(opts NativeOptions) *Native {
pid := os.Getpid() pid := os.Getpid()
nativeSubLogger := nativeLogger.With().Int("pid", pid).Str("scope", "native").Logger() nativeSubLogger := nativeLogger.With().Int("pid", pid).Str("scope", "native").Logger()

View File

@ -29,6 +29,23 @@ func isSleepModeSupported() bool {
const sleepModeWaitTimeout = 3 * time.Second const sleepModeWaitTimeout = 3 * time.Second
func (n *Native) waitForVideoStreamingStatus(status VideoStreamingStatus) error {
timeout := time.After(sleepModeWaitTimeout)
ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop()
for {
if videoGetStreamingStatus() == status {
return nil
}
select {
case <-timeout:
return fmt.Errorf("timed out waiting for video streaming status to be %s", status.String())
case <-ticker.C:
}
}
}
func (n *Native) setSleepMode(enabled bool) error { func (n *Native) setSleepMode(enabled bool) error {
if !n.sleepModeSupported { if !n.sleepModeSupported {
return nil return nil
@ -51,16 +68,8 @@ func (n *Native) setSleepMode(enabled bool) error {
} }
if shouldWait { if shouldWait {
start := time.Now() if err := n.waitForVideoStreamingStatus(VideoStreamingStatusInactive); err != nil {
for { return err
if n.VideoGetStreamingStatus() == VideoStreamingStatusInactive {
break
}
if time.Since(start) >= sleepModeWaitTimeout {
n.l.Warn().Msg("timed out waiting for video stream to stop")
break
}
time.Sleep(100 * time.Millisecond)
} }
} }