FilePathWatcher: Synchronously start watching on Mac
This CL includes two key changes: 1) Moves all manipulation of the event stream (start, stop, etc) to the sequence the FilePathWatcher lives on Prior to this CL, the event stream was manipulated on the dispatch queue. This does not appear to have been necessary. Moving the stream manipulation to the sequence the FilePathWatcher lives on allows the event stream to be started synchronously, from the Watch() method 2) Use kFSEventStreamEventIdSinceNow Prior to this CL, the event stream was started via async dispatch in the Watch() method. FSEventsGetCurrentEventId() was used to synchronously get the ID of the most recent (system-wide) event, to ensure that any changes between when Watch() returned and when the stream asynchronously started would be played back as historical events. See the documentation of the sinceWhen field here: https://developer.apple.com/documentation/coreservices/1443980-fseventstreamcreate Since the stream is now started synchronously, kFSEventStreamEventIdSinceNow is sufficient for ensuring that all changes after Watch() returns are noticed Note that creating a stream with kFSEventStreamEventIdSinceNow will no longer fire a "history done" event shortly after stream creation. Any callers which relied on the this behavior may break. See the documentation here: https://developer.apple.com/documentation/coreservices/kfseventstreameventflaghistorydone Bug: 1019297 Change-Id: Ib720f8b19d0309714d153de974404fab25b16894 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4814677 Reviewed-by:Wez <wez@chromium.org> Commit-Queue: Austin Sullivan <asully@chromium.org> Reviewed-by:
Robert Sesek <rsesek@chromium.org> Cr-Commit-Position: refs/heads/main@{#1218981}
Loading