Skip to content

Conversation

@mauritium
Copy link

@mauritium mauritium commented Jan 12, 2026

This is an attempt at fixing #3070.

  • Only include app processes in processes, exclude XPC and background; adding a helper method - (BOOL)includeApp:(NSRunningApplication *)app for this purpose. The logic is inspired by (but does not copy 100% the logic in appIsBackground: in
    - (BOOL)appIsBackground:(NSRunningApplication *)app {
  • Avoid calling the slow [NSBundle bundleWithIdentifier:]
  • As a side effect, it also eliminates the spurious catalog entries for "Running Applications & Processes" (notably Safari worker processes).

- Only include app processes in list, exclude XPC and background
- Avoid calling the slow [NSBundle bundleWithIdentifier:]
@n8henrie
Copy link
Member

Thanks for the PR!

A few points of clarification:

  • Most importantly, can you confirm that this solves your issue?
  • Was this coded via an LLM?
  • Why do you think your machine is having a problem here that is not manifesting for others?

I am hesitant to merge a potential fix until we have some clues about the last point here.

@mauritium
Copy link
Author

Thanks!

  1. Yes, this solves the issue so far, and should even cut down on QS' overhead in regular operations
  2. No, this is fully hand-coded. While my Objective-C has become a bist rusty (I am not a professional developer, like you), it was relatively trivial.
  3. I think this is due to a unique combination of OS version, Safari version (and associated bugs) and web sites that I have in open tabs. Will probably be tough to impossible to pin down exactly. But at least I am not alone - the original poster of [Bug]: Sluggish, Spinning Wheel and high idle CPU usage. #3070 had the exact same issue. And I would reckon that many people don't realize that Quicksilver is having these issues for them, let alone track it down with a process sample.

Why don't you give this PR a try in your local copy? You should notice in debug output that the time spent in _reloadProcesses is down significantly, and _reloadProcesses is called less frequently in the first place.

@n8henrie
Copy link
Member

Awesome, thanks for your response!

No, this is fully hand-coded.

Glad to hear it. I'm optimistic about the future of LLMs as an adjunct, but my personal experience with them so far has been somewhere between comedic and horrifying, at least as far as coding goes. (Your code is very well commented, which seems to be a hallmark of LLM code in other FOSS projects I'm involved in, which is what prompted the question.)

my Objective-C has become a bist rusty (I am not a professional developer, like you)

I'm actually a physician, coding is self-taught and just a hobby! I imagine your ObjC is likely far better than mine; for QS I've mostly been helpful for CI processes and a tiny bit of Swift.

Yes, you're certainly not the only one who's experienced this or a similar bug, I'd just like to understand it a bit more thoroughly. For example, over the last several minutes, my running QS has only reloaded processes a few times:

Reload time: 335.086942 ms
Type: Notice | Timestamp: 2026-01-13 14:08:23.699717-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x753044
Reload time: 148.949981 ms
Type: Notice | Timestamp: 2026-01-13 14:08:30.181932-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x75316d
Reload time: 152.688980 ms
Type: Notice | Timestamp: 2026-01-13 14:10:23.051982-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x753958

This is while I'm actively using the computer (including QS), I have over 80 tabs open between two Firefox windows, 2 xcode processes building, 18 tabs in zellij (with 2-3 panes per tab), nix cross-compiling something in the background... a lot going on. Why is QS reloading so frequently for you, but not for me?

@n8henrie
Copy link
Member

@pjrobertson I see isReloading set, but I don't otherwise see it read anywhere in the codebase:

Is there some implicit behavior somewhere?

@mauritium
Copy link
Author

Thanks @n8henrie ! Yes - I found the experience of understanding the QS code a little frustrating because the original code had so few comments, so I made sure to add more ;-)

I used to code quite a bit of Objective-C (as a hobbyist) 15-20 years ago, so I still remember a bit...

