From 4cc32c42940d36d6a5905f7ab4e010cdce70d66a Mon Sep 17 00:00:00 2001 From: JetSetIlly Date: Sat, 4 May 2024 10:25:28 +0100 Subject: [PATCH] added statsviz patch statsviz support is presented in the form of a patch file. this is so that the requirements of the patch don't become part of the project unecessarily the statsviz package is only needed for emulator development and including the additional packages in the BOM creates a false impression of the requirements (IMO) patch can be applied with: git apply --verbose 0001-statsviz.patch Makefile has a "patch_file_integrity" target to test that patch files can still be applied cleanly. ideal for calling from git pre-commit hook patch was created with: git diff > 0001-statsviz.patch --- 0001-statsviz.patch | 85 +++++++++++++++++++++++++++++++++++++++++++++ Makefile | 10 +++++- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 0001-statsviz.patch diff --git a/0001-statsviz.patch b/0001-statsviz.patch new file mode 100644 index 00000000..171c97b8 --- /dev/null +++ b/0001-statsviz.patch @@ -0,0 +1,85 @@ +diff --git a/go.mod b/go.mod +index ee7d106cb..ef953f3df 100644 +--- a/go.mod ++++ b/go.mod +@@ -15,4 +15,8 @@ require ( + golang.org/x/sys v0.8.0 + ) + +-require github.com/go-audio/riff v1.0.0 // indirect ++require ( ++ github.com/arl/statsviz v0.6.0 // indirect ++ github.com/go-audio/riff v1.0.0 // indirect ++ github.com/gorilla/websocket v1.5.0 // indirect ++) +diff --git a/go.sum b/go.sum +index f7a11b810..128def96d 100644 +--- a/go.sum ++++ b/go.sum +@@ -1,3 +1,5 @@ ++github.com/arl/statsviz v0.6.0 h1:jbW1QJkEYQkufd//4NDYRSNBpwJNrdzPahF7ZmoGdyE= ++github.com/arl/statsviz v0.6.0/go.mod h1:0toboo+YGSUXDaS4g1D5TVS4dXs7S7YYT5J/qnW2h8s= + github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= + github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= + github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4= +@@ -8,6 +10,8 @@ github.com/go-audio/wav v1.1.0 h1:jQgLtbqBzY7G+BM8fXF7AHUk1uHUviWS4X39d5rsL2g= + github.com/go-audio/wav v1.1.0/go.mod h1:mpe9qfwbScEbkd8uybLuIpTgHyrISw/OTuvjUW2iGtE= + github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= + github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= ++github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= ++github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= + github.com/hajimehoshi/go-mp3 v0.3.3 h1:cWnfRdpye2m9ElSoVqneYRcpt/l3ijttgjMeQh+r+FE= + github.com/hajimehoshi/go-mp3 v0.3.3/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM= + github.com/hajimehoshi/go-mp3 v0.3.4 h1:NUP7pBYH8OguP4diaTZ9wJbUbk3tC0KlfzsEpWmYj68= +diff --git a/gopher2600.go b/gopher2600.go +index a3294cbc6..0f0795f68 100644 +--- a/gopher2600.go ++++ b/gopher2600.go +@@ -20,12 +20,14 @@ import ( + "flag" + "fmt" + "io" ++ "net/http" + "os" + "os/signal" + "runtime" + "strings" + "time" + ++ "github.com/arl/statsviz" + "github.com/jetsetilly/gopher2600/cartridgeloader" + "github.com/jetsetilly/gopher2600/debugger" + "github.com/jetsetilly/gopher2600/debugger/govern" +@@ -337,6 +339,12 @@ func emulate(mode string, sync *mainSync, args []string) error { + opts.TermType = "IMGUI" + } + ++ // statsviz option ++ const statsvizAddr = "localhost:2610" ++ ++ var stats bool ++ flgs.BoolVar(&stats, "statsviz", false, fmt.Sprintf("run statsviz server on %s", statsvizAddr)) ++ + // parse args and get copy of remaining arguments + err := flgs.Parse(args) + if err != nil { +@@ -366,6 +374,19 @@ func emulate(mode string, sync *mainSync, args []string) error { + // turning the emulation's interrupt handler off + sync.state <- stateRequest{req: reqNoIntSig} + ++ // setup statsviz server if it has been activated ++ if stats { ++ mux := http.NewServeMux() ++ statsviz.Register(mux) ++ go func() { ++ logger.Logf(logger.Allow, "statsviz", "listening on %s/debug/statsviz", statsvizAddr) ++ err := http.ListenAndServe(statsvizAddr, mux) ++ if err != nil { ++ logger.Log(logger.Allow, "%s", err.Error()) ++ } ++ }() ++ } ++ + // prepare new debugger, supplying a debugger.CreateUserInterface function. + // this function will be called by NewDebugger() and in turn will send a + // GUI create message to the main goroutine diff --git a/Makefile b/Makefile index 2b8cf24c..4f19c43f 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ endif ### support targets -.PHONY: all clean tidy generate check_git check_glsl glsl_validate check_pandoc readme_spell +.PHONY: all clean tidy generate check_git check_glsl glsl_validate check_pandoc readme_spell patch_file_integrity all: @echo "use release target to build release binary" @@ -57,6 +57,14 @@ readme_spell: check_pandoc @pandoc README.md -t plain | aspell -a | sed '1d;$d' | cut -d ' ' -f 2 | awk 'length($0)>1' | sort | uniq # sed is used to chop off the first line of aspell output, which is a version banner +patch_file_integrity: *.patch +# check that patch files are still valid + @echo "patch file integrity" + @for file in $^; do \ + echo " $$file"; \ + git apply --check $$file; \ + done + @echo "patch files are fine" ### testing targets .PHONY: test race race_debug