internal/debug: rename functions

This commit is contained in:
Hajime Hoshi 2024-08-07 23:33:54 +09:00
parent 13353dc465
commit 74722298a2
8 changed files with 36 additions and 30 deletions

View File

@ -866,7 +866,7 @@ func SwapBuffers(graphicsDriver graphicsdriver.Graphics) error {
}() }()
if debug.IsDebug { if debug.IsDebug {
debug.Logf("Internal image sizes:\n") debug.FrameLogf("Internal image sizes:\n")
imgs := make([]*graphicscommand.Image, 0, len(theBackends)) imgs := make([]*graphicscommand.Image, 0, len(theBackends))
for _, backend := range theBackends { for _, backend := range theBackends {
imgs = append(imgs, backend.image) imgs = append(imgs, backend.image)

View File

@ -14,7 +14,8 @@
package debug package debug
type Logger interface { // FrameLogger defines the interface for logging debug information for each frame.
Logf(format string, args ...any) type FrameLogger interface {
FrameLogf(format string, args ...any)
Flush() Flush()
} }

View File

@ -23,30 +23,32 @@ import (
const IsDebug = true const IsDebug = true
var theLogger = &logger{} var theFrameLogger = &frameLogger{}
var flushM sync.Mutex var flushM sync.Mutex
// Logf calls the current global logger's Logf. // FrameLogf calls the current global logger's FrameLogf.
// Logf buffers the arguments and doesn't dump the log immediately. // FrameLogf buffers the arguments and doesn't dump the log immediately.
// You can dump logs by calling SwitchLogger and Flush. // You can dump logs by calling SwitchLogger and Flush.
// //
// Logf is not concurrent safe. // FrameLogf is not concurrent safe.
func Logf(format string, args ...any) { // FrameLogf and SwitchFrameLogger must be called from the same goroutine.
theLogger.Logf(format, args...) func FrameLogf(format string, args ...any) {
theFrameLogger.FrameLogf(format, args...)
} }
// SwitchLogger sets a new logger as the current logger and returns the original global logger. // SwitchFrameLogger sets a new logger as the current logger and returns the original global logger.
// The new global logger and the returned logger have separate statuses, so you can use them for different goroutines. // The new global logger and the returned logger have separate statuses, so you can use them for different goroutines.
// //
// SwitchLogger and a returned Logger are not concurrent safe. // SwitchFrameLogger and a returned Logger are not concurrent safe.
func SwitchLogger() Logger { // FrameLogf and SwitchFrameLogger must be called from the same goroutine.
current := theLogger func SwitchFrameLogger() FrameLogger {
theLogger = &logger{} current := theFrameLogger
theFrameLogger = &frameLogger{}
return current return current
} }
type logger struct { type frameLogger struct {
items []logItem items []logItem
} }
@ -55,14 +57,14 @@ type logItem struct {
args []any args []any
} }
func (l *logger) Logf(format string, args ...any) { func (l *frameLogger) FrameLogf(format string, args ...any) {
l.items = append(l.items, logItem{ l.items = append(l.items, logItem{
format: format, format: format,
args: args, args: args,
}) })
} }
func (l *logger) Flush() { func (l *frameLogger) Flush() {
// Flushing is protected by a mutex not to mix another logger's logs. // Flushing is protected by a mutex not to mix another logger's logs.
flushM.Lock() flushM.Lock()
defer flushM.Unlock() defer flushM.Unlock()

View File

@ -18,17 +18,17 @@ package debug
const IsDebug = false const IsDebug = false
func Logf(format string, args ...any) { func FrameLogf(format string, args ...any) {
} }
func SwitchLogger() Logger { func SwitchFrameLogger() FrameLogger {
return dummyLogger{} return dummyFrameLogger{}
} }
type dummyLogger struct{} type dummyFrameLogger struct{}
func (dummyLogger) Logf(format string, args ...any) { func (dummyFrameLogger) FrameLogf(format string, args ...any) {
} }
func (dummyLogger) Flush() { func (dummyFrameLogger) Flush() {
} }

View File

@ -54,6 +54,9 @@ func (g *nativeGamepadsImpl) init(gamepads *gamepads) error {
if err == unix.ENOENT { if err == unix.ENOENT {
return nil return nil
} }
if err == unix.EPERM {
return nil
}
return fmt.Errorf("gamepad: Stat failed: %w", err) return fmt.Errorf("gamepad: Stat failed: %w", err)
} }
if stat.Mode&unix.S_IFDIR == 0 { if stat.Mode&unix.S_IFDIR == 0 {

View File

@ -197,7 +197,7 @@ func (q *commandQueue) Flush(graphicsDriver graphicsdriver.Graphics, endFrame bo
} }
} }
logger := debug.SwitchLogger() logger := debug.SwitchFrameLogger()
var flushErr error var flushErr error
runOnRenderThread(func() { runOnRenderThread(func() {
@ -223,7 +223,7 @@ func (q *commandQueue) Flush(graphicsDriver graphicsdriver.Graphics, endFrame bo
} }
// flush must be called the render thread. // flush must be called the render thread.
func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bool, logger debug.Logger) (err error) { func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bool, logger debug.FrameLogger) (err error) {
// If endFrame is true, Begin/End should be called to ensure the framebuffer is swapped. // If endFrame is true, Begin/End should be called to ensure the framebuffer is swapped.
if len(q.commands) == 0 && !endFrame { if len(q.commands) == 0 && !endFrame {
return nil return nil
@ -231,7 +231,7 @@ func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bo
es := q.indices es := q.indices
vs := q.vertices vs := q.vertices
logger.Logf("Graphics commands:\n") logger.FrameLogf("Graphics commands:\n")
if err := graphicsDriver.Begin(); err != nil { if err := graphicsDriver.Begin(); err != nil {
return err return err
@ -294,7 +294,7 @@ func (q *commandQueue) flush(graphicsDriver graphicsdriver.Graphics, endFrame bo
if err := c.Exec(q, graphicsDriver, indexOffset); err != nil { if err := c.Exec(q, graphicsDriver, indexOffset); err != nil {
return err return err
} }
logger.Logf(" %s\n", c) logger.FrameLogf(" %s\n", c)
// TODO: indexOffset should be reset if the command type is different // TODO: indexOffset should be reset if the command type is different
// from the previous one. This fix is needed when another drawing command is // from the previous one. This fix is needed when another drawing command is
// introduced than drawTrianglesCommand. // introduced than drawTrianglesCommand.

View File

@ -234,6 +234,6 @@ func LogImagesInfo(images []*Image) {
if i.screen { if i.screen {
screen = " (screen)" screen = " (screen)"
} }
debug.Logf(" %d: (%d, %d)%s\n", i.id, w, h, screen) debug.FrameLogf(" %d: (%d, %d)%s\n", i.id, w, h, screen)
} }
} }

View File

@ -95,7 +95,7 @@ func (c *context) updateFrameImpl(graphicsDriver graphicsdriver.Graphics, update
return nil return nil
} }
debug.Logf("----\n") debug.FrameLogf("----\n")
if err := atlas.BeginFrame(graphicsDriver); err != nil { if err := atlas.BeginFrame(graphicsDriver); err != nil {
return err return err
@ -133,7 +133,7 @@ func (c *context) updateFrameImpl(graphicsDriver graphicsdriver.Graphics, update
updateCount = 1 updateCount = 1
c.updateCalled = true c.updateCalled = true
} }
debug.Logf("Update count per frame: %d\n", updateCount) debug.FrameLogf("Update count per frame: %d\n", updateCount)
// Update the game. // Update the game.
for i := 0; i < updateCount; i++ { for i := 0; i < updateCount; i++ {