Why QS is reloading so frequently for me: I think it's primarily due to the specific Safari circumstance (maybe bug) that respawns content service worker processes at high frequency (not constantly, but from time to time, in bursts). If you're using FF instead of Safari, that may already explain. In any case, I guess it can be safe to assume that in the wild there are many systems with frequent process respawns, and this shouldn't trigger QS going to its knees. And also, in any case, XPC/background processes should not burden QS unless the user has explicitly set the "include background processes" toggle. My patch fixes all of that.

On isReloading: yes, I was puzzled about this as well. Looking at the git blame this was added 13 years ago in #071ef5c10a08e696e73db3cc93feeb00fa23ec38 - maybe it was an attempt to avoid reentrant behavior. I went back to the state of the code base back then, and indeed it was used all over the place in QSProcessMonitor.m. To the extent this usage has been eliminated deliberately, it would certainly be safe to eliminate this last remnant as well. But IMHO it has zero functional impact.

@n8henrie
Copy link
Member

In any case, I guess it can be safe to assume that in the wild there are many systems with frequent process respawns, and this shouldn't trigger QS going to its knees.

I agree that this is probably not uncommon, and the fact that it doesn't seem to frequently be bringing QS to its knees is why I'm interested. What about your environment is provoking the problem, whereas others have no such issue?

I have include background processes enabled as well.

I added little println debugging, and it does look like web processes are the most common cause for a reload.

