12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // SPDX-License-Identifier: Unlicense OR MIT
- package gpu
- import (
- "time"
- "gioui.org/gpu/internal/driver"
- )
- type timers struct {
- backend driver.Device
- timers []*timer
- }
- type timer struct {
- Elapsed time.Duration
- backend driver.Device
- timer driver.Timer
- state timerState
- }
- type timerState uint8
- const (
- timerIdle timerState = iota
- timerRunning
- timerWaiting
- )
- func newTimers(b driver.Device) *timers {
- return &timers{
- backend: b,
- }
- }
- func (t *timers) newTimer() *timer {
- if t == nil {
- return nil
- }
- tt := &timer{
- backend: t.backend,
- timer: t.backend.NewTimer(),
- }
- t.timers = append(t.timers, tt)
- return tt
- }
- func (t *timer) begin() {
- if t == nil || t.state != timerIdle {
- return
- }
- t.timer.Begin()
- t.state = timerRunning
- }
- func (t *timer) end() {
- if t == nil || t.state != timerRunning {
- return
- }
- t.timer.End()
- t.state = timerWaiting
- }
- func (t *timers) ready() bool {
- if t == nil {
- return false
- }
- for _, tt := range t.timers {
- switch tt.state {
- case timerIdle:
- continue
- case timerRunning:
- return false
- }
- d, ok := tt.timer.Duration()
- if !ok {
- return false
- }
- tt.state = timerIdle
- tt.Elapsed = d
- }
- return t.backend.IsTimeContinuous()
- }
- func (t *timers) Release() {
- if t == nil {
- return
- }
- for _, tt := range t.timers {
- tt.timer.Release()
- }
- t.timers = nil
- }
|