Vito
8a81114dfc
perf(images): run image work on two own pools and trim after jobs ( #523 ) ( #582 )
...
* perf(images): read PNG text without decoding pixels (#523 )
Pillow's PngImageFile.text loads every pixel to reach text chunks written
after IDAT. The scan's metadata batch and the image monitor now read PNG
text through utils/png_text.py, which runs Pillow's own chunk handlers
after the first IDAT and seeks over the pixel data.
The legacy .text read is the floor: a differential test compares both
readers on every fixture image, a curated corpus and a seeded fuzz. The
only difference is a file whose pixel data is undecodable or cut short:
it now keeps the text read before its pixels instead of reading nothing.
Animated PNGs still use .text.
* test(images): cover the text budget, XMP and layout guard of the PNG text walk (#523 )
* perf(images): run image work on two own pools and trim after jobs (#523 )
Image work no longer spreads over the default executor's threads, where
glibc kept an image-sized malloc arena per thread.
- Interactive image work (view previews behind their gate, workspace card
facts, both inspector routes) runs on the API's fixed pm-image pool of
3 threads; the on-demand preview pool is merged into it.
- map_parallel (scan metadata, thumbnail and convert jobs, the legacy
gallery generation, capture previews) shares one long-lived pm-worker
pool of Worker threads, reused between jobs. The package teardown stops
it within its bound (part "workers").
- After a scan, thumbnail or convert job, glibc's malloc_trim(0) returns
free pages once; a no-op on Windows, macOS and musl.
- tools/perf/memory_drive.py measures RSS, heap, threads and arenas under
the #523 load on the disposable browser test server (manual only).
* fix(images): start no image thread after the teardown; join retired job pools (#523 )
2026-11-01 01:24:27 +00:00
..
2026-11-01 00:41:13 +00:00
2026-11-01 00:41:13 +00:00
2026-10-17 13:14:02 -07:00
2026-10-31 02:01:06 +00:00
2026-11-01 00:41:13 +00:00
2026-10-31 18:13:27 +00:00
2026-02-07 08:30:09 -08:00
2026-10-27 02:15:23 -07:00
2026-10-28 05:18:00 +00:00
2026-10-29 19:40:26 +00:00
2026-10-25 18:25:20 -07:00
2026-10-17 23:26:37 -07:00
2026-10-22 10:36:58 -07:00
2026-10-19 17:26:37 -07:00
2026-10-27 16:56:37 +00:00
2026-10-23 11:09:12 -07:00
2026-10-22 21:39:01 -07:00
2026-10-08 18:53:11 -07:00
2026-10-23 11:09:12 -07:00
2026-10-28 05:18:00 +00:00
2026-10-29 18:28:47 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 22:07:59 +00:00
2026-10-31 05:43:48 +00:00
2026-10-28 19:58:05 +00:00
2026-10-27 00:20:13 -07:00
2026-10-31 05:43:48 +00:00
2026-10-28 11:25:20 +00:00
2026-10-28 18:49:06 +00:00
2026-10-31 05:43:48 +00:00
2026-10-17 08:00:42 -07:00
2026-10-31 05:43:48 +00:00
2026-10-28 18:49:06 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-29 18:28:47 +00:00
2026-10-28 15:29:41 +00:00
2026-10-31 05:43:48 +00:00
2026-10-24 12:54:09 -07:00
2026-10-29 14:10:29 +00:00
2026-10-28 09:06:15 +00:00
2026-10-27 06:19:39 -07:00
2026-10-31 13:59:29 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-28 23:06:36 +00:00
2026-10-28 05:18:00 +00:00
2026-10-28 23:06:36 +00:00
2026-10-23 18:07:14 -07:00
2026-10-31 02:01:06 +00:00
2026-10-28 07:22:48 +00:00
2026-10-29 11:32:48 +00:00
2026-10-24 06:50:53 -07:00
2026-10-28 17:19:11 +00:00
2026-11-01 01:24:27 +00:00
2026-10-29 14:28:00 +00:00
2026-10-28 05:18:00 +00:00
2026-10-28 19:58:05 +00:00
2026-10-29 21:49:53 +00:00
2026-10-28 19:58:05 +00:00
2026-10-29 21:49:53 +00:00
2026-10-27 20:30:54 +00:00
2026-10-17 23:26:37 -07:00
2026-10-31 05:43:48 +00:00
2026-10-27 17:45:24 +00:00
2026-10-31 05:43:48 +00:00
2026-10-26 21:21:33 -07:00
2026-10-31 05:43:48 +00:00
2026-10-29 00:31:40 +00:00
2026-10-31 05:43:48 +00:00
2026-10-29 01:30:58 +00:00
2026-10-31 05:43:48 +00:00
2026-10-23 11:09:12 -07:00
2026-10-08 18:53:11 -07:00
2026-10-22 21:39:01 -07:00
2026-10-29 12:00:32 +00:00
2026-10-28 18:49:06 +00:00
2026-10-19 11:10:47 -07:00
2026-10-23 04:59:18 -07:00
2026-10-28 17:19:11 +00:00
2026-10-31 05:43:48 +00:00
2026-10-27 22:40:57 +00:00
2026-10-17 16:42:07 -07:00
2026-10-31 05:43:48 +00:00
2026-10-28 18:49:06 +00:00
2026-10-08 18:53:11 -07:00
2026-10-17 23:26:37 -07:00
2026-10-17 23:26:37 -07:00
2026-10-29 13:25:04 +00:00
2026-10-17 19:51:22 -07:00
2026-10-29 01:40:02 +00:00
2026-10-17 23:26:37 -07:00
2026-10-17 19:51:22 -07:00
2026-10-19 11:10:47 -07:00
2026-10-31 05:43:48 +00:00
2026-10-29 13:25:04 +00:00
2026-10-25 10:17:07 -07:00
2026-10-28 05:18:00 +00:00
2026-10-31 05:43:48 +00:00
2026-10-19 11:10:47 -07:00
2026-10-17 23:26:37 -07:00
2026-10-27 16:35:01 +00:00
2026-10-17 23:26:37 -07:00
2026-10-28 05:18:00 +00:00
2026-10-17 23:26:37 -07:00
2026-10-31 05:43:48 +00:00
2026-11-01 01:24:27 +00:00
2026-10-17 16:42:07 -07:00
2026-10-31 22:25:01 +00:00
2026-10-31 05:43:48 +00:00
2026-10-29 12:00:32 +00:00
2026-10-31 05:43:48 +00:00
2026-10-23 13:15:06 -07:00
2026-10-19 20:56:51 -07:00
2026-10-19 20:56:51 -07:00
2026-10-25 18:25:20 -07:00
2026-10-29 13:25:04 +00:00
2026-10-21 04:18:28 -07:00
2026-10-29 18:28:47 +00:00
2026-10-29 21:09:22 +00:00
2026-10-17 23:26:37 -07:00
2026-10-21 10:55:35 -07:00
2026-10-28 15:29:41 +00:00
2026-10-28 18:49:06 +00:00
2026-10-28 18:49:06 +00:00
2026-10-30 00:55:09 +00:00
2026-10-21 09:10:18 -07:00
2026-10-29 12:00:32 +00:00
2026-10-31 21:31:55 +00:00
2026-11-01 01:24:27 +00:00
2026-10-30 03:44:03 +00:00
2026-10-29 19:40:26 +00:00
2026-10-30 03:44:03 +00:00
2026-10-31 02:01:06 +00:00
2026-10-28 19:58:05 +00:00
2026-10-28 20:45:15 +00:00
2026-11-01 01:24:27 +00:00
2026-10-28 17:19:11 +00:00
2026-10-19 09:54:29 -07:00
2026-10-23 11:09:12 -07:00
2026-10-21 10:55:35 -07:00
2026-10-21 04:18:28 -07:00
2026-10-19 09:54:29 -07:00
2026-10-29 14:06:42 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 22:40:57 +00:00
2026-10-25 10:17:07 -07:00
2026-10-23 16:58:06 -07:00
2026-10-28 03:54:55 +00:00
2026-10-31 22:25:01 +00:00
2026-10-31 05:43:48 +00:00
2026-10-29 14:10:29 +00:00
2026-10-31 05:43:48 +00:00
2026-10-24 12:54:09 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-18 20:03:15 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-27 05:00:55 -07:00
2026-10-27 05:00:55 -07:00
2026-10-31 05:43:48 +00:00
2026-10-29 18:28:47 +00:00
2026-10-24 05:28:44 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-29 22:30:32 +00:00
2026-02-07 12:36:11 -08:00
2026-10-22 10:36:58 -07:00
2026-11-01 01:24:27 +00:00
2026-10-26 21:21:33 -07:00
2026-10-07 13:52:09 -07:00
2026-10-27 02:15:23 -07:00
2026-10-17 08:00:42 -07:00
2026-10-31 21:31:55 +00:00
2026-10-26 22:23:06 -07:00
2026-10-17 08:00:42 -07:00
2026-10-17 19:51:22 -07:00
2026-10-21 10:55:35 -07:00
2026-10-23 14:19:11 -07:00
2026-10-17 08:00:42 -07:00
2026-10-17 08:00:42 -07:00
2026-10-31 22:25:01 +00:00
2026-10-23 14:19:11 -07:00
2026-10-22 07:19:53 -07:00
2026-10-29 01:40:02 +00:00
2026-10-17 08:00:42 -07:00
2026-10-08 18:53:11 -07:00
2026-11-01 00:04:27 +00:00
2026-10-29 21:09:22 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-31 05:43:48 +00:00
2026-10-18 20:03:15 -07:00
2026-10-27 02:15:23 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-28 20:45:15 +00:00
2026-10-31 02:01:06 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 16:56:37 +00:00
2026-10-31 05:43:48 +00:00
2026-10-26 07:35:21 -07:00
2026-10-28 03:48:11 +00:00
2026-10-28 18:49:06 +00:00
2026-10-23 18:07:14 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 05:43:48 +00:00
2026-10-27 02:15:23 -07:00
2026-10-31 05:43:48 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 02:15:23 -07:00
2026-10-31 05:43:48 +00:00
2026-10-29 18:28:47 +00:00
2026-10-28 00:32:30 +00:00
2026-10-31 05:43:48 +00:00
2026-10-29 14:10:29 +00:00
2026-10-23 14:19:11 -07:00
2026-10-31 05:43:48 +00:00
2026-10-08 18:53:11 -07:00
2026-10-29 12:00:32 +00:00
2026-10-08 18:53:11 -07:00
2026-10-17 06:47:46 -07:00
2026-10-25 10:17:07 -07:00
2026-11-01 01:24:27 +00:00
2026-10-26 11:46:54 -07:00
2026-10-24 21:00:30 -07:00
2026-10-24 21:00:30 -07:00
2026-10-31 05:43:48 +00:00
2026-10-24 21:00:30 -07:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-30 00:55:09 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-27 02:15:23 -07:00
2026-10-08 18:53:11 -07:00
2026-10-31 05:43:48 +00:00
2026-11-01 01:24:27 +00:00
2026-10-31 05:43:48 +00:00
2026-10-08 18:53:11 -07:00
2026-10-29 11:32:48 +00:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-23 01:58:02 -07:00
2026-10-28 23:06:36 +00:00
2026-10-31 05:43:48 +00:00
2026-10-31 02:01:06 +00:00
2026-10-27 16:56:37 +00:00