I'd like to narrow things down to a reproducible case.

Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:31:18.552836-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a819c
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:32:31.593818-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a8b68
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:32:48.782262-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a9054
Reloading due to launch of com.apple.WebKit.Networking
Type: Notice | Timestamp: 2026-01-13 14:33:19.792334-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a9330
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 14:33:19.925407-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a9330
Reloading due to launch of (null)
Type: Notice | Timestamp: 2026-01-13 14:33:20.433285-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a9330
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:33:20.562680-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7a9330
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:36:54.125621-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7aa359
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:37:32.095567-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7aa62b
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:37:54.143497-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7aa6f2
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:39:02.849375-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7aae8c
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:39:09.540268-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7aa98a
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:39:45.615917-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab223
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:40:17.191413-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab50f
Reloading due to launch of SpeechDataInstallerd
Type: Notice | Timestamp: 2026-01-13 14:41:05.085419-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab846
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:41:21.939357-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab89a
Reloading due to termination of Speech Downloader
Type: Notice | Timestamp: 2026-01-13 14:42:05.305055-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab998
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:42:05.933791-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab998
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:42:23.145728-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ab998
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:42:32.823362-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7abeb7
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:42:45.094491-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ac07d
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:42:52.087356-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ac23e
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:42:53.772248-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ac35b
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:43:34.502319-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ac434
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:44:08.723276-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7acb79
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:44:22.921942-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7acbeb
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:46:09.288680-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ad94d
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:46:52.649924-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7adc9a
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:47:32.851720-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ade8b
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:52:33.011012-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b1439
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:53:35.227417-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b262f
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:56:25.057209-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b5de3
Reloading due to launch of ferrite
Type: Notice | Timestamp: 2026-01-13 14:56:48.160281-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b625b
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:56:49.605856-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6258
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:57:33.827303-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b66de
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:58:04.845202-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6b5f
Reloading due to launch of ferrite-universal
Type: Notice | Timestamp: 2026-01-13 14:58:05.843769-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6b5f
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:58:06.465119-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6bbd
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 14:58:35.857344-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6ed7
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 14:59:05.976309-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b6ed7
Reloading due to launch of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:07.294985-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b72cd
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:59:07.933148-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b72cd
Reloading due to termination of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:11.400666-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b7389
Reloading due to launch of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:18.502842-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b749a
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:59:19.130057-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b749a
Reloading due to termination of AutoFill (Alacritty)
Type: Notice | Timestamp: 2026-01-13 14:59:22.068408-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b749a
Reloading due to launch of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:27.426687-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b7705
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:59:28.052751-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b749b
Reloading due to termination of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:39.767008-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b780a
Reloading due to launch of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:49.903851-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b78be
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:59:50.530739-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b78be
Reloading due to termination of Alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:52.470475-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b78be
Reloading due to launch of alacritty
Type: Notice | Timestamp: 2026-01-13 14:59:55.621895-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b7b4f
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 14:59:56.242772-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b7b51
Reloading due to termination of AutoFill (alacritty)
Type: Notice | Timestamp: 2026-01-13 15:00:02.833818-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b78be
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:00:06.260572-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b7b51
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:02:54.282064-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b8b9e
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:03:08.894739-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b8d5a
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:04:10.113887-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b919c
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:05:10.598586-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b94f0
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:05:40.739167-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b96da
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:06:42.119552-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b9c70
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:07:12.462100-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7b999f
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:08:12.871964-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ba30a
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:09:13.389459-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ba30b
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:09:43.666045-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7ba972
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:10:44.331163-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bad78
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:11:12.125370-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7baf83
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:11:14.447876-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bafdc
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:12:15.017101-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bb363
Reloading due to launch of TMHelperAgent
Type: Notice | Timestamp: 2026-01-13 15:12:32.042027-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bb735
Reloading due to termination of TMHelperAgent
Type: Notice | Timestamp: 2026-01-13 15:13:08.822019-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bb7ee
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:13:15.461226-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bb7ee
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:13:45.684419-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bbc70
Reloading due to launch of TMHelperAgent
Type: Notice | Timestamp: 2026-01-13 15:14:36.875891-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bbf76
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:14:47.289668-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bbcf9
Reloading due to termination of TMHelperAgent
Type: Notice | Timestamp: 2026-01-13 15:14:51.987316-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bbf76
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:15:47.852182-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bc1ec
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:16:38.173304-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bc4f6
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:16:48.331400-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bc89f
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:17:18.608910-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bcbba
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:18:19.129269-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bcfd0
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:18:49.351368-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bd20f
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:19:50.802535-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bd57b
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:20:21.027413-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bd714
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:21:21.574831-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bdaad
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:22:21.934108-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bdb89
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:23:22.214583-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bde21
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:23:52.340841-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7be433
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:24:53.801131-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7be71a
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:25:24.026423-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7be782
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:26:24.956102-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7beca9
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:26:55.757895-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bee63
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:27:33.239353-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bf09d
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:27:57.126994-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bf20e
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:28:58.439093-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bf312
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:29:28.734224-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bf855
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:30:29.411330-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bfa8c
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:32:00.881210-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c00dd
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:33:02.572864-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c0466
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:34:03.289048-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c0835
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:34:33.451762-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7bfbf5
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:35:33.870332-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c0dc1
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:36:04.250811-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c0b63
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:37:04.741052-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c1508
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:37:35.022792-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c17e9
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:37:40.038416-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c155c
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:38:35.806591-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c1b67
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:38:40.108449-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c18d8
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:39:06.067944-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c1bf2
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:39:36.218621-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c1fa0
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:40:06.625834-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c1bf2
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:40:36.753518-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c236d
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:41:37.552609-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c268a
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:42:38.114842-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c291b
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:43:08.402474-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c29a2
Reloading due to termination of com.apple.WebKit.Networking
Type: Notice | Timestamp: 2026-01-13 15:43:31.064919-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c2c49
Reloading due to launch of com.apple.WebKit.Networking
Type: Notice | Timestamp: 2026-01-13 15:43:31.192282-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c2c49
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:43:33.642567-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c2add
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:43:34.261650-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c2dfb
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:43:34.373471-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c2dfb
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:44:08.834347-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c32e9
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:44:53.727442-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3053
Reloading due to launch of FirefoxCP Web Content
Type: Notice | Timestamp: 2026-01-13 15:45:09.343046-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3860
Reloading due to launch of FirefoxCP
Type: Notice | Timestamp: 2026-01-13 15:45:15.381468-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3860
Reloading due to launch of Safari
Type: Notice | Timestamp: 2026-01-13 15:45:27.983880-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.WebKit.Networking
Type: Notice | Timestamp: 2026-01-13 15:45:28.623904-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.WebKit.GPU
Type: Notice | Timestamp: 2026-01-13 15:45:29.259177-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.Safari.SandboxBroker
Type: Notice | Timestamp: 2026-01-13 15:45:29.262383-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:29.542494-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of safari
Type: Notice | Timestamp: 2026-01-13 15:45:30.453735-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of Open and Save Panel Service
Type: Notice | Timestamp: 2026-01-13 15:45:30.959092-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of QuickLookUIService
Type: Notice | Timestamp: 2026-01-13 15:45:30.960088-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of ThemeWidgetControlViewService
Type: Notice | Timestamp: 2026-01-13 15:45:31.472649-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:32.516386-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4019
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:32.518375-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4019
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:32.522582-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4019
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:32.526318-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4019
Reloading due to launch of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:45:32.654439-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4019
Reloading due to launch of (null)
Type: Notice | Timestamp: 2026-01-13 15:45:33.039114-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c3bc0
Reloading due to launch of com.apple.SafariPlatformSupport.Helper
Type: Notice | Timestamp: 2026-01-13 15:46:04.766392-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c4295
Reloading due to termination of com.apple.WebKit.WebContent
Type: Notice | Timestamp: 2026-01-13 15:48:31.836930-07:00 | Process: Quicksilver | Library: QSCore | TID: 0x7c495c

