chore: remove per-event debug logging from the normal path

Drop the log.Printf/fmt.Printf traces that fired on every config/input/
click/scroll/open/worker-result during IME and tap debugging. These were
noise (and some were commented out). Error, limit, and recovery logs are
kept; the default-off profiler and gated IME debug remain untouched.
This commit is contained in:
Greg Pomerantz 2026-08-16 20:58:49 -04:00
parent 6dedffcba7
commit e11d705196
6 changed files with 5 additions and 49 deletions

View File

@ -13,7 +13,6 @@ import "C"
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"runtime" "runtime"
"unsafe" "unsafe"
@ -34,7 +33,6 @@ func impl_start() { }
func handleEvent(e event.Event) { func handleEvent(e event.Event) {
switch e := e.(type) { switch e := e.(type) {
case app.AndroidViewEvent: case app.AndroidViewEvent:
log.Print("ViewEvent")
theJVM = (*C.JavaVM)(unsafe.Pointer(app.JavaVM())) theJVM = (*C.JavaVM)(unsafe.Pointer(app.JavaVM()))
RunInJVM(func(env *JNIEnv) { RunInJVM(func(env *JNIEnv) {
C.registerFragment(env, (C.jobject)(unsafe.Pointer(e.View))) C.registerFragment(env, (C.jobject)(unsafe.Pointer(e.View)))
@ -66,7 +64,6 @@ func RunInJVM(f func(env *C.JNIEnv)) {
} }
func OpenFile(path string) { func OpenFile(path string) {
log.Printf("OpenFile(%s)",path)
var env *C.JNIEnv var env *C.JNIEnv
var detach bool var detach bool
if res := C.GetEnv(theJVM, &env, C.JNI_VERSION_1_6); res != C.JNI_OK { if res := C.GetEnv(theJVM, &env, C.JNI_VERSION_1_6); res != C.JNI_OK {
@ -85,7 +82,6 @@ func OpenFile(path string) {
}() }()
} }
cpath := C.CString(path) cpath := C.CString(path)
log.Printf("OpenFile: calling open_file_in_termux",path)
C.open_file_in_termux(env, cpath) C.open_file_in_termux(env, cpath)
C.free(unsafe.Pointer(cpath)) C.free(unsafe.Pointer(cpath))
} }

View File

@ -36,7 +36,6 @@ func main() {
} }
func run(w *app.Window) error { func run(w *app.Window) error {
log.Printf("run: starting")
var ops op.Ops var ops op.Ops
shaper := text.NewShaper(text.WithCollection(gofont.Collection())) shaper := text.NewShaper(text.WithCollection(gofont.Collection()))
@ -96,9 +95,7 @@ func run(w *app.Window) error {
var mu sync.Mutex var mu sync.Mutex
var frame editor.Frame var frame editor.Frame
log.Printf("run: starting frameReceiver")
go frameReceiver(w, &mu, &frame, logic.FrameChan()) go frameReceiver(w, &mu, &frame, logic.FrameChan())
log.Printf("run: starting logic.Run")
go logic.Run() go logic.Run()
for { for {
@ -159,10 +156,8 @@ func run(w *app.Window) error {
if !ok { if !ok {
break break
} }
//log.Printf("found an event: %T", evt)
switch k := evt.(type) { switch k := evt.(type) {
case key.Event: case key.Event:
//log.Printf("key event: %v state=%v", k.Name, k.State)
if k.State == key.Press { if k.State == key.Press {
events = append(events, ui.InputEvent{ events = append(events, ui.InputEvent{
Handler: reg.Handler, Handler: reg.Handler,
@ -170,13 +165,11 @@ func run(w *app.Window) error {
}) })
} }
case key.EditEvent: case key.EditEvent:
//log.Printf("edit event text: %q", k.Text)
events = append(events, ui.InputEvent{ events = append(events, ui.InputEvent{
Handler: reg.Handler, Handler: reg.Handler,
Data: k, Data: k,
}) })
case key.SnippetEvent: case key.SnippetEvent:
//log.Printf("snippet event: %v", k)
// Handle snippet event if necessary, or ignore // Handle snippet event if necessary, or ignore
default: default:
log.Printf("unexpected event type: %T", k) log.Printf("unexpected event type: %T", k)
@ -197,17 +190,14 @@ func run(w *app.Window) error {
} }
logic.LayoutChan() <- glyphLayout logic.LayoutChan() <- glyphLayout
default: default:
//log.Printf("pad: default event")
handleEvent(e) handleEvent(e)
} }
} }
} }
func frameReceiver(w *app.Window, mu *sync.Mutex, frame *editor.Frame, frameChan <-chan editor.Frame) { func frameReceiver(w *app.Window, mu *sync.Mutex, frame *editor.Frame, frameChan <-chan editor.Frame) {
log.Printf("frameReceiver: loop starting")
for { for {
f := <-frameChan f := <-frameChan
//log.Printf("frameReceiver: received frame")
mu.Lock() mu.Lock()
*frame = f *frame = f
w.Invalidate() w.Invalidate()

View File

@ -1,9 +1,8 @@
package browser package browser
import ( import (
"fmt"
"path/filepath"
"pad/internal/ui" "pad/internal/ui"
"path/filepath"
) )
// HandleScroll updates the browser scroll index by the given delta (in entries). // HandleScroll updates the browser scroll index by the given delta (in entries).
@ -103,13 +102,8 @@ func HandleBrowserTap(bm *BrowserManager, s *BrowserState, index int) {
} else { } else {
// Open file // Open file
s.SelectedIndex = entryIndex s.SelectedIndex = entryIndex
fmt.Printf("HandleBrowserTap: Opening file %s\n", entry.Path)
if ui.OpenFile != nil { if ui.OpenFile != nil {
ui.OpenFile(entry.Path) ui.OpenFile(entry.Path)
} }
// Dispatch ReadFileTask to the worker pool
// task := pool.NewReadFileTask(entry.Path, bm.fs)
// fmt.Printf("HandleBrowserTap: Dispatching ReadFileTask for %s\n", entry.Path)
// bm.workerPool.Dispatch(task)
} }
} }

View File

@ -26,8 +26,6 @@ func NewBrowserManager(state *BrowserState, wp *pool.WorkerPool, fs pool.FileSys
} }
func (bm *BrowserManager) NavigateTo(dirPath string) { func (bm *BrowserManager) NavigateTo(dirPath string) {
fmt.Printf("NavigateTo: dirPath=%s, state.CurrentPath=%s\n", dirPath, bm.state.CurrentPath)
// Save the previous path so we can restore it on navigation failure. // Save the previous path so we can restore it on navigation failure.
bm.state.History = append(bm.state.History, bm.state.CurrentPath) bm.state.History = append(bm.state.History, bm.state.CurrentPath)
@ -55,11 +53,8 @@ func (bm *BrowserManager) OnScroll() {
} }
} }
fmt.Printf("OnScroll: minPage=%d, maxPage=%d, pagesToLoad=%v\n", minPage, maxPage, pagesToLoad)
// Dispatch LoadPagesTask for unloaded pages // Dispatch LoadPagesTask for unloaded pages
if len(pagesToLoad) > 0 { if len(pagesToLoad) > 0 {
fmt.Printf("OnScroll: Dispatching LoadPagesTask for pages %v\n", pagesToLoad)
task := pool.NewLoadPagesTask(bm.state.CurrentPath, pagesToLoad, bm.fs) task := pool.NewLoadPagesTask(bm.state.CurrentPath, pagesToLoad, bm.fs)
bm.workerPool.Dispatch(task) bm.workerPool.Dispatch(task)
} }
@ -95,10 +90,10 @@ func (bm *BrowserManager) handleBuildIndexSuccess(result pool.Result) {
// In the mock implementation, BuildIndexTask returns []types.DirEntry. // In the mock implementation, BuildIndexTask returns []types.DirEntry.
// We need to convert these to browser.Entry and build the SortIndex. // We need to convert these to browser.Entry and build the SortIndex.
entries := result.Data.([]types.DirEntry) entries := result.Data.([]types.DirEntry)
var browserEntries []Entry var browserEntries []Entry
// Add ".." entry if not at root // Add ".." entry if not at root
// We check against "/" specifically. "." is just a relative path for current dir, // We check against "/" specifically. "." is just a relative path for current dir,
// which still has a parent. // which still has a parent.
if bm.state.CurrentPath != "/" && bm.state.CurrentPath != "" { if bm.state.CurrentPath != "/" && bm.state.CurrentPath != "" {
browserEntries = append(browserEntries, Entry{ browserEntries = append(browserEntries, Entry{
@ -109,10 +104,9 @@ func (bm *BrowserManager) handleBuildIndexSuccess(result pool.Result) {
IsDir: true, IsDir: true,
}) })
} }
for _, e := range entries { for _, e := range entries {
info, _ := e.Info() info, _ := e.Info()
fmt.Printf("Adding entry: %s\n", e.Name())
browserEntries = append(browserEntries, Entry{ browserEntries = append(browserEntries, Entry{
Path: filepath.Join(bm.state.CurrentPath, e.Name()), Path: filepath.Join(bm.state.CurrentPath, e.Name()),
Name: e.Name(), Name: e.Name(),
@ -139,7 +133,6 @@ func (bm *BrowserManager) handleBuildIndexSuccess(result pool.Result) {
} }
bm.state.TotalEntries = len(browserEntries) bm.state.TotalEntries = len(browserEntries)
fmt.Printf("handleBuildIndexSuccess: TotalEntries set to %d\n", bm.state.TotalEntries)
// Trigger initial page load // Trigger initial page load
bm.OnScroll() bm.OnScroll()

View File

@ -163,7 +163,6 @@ func (l *Logic) Run() {
defer l.exitWg.Done() defer l.exitWg.Done()
// Dispatch initial directory index build on startup // Dispatch initial directory index build on startup
log.Printf("Logic: Dispatching BuildIndexTask")
l.workerPool.Dispatch(pool.NewBuildIndexTask(l.state.Browser.CurrentPath, l.mockFS)) l.workerPool.Dispatch(pool.NewBuildIndexTask(l.state.Browser.CurrentPath, l.mockFS))
for { for {
@ -171,14 +170,12 @@ func (l *Logic) Run() {
case <-l.done: case <-l.done:
return return
case update := <-l.configChan: case update := <-l.configChan:
log.Printf("Logic: ConfigEvent")
update.apply(l.state) update.apply(l.state)
l.emitFrame() l.emitFrame()
case layout := <-l.layoutChan: case layout := <-l.layoutChan:
// Store the full GlyphLayout on editor state. // Store the full GlyphLayout on editor state.
// Derive LastLineY from it for scroll clamping. // Derive LastLineY from it for scroll clamping.
l.state.Editor.GlyphLayout = layout l.state.Editor.GlyphLayout = layout
log.Printf("LOGIC received GlyphLayout: ByteOffsets=%d, VisualLineStarts=%d", len(layout.ByteOffsets), len(layout.VisualLineStarts))
var derivedLastLineY ui.Dp var derivedLastLineY ui.Dp
if len(layout.Y) > 0 { if len(layout.Y) > 0 {
derivedLastLineY = layout.Y[len(layout.Y)-1] derivedLastLineY = layout.Y[len(layout.Y)-1]
@ -188,13 +185,11 @@ func (l *Logic) Run() {
l.emitFrame() l.emitFrame()
} }
case events := <-l.inputChan: case events := <-l.inputChan:
log.Printf("Logic: InputEvents")
for _, evt := range events { for _, evt := range events {
evt.Handler(evt.Data) evt.Handler(evt.Data)
} }
l.emitFrame() l.emitFrame()
case query := <-l.searchQueryChan: case query := <-l.searchQueryChan:
log.Printf("Logic: SearchQuery")
if query != l.state.Browser.Query { if query != l.state.Browser.Query {
l.state.Browser.Query = query l.state.Browser.Query = query
if l.state.page == BrowserPage { if l.state.page == BrowserPage {
@ -203,7 +198,6 @@ func (l *Logic) Run() {
} }
l.emitFrame() l.emitFrame()
case path := <-l.openFileChan: case path := <-l.openFileChan:
log.Printf("Logic: OpenFileChan %s", path)
// Create chunked buffer for virtual scrolling // Create chunked buffer for virtual scrolling
chunkSize := DefaultChunkSize chunkSize := DefaultChunkSize
cb := NewChunkedBuffer(path, chunkSize, l.mockFS, "") cb := NewChunkedBuffer(path, chunkSize, l.mockFS, "")
@ -235,7 +229,6 @@ func (l *Logic) Run() {
if !ok { if !ok {
break break
} }
log.Printf("Logic: Dispatching WriteFileTask for %s, content len=%d", l.state.Editor.Filename, len(content))
l.workerPool.DispatchNonBlocking( l.workerPool.DispatchNonBlocking(
pool.NewWriteFileTask(l.state.Editor.Filename, content, l.mockFS), pool.NewWriteFileTask(l.state.Editor.Filename, content, l.mockFS),
) )
@ -418,7 +411,6 @@ func (l *Logic) handleWorkerResult(res pool.Result) {
if res.IsBrowserResult() { if res.IsBrowserResult() {
l.browserManager.HandleResult(res) l.browserManager.HandleResult(res)
} else if res.TaskType == pool.TypeReadFile { } else if res.TaskType == pool.TypeReadFile {
log.Printf("Logic: TypeReadFile result success=%v", res.Success)
if res.Success { if res.Success {
if content, ok := res.Data.([]byte); ok { if content, ok := res.Data.([]byte); ok {
if l.state.Editor.ChunkedBuffer != nil { if l.state.Editor.ChunkedBuffer != nil {
@ -445,14 +437,12 @@ func (l *Logic) handleWorkerResult(res pool.Result) {
cb.chunks = append(cb.chunks, nil) cb.chunks = append(cb.chunks, nil)
} }
cb.chunks[res.ChunkIdx] = chunk cb.chunks[res.ChunkIdx] = chunk
log.Printf("Logic: Loaded chunk %d for %s (%d bytes)", res.ChunkIdx, res.FilePath, len(chunk))
} }
} else { } else {
log.Printf("Logic: ReadChunkTask failed for %s chunk %d: %v", res.FilePath, res.ChunkIdx, res.Error) log.Printf("Logic: ReadChunkTask failed for %s chunk %d: %v", res.FilePath, res.ChunkIdx, res.Error)
} }
} }
} else if res.TaskType == pool.TypeStatFile { } else if res.TaskType == pool.TypeStatFile {
log.Printf("Logic: TypeStatFile result success=%v", res.Success)
if res.Success { if res.Success {
if stat, ok := res.Data.(*pool.FileStat); ok { if stat, ok := res.Data.(*pool.FileStat); ok {
// Size guard: refuse to edit files above the limit. The browser can // Size guard: refuse to edit files above the limit. The browser can
@ -473,12 +463,10 @@ func (l *Logic) handleWorkerResult(res pool.Result) {
} }
} }
} else if res.TaskType == pool.TypeBuildLineIndex { } else if res.TaskType == pool.TypeBuildLineIndex {
log.Printf("Logic: TypeBuildLineIndex result success=%v", res.Success)
if res.Success { if res.Success {
if idx, ok := res.Data.(*types.LineIndex); ok { if idx, ok := res.Data.(*types.LineIndex); ok {
if l.state.Editor.ChunkedBuffer != nil { if l.state.Editor.ChunkedBuffer != nil {
l.state.Editor.ChunkedBuffer.LineIndex = idx l.state.Editor.ChunkedBuffer.LineIndex = idx
log.Printf("Logic: LineIndex built with %d lines", idx.LineCount())
} }
} }
} }

View File

@ -6,7 +6,6 @@ import (
"image" "image"
"image/color" "image/color"
_ "image/png" _ "image/png"
"log"
"sort" "sort"
"time" "time"
"unicode/utf8" "unicode/utf8"
@ -222,11 +221,10 @@ func (r *Renderer) RegisterScroll(gtx layout.Context, id string, region Region,
// CheckGestures checks all registered gestures and returns any events. // CheckGestures checks all registered gestures and returns any events.
func (r *Renderer) CheckGestures(q input.Source, m unit.Metric) []InputEvent { func (r *Renderer) CheckGestures(q input.Source, m unit.Metric) []InputEvent {
var events []InputEvent var events []InputEvent
for id, reg := range r.clicks { for _, reg := range r.clicks {
evt, ok := reg.click.Update(q) evt, ok := reg.click.Update(q)
if ok { if ok {
if evt.Kind == gesture.KindClick { if evt.Kind == gesture.KindClick {
log.Printf("Renderer: Click detected on %s, pos=%v", id, evt.Position)
events = append(events, InputEvent{ events = append(events, InputEvent{
Handler: reg.handler, Handler: reg.handler,
Data: Point{X: r.toDp(Px(evt.Position.X)), Y: r.toDp(Px(evt.Position.Y))}, Data: Point{X: r.toDp(Px(evt.Position.X)), Y: r.toDp(Px(evt.Position.Y))},
@ -266,7 +264,6 @@ func (r *Renderer) LastLineY() Dp {
// drawWrappedText call. Used by the logic goroutine to position the cursor // drawWrappedText call. Used by the logic goroutine to position the cursor
// and navigate by glyph instead of byte offset. // and navigate by glyph instead of byte offset.
func (r *Renderer) GlyphLayout() GlyphLayout { func (r *Renderer) GlyphLayout() GlyphLayout {
log.Printf("VisualLineStarts = %v", r.glyphLayout.VisualLineStarts)
return r.glyphLayout return r.glyphLayout
} }
@ -304,7 +301,6 @@ func (r *Renderer) drawElement(gtx layout.Context, e Element) {
if interactive, ok := e.(Interactive); ok { if interactive, ok := e.(Interactive); ok {
for _, interaction := range interactive.Interactions() { for _, interaction := range interactive.Interactions() {
if interaction.Gesture == KeyDown || interaction.Gesture == KeyUp { if interaction.Gesture == KeyDown || interaction.Gesture == KeyUp {
log.Printf("register gesture for %s", interactive.ID())
event.Op(gtx.Ops, interactive.ID()) event.Op(gtx.Ops, interactive.ID())
reg := keyReg{Handler: interaction.Handler} reg := keyReg{Handler: interaction.Handler}
r.Keys[interactive.ID()] = reg r.Keys[interactive.ID()] = reg
@ -341,7 +337,6 @@ func (r *Renderer) drawElement(gtx layout.Context, e Element) {
// Register input tag for key events // Register input tag for key events
for _, interaction := range interactive.Interactions() { for _, interaction := range interactive.Interactions() {
if interaction.Gesture == KeyDown || interaction.Gesture == KeyUp { if interaction.Gesture == KeyDown || interaction.Gesture == KeyUp {
log.Printf("register gesture for %s", interactive.ID())
event.Op(gtx.Ops, interactive.ID()) event.Op(gtx.Ops, interactive.ID())
// Register handler // Register handler