-
-
Notifications
You must be signed in to change notification settings - Fork 403
Draft: Implement watching file paths via oslib.watch
#5068
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…hing # Conflicts: # runner/package.mill
…provement/fs-watching
What are the CPU numbers on your laptop with this change applied? |
I haven't tested it yet, as my repo uses mill 0.12.10. With #5073 I'll be able to test it and report it later. |
I tested the 0.12.x branch, the CPU now hover's around 0.1%-2.5%, not enough to trigger the CPU fan, whilst previously CPU fan was constantly on. Screencast_20250507_200300.webm |
95c753d
to
3e7c22c
Compare
…hing # Conflicts: # build.mill # runner/daemon/package.mill # runner/daemon/src/mill/daemon/MillMain.scala
…hing' into improvement/fs-watching
…hing' into improvement/fs-watching
Currently watching files uses polling which is inefficient with large codebases. On my laptop
./mill --watch
uses 20% CPU just to watch the files for changes.This uses
oslib
'swatch
module to watch for the file changes instead of polling them.We had to update oslib (com-lihaoyi/os-lib#386) to:
out
or.bloop
emits Java FS watcherOVERFLOW
events.println
's thatoslib.watch
had.The current approach to watching is to watch the workspace root via FS watching. FS watching only works with folders and we have to watch
root/build.mill
, and thus,root/
, so everything else falls under it.Mac OS watcher performs watching recursively natively, but on linux oslib adds recursive watches itself, so we use
oslib.watch
filter to prevent watching anything that is not an ancestor of watched root. For example, if we have source atroot/module-a/src/
, we'll watchroot/
,root/module-a/
androot/
.Finally, events are filtered so that unrelated changes (like creating
root/random-file.txt
) does not trigger reevaluation.The fs watching is enabled by default and can be disabled via
--watch-via-fs-notify=false
.0.12.x
version: #5073