diff --git a/app/internal/gpu/gpu.go b/app/internal/gpu/gpu.go index d18c29e7..915ef1aa 100644 --- a/app/internal/gpu/gpu.go +++ b/app/internal/gpu/gpu.go @@ -25,6 +25,7 @@ type GPU struct { pathCache *opCache cache *resourceCache + profile string timers *timers frameStart time.Time zopsTimer, stencilTimer, coverTimer, cleanupTimer *timer @@ -304,12 +305,11 @@ func (g *GPU) Frame(viewport image.Point) { g.coverTimer.end() } -func (g *GPU) EndFrame() string { +func (g *GPU) EndFrame() { g.cleanupTimer.begin() g.cache.frame(g.ctx) g.pathCache.frame(g.ctx) g.cleanupTimer.end() - var summary string if g.drawOps.profile && g.timers.ready() { zt, st, covt, cleant := g.zopsTimer.Elapsed, g.stencilTimer.Elapsed, g.coverTimer.Elapsed, g.cleanupTimer.Elapsed ft := zt + st + covt + cleant @@ -317,9 +317,12 @@ func (g *GPU) EndFrame() string { zt, st, covt = zt.Round(q), st.Round(q), covt.Round(q) frameDur := time.Since(g.frameStart).Round(q) ft = ft.Round(q) - summary = fmt.Sprintf("draw:%7s gpu:%7s zt:%7s st:%7s cov:%7s", frameDur, ft, zt, st, covt) + g.profile = fmt.Sprintf("draw:%7s gpu:%7s zt:%7s st:%7s cov:%7s", frameDur, ft, zt, st, covt) } - return summary +} + +func (g *GPU) Profile() string { + return g.profile } func (r *renderer) texHandle(t *texture) gl.Texture { diff --git a/app/loop.go b/app/loop.go index 9216a325..a630c461 100644 --- a/app/loop.go +++ b/app/loop.go @@ -31,7 +31,7 @@ type frame struct { } type frameResult struct { - summary string + profile string err error } @@ -86,7 +86,8 @@ func (l *renderLoop) renderLoop(glctx window.Context) error { g.Frame(frame.viewport) var res frameResult res.err = glctx.Present() - res.summary = g.EndFrame() + g.EndFrame() + res.profile = g.Profile() glctx.Unlock() l.results <- res case <-l.stop: @@ -109,8 +110,8 @@ func (l *renderLoop) Flush() error { if l.drawing { st := <-l.results l.setErr(st.err) - if st.summary != "" { - l.summary = st.summary + if st.profile != "" { + l.summary = st.profile } l.drawing = false }