File caching and stats for tex/file caches.

This commit is contained in:
stevenhowes
2022-03-27 19:38:38 +01:00
parent 094a2e3f64
commit e9a53fbf05
4 changed files with 40 additions and 9 deletions
+5 -1
View File
@@ -9,6 +9,7 @@ package GoRetro
import ( import (
"encoding/json" "encoding/json"
"fmt"
"time" "time"
"github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/sdl"
@@ -119,7 +120,10 @@ func NewSequence(
var seq Sequence var seq Sequence
jsonFile := GetFile(indexpath) jsonFile, err := GetFile(indexpath)
if err != nil {
return nil, fmt.Errorf("loading sequence %v: %v", indexpath, err)
}
json.Unmarshal(jsonFile.Data, &seq.frames) json.Unmarshal(jsonFile.Data, &seq.frames)
+6
View File
@@ -24,6 +24,9 @@ var Delta float64
var LastDebugStatePrint time.Time var LastDebugStatePrint time.Time
var DebugTick bool var DebugTick bool
var CacheHitsFile int
var CacheHitsTex int
func Init() (*sdl.Renderer, *sdl.Window) { func Init() (*sdl.Renderer, *sdl.Window) {
if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil {
fmt.Println("initializing SDL:", err) fmt.Println("initializing SDL:", err)
@@ -49,6 +52,7 @@ func Init() (*sdl.Renderer, *sdl.Window) {
} }
TexList = make(map[string]*sdl.Texture) TexList = make(map[string]*sdl.Texture)
FileList = make(map[string]*vFile)
LastDebugStatePrint = time.Now() LastDebugStatePrint = time.Now()
@@ -123,6 +127,8 @@ func Tick(renderer *sdl.Renderer) bool {
fmt.Printf("TPS: %d\n", 1000000/(time.Since(frameStartTime).Microseconds()+1)) fmt.Printf("TPS: %d\n", 1000000/(time.Since(frameStartTime).Microseconds()+1))
fmt.Printf("Elements: %d\n", len(Elements)) fmt.Printf("Elements: %d\n", len(Elements))
fmt.Printf("Viewport: %.0f %.0f %.0f %.0f\n", ViewPort.Position.X, ViewPort.Position.Y, ViewPort.Size.X, ViewPort.Size.Y) fmt.Printf("Viewport: %.0f %.0f %.0f %.0f\n", ViewPort.Position.X, ViewPort.Position.Y, ViewPort.Size.X, ViewPort.Size.Y)
fmt.Printf("Cache hits: File %d Texture %d\n", CacheHitsFile, CacheHitsTex)
} }
Delta = time.Since(frameStartTime).Seconds() * Config.TargetTicksPerSecond Delta = time.Since(frameStartTime).Seconds() * Config.TargetTicksPerSecond
+17 -4
View File
@@ -8,18 +8,31 @@ package GoRetro
* the use of archive files etc in future. * the use of archive files etc in future.
*/ */
import "os" import (
"fmt"
"os"
)
type vFile struct { type vFile struct {
Data []byte Data []byte
Size int Size int
} }
func GetFile(filename string) *vFile { var FileList map[string]*vFile
Data, _ := os.ReadFile(Config.DataDir + filename)
func GetFile(filename string) (*vFile, error) {
if val, ok := FileList[filename]; ok {
CacheHitsFile++
return val, nil
}
Data, err := os.ReadFile(Config.DataDir + filename)
vf := vFile{ vf := vFile{
Size: len(Data), Size: len(Data),
Data: Data, Data: Data,
} }
return &vf
fmt.Printf("File Caching %s\n", filename)
FileList[filename] = &vf
return &vf, err
} }
+12 -4
View File
@@ -44,15 +44,23 @@ func drawTexture(
func loadTextureFromBMP(filename string, renderer *sdl.Renderer) (*sdl.Texture, error) { func loadTextureFromBMP(filename string, renderer *sdl.Renderer) (*sdl.Texture, error) {
if val, ok := TexList[filename]; ok { if val, ok := TexList[filename]; ok {
CacheHitsTex++
return val, nil return val, nil
} }
vFile := GetFile(filename) vFile, err := GetFile(filename)
file, _ := sdl.RWFromMem(vFile.Data) if err != nil {
return nil, fmt.Errorf("loading %v: %v", filename, err)
}
file, err := sdl.RWFromMem(vFile.Data)
if err != nil {
return nil, fmt.Errorf("making RW from %v: %v", filename, err)
}
img, err := sdl.LoadBMPRW(file, true) img, err := sdl.LoadBMPRW(file, true)
if err != nil { if err != nil {
return nil, fmt.Errorf("loading %v: %v", filename, err) return nil, fmt.Errorf("loading from RW for file %v: %v", filename, err)
} }
defer img.Free() defer img.Free()
tex, err := renderer.CreateTextureFromSurface(img) tex, err := renderer.CreateTextureFromSurface(img)
@@ -61,6 +69,6 @@ func loadTextureFromBMP(filename string, renderer *sdl.Renderer) (*sdl.Texture,
} }
TexList[filename] = tex TexList[filename] = tex
fmt.Printf("Caching %s\n", filename) fmt.Printf("Texture Caching %s\n", filename)
return tex, nil return tex, nil
} }