@mauritium
Copy link
Author

Yes - web worker processes are probably the most frequent trigger. And, at least on my system, with Safari the frequency can get really high. You're seeing these bursts yourself in the log you provided - processes being spawned within milliseconds. On my system, this can go on for minutes. May be a function of the web sites I have open. Finding the root cause of this will be elusive, I believe. QS should just be more robust against this scenario.

@n8henrie
Copy link
Member

QS should just be more robust against this scenario

I agree. Verifying robustness will require reproduction!

I think I figured out a hacky method. Initially just tried making a little app bundle and launching it in a loop, but nothing happened.

However, in that list I noticed a smallish Rust app I recently discovered (Ferrite), so I just tried launching it in a loop (with a very short timeout), and it caused a slight slowdown in QS.

Was wondering if this might be a good opportunity to just have some kind of configurable timeout for the reloadApps. Users not experiencing ill effects can continue to have near-instant updates, those experiencing issues could set it to once per second or what have you.

Will try to nail down this repro and build your branch and go from there.

Thanks again for the dialog!

@mauritium
Copy link
Author

Yep - I agree, throttling could be yet another level of protection. This could even be automatic, without requiring configuration. But I guess that for most practical purposes, my fix will already go a long way. Resources are probably spent better elsewhere IMO.

@n8henrie
Copy link
Member

Using this as a small test case (and adding a little extra logging to QS at the reloadProcesses call points):

import AppKit

final class AppDelegate: NSObject, NSApplicationDelegate {
  func applicationDidFinishLaunching(_ notification: Notification) {
    print("Hello World (launch)")
    NSApp.terminate(nil)
  }

  func applicationWillTerminate(_ notification: Notification) {
    print("Goodbye World (terminate)")
  }
}

let app = NSApplication.shared
app.setActivationPolicy(.regular)
let delegate = AppDelegate()
app.delegate = delegate
app.run()
all: HelloQS.swift
	swiftc $^ -o HelloQS -framework AppKit
	while :; do ./HelloQS; sleep 0.01; done

I notice that even with extremely fast restarts (here 0.01), I get minimal lag with QS as is (but I do see my logging about HelloQS launching and terminating and the processes reloading). (I suspect my lag isn't worse because I'm on a fast modern mac, which clearly isn't a fair expectation for the average QS user.)

Can you confirm that this test case provokes severely degraded performance for you?

With your PR, I get no lag whatsoever. Unfortunately I also get no reloading and no notification of this process launching and terminating (even with background procs enabled). I would think that command line tools should be fair game to prompt a refresh of the running process list, so I don't think we should merge as-is.

Will continue thinking of modifications that would help it resolve the issue for you but keep existing behavior for those that want it.

Glad to have found a POC that we can test with!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants