- From: Chris Blume (ProgramMax) <programmax@gmail.com>
- Date: Mon, 29 Sep 2025 00:04:49 -0400
- To: Chris Lilley <chris@w3.org>
- Cc: public-png@w3.org
- Message-ID: <CAG3W2KcXmN0yPf3H=0attHQPAAaL9-xDZHN7KFSrLKmYfP6Z_Q@mail.gmail.com>
Yeah, I was able to confirm that I was doing read buffer sizes incorrectly. I was using FILE_STORAGE_INFO.PhysicalBytesPerSectorForPerformance <https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_storage_info> . At first, I checked that I am indeed able to use any multiple of that buffer size. Then I confirmed I can use any buffer size (including non-multiples), even when using unbuffered IO (not using OS buffering, that is). Then I saw in the docs that value is specifically for writes?? I meant to push a bit on this but got sick today. I'll follow up soon. Once I can match CrystalDisk speeds on large files, I'll feel confident it is working correctly. Right now, I'm confident it isn't. On Sun, Sep 28, 2025 at 10:31 AM Chris Lilley <chris@w3.org> wrote: > I tested on my laptop, which is a couple of years old now: > > Dell XPS 9720, 12th Gen i9-12900HK, 64Gb DDR5 ram. > Two SSD disks. > > Drive C: (1Tb NVMe PM9A1 Samsung (stock drive from Dell)) > > PS C:\Users\chris\Documents\GitHub\FileReadSpeedTest\Test Data> > FileReadSpeedTest '.\crystaldiskmark nvme ssd.png' > Worker thread count: 6 > Clock is steady > Buffer size: 512 > Open delay: 229400ns > Open to read delay: 1009100ns > Buffer 0 - Read issue delay: 100ns - Issue to completion delay: 142000ns > Buffer 1 - Read issue delay: 46700ns - Issue to completion delay: 108800ns > Buffer 2 - Read issue delay: 62900ns - Issue to completion delay: 100500ns > Buffer 3 - Read issue delay: 75000ns - Issue to completion delay: 152500ns > Buffer 4 - Read issue delay: 147700ns - Issue to completion delay: 93500ns > Buffer 5 - Read issue delay: 159200ns - Issue to completion delay: 106000ns > Buffer 6 - Read issue delay: 169600ns - Issue to completion delay: 117900ns > Buffer 7 - Read issue delay: 180200ns - Issue to completion delay: 128900ns > Buffer 8 - Read issue delay: 212300ns - Issue to completion delay: 226900ns > Buffer 9 - Read issue delay: 233900ns - Issue to completion delay: 101100ns > Buffer 10 - Read issue delay: 256300ns - Issue to completion delay: > 113500ns > Buffer 11 - Read issue delay: 299200ns - Issue to completion delay: > 102400ns > Buffer 12 - Read issue delay: 321800ns - Issue to completion delay: > 106400ns > Buffer 13 - Read issue delay: 332900ns - Issue to completion delay: > 119000ns > Buffer 14 - Read issue delay: 353500ns - Issue to completion delay: > 117400ns > Buffer 15 - Read issue delay: 367500ns - Issue to completion delay: > 122200ns > Buffer 16 - Read issue delay: 408800ns - Issue to completion delay: > 105600ns > Buffer 17 - Read issue delay: 433600ns - Issue to completion delay: > 103200ns > Buffer 18 - Read issue delay: 456100ns - Issue to completion delay: > 101400ns > Buffer 19 - Read issue delay: 477300ns - Issue to completion delay: > 103200ns > Buffer 20 - Read issue delay: 498200ns - Issue to completion delay: > 103100ns > Buffer 21 - Read issue delay: 508900ns - Issue to completion delay: > 119500ns > Buffer 22 - Read issue delay: 531200ns - Issue to completion delay: > 118800ns > Buffer 23 - Read issue delay: 551500ns - Issue to completion delay: > 118600ns > Buffer 24 - Read issue delay: 573100ns - Issue to completion delay: > 120800ns > Buffer 25 - Read issue delay: 593900ns - Issue to completion delay: > 123900ns > Buffer 26 - Read issue delay: 615200ns - Issue to completion delay: > 181900ns > Buffer 27 - Read issue delay: 637200ns - Issue to completion delay: > 124500ns > Buffer 28 - Read issue delay: 658500ns - Issue to completion delay: > 126200ns > Buffer 29 - Read issue delay: 679200ns - Issue to completion delay: > 130600ns > Buffer 30 - Read issue delay: 701900ns - Issue to completion delay: > 128600ns > Buffer 31 - Read issue delay: 723600ns - Issue to completion delay: > 129100ns > Buffer 32 - Read issue delay: 735300ns - Issue to completion delay: > 144500ns > Buffer 33 - Read issue delay: 758100ns - Issue to completion delay: > 230300ns > Buffer 34 - Read issue delay: 779600ns - Issue to completion delay: > 141600ns > Buffer 35 - Read issue delay: 802500ns - Issue to completion delay: > 139800ns > Buffer 36 - Read issue delay: 824100ns - Issue to completion delay: > 214400ns > Buffer 37 - Read issue delay: 844600ns - Issue to completion delay: > 287700ns > Buffer 38 - Read issue delay: 865300ns - Issue to completion delay: > 147300ns > Buffer 39 - Read issue delay: 886100ns - Issue to completion delay: > 149400ns > Buffer 40 - Read issue delay: 910900ns - Issue to completion delay: > 151600ns > Buffer 41 - Read issue delay: 932600ns - Issue to completion delay: > 149100ns > Buffer 42 - Read issue delay: 953000ns - Issue to completion delay: > 152400ns > Buffer 43 - Read issue delay: 976600ns - Issue to completion delay: > 156600ns > Buffer 44 - Read issue delay: 999200ns - Issue to completion delay: > 156100ns > Buffer 45 - Read issue delay: 1024100ns - Issue to completion delay: > 352400ns > Buffer 46 - Read issue delay: 1045400ns - Issue to completion delay: > 421000ns > Buffer 47 - Read issue delay: 1066200ns - Issue to completion delay: > 300400ns > Buffer 48 - Read issue delay: 1087700ns - Issue to completion delay: > 296800ns > Buffer 49 - Read issue delay: 1099100ns - Issue to completion delay: > 308100ns > Buffer 50 - Read issue delay: 1120500ns - Issue to completion delay: > 445400ns > Buffer 51 - Read issue delay: 1141000ns - Issue to completion delay: > 311500ns > Buffer 52 - Read issue delay: 1154200ns - Issue to completion delay: > 320200ns > Buffer 53 - Read issue delay: 1166100ns - Issue to completion delay: > 330100ns > Buffer 54 - Read issue delay: 1183400ns - Issue to completion delay: > 334300ns > Buffer 55 - Read issue delay: 1204900ns - Issue to completion delay: > 413600ns > Buffer 56 - Read issue delay: 1219900ns - Issue to completion delay: > 326200ns > Buffer 57 - Read issue delay: 1236000ns - Issue to completion delay: > 332100ns > Buffer 58 - Read issue delay: 1253600ns - Issue to completion delay: > 335800ns > Buffer 59 - Read issue delay: 1269900ns - Issue to completion delay: > 343100ns > Buffer 60 - Read issue delay: 1285800ns - Issue to completion delay: > 355100ns > Buffer 61 - Read issue delay: 1351100ns - Issue to completion delay: > 313600ns > Buffer 62 - Read issue delay: 1371300ns - Issue to completion delay: > 311600ns > Buffer 63 - Read issue delay: 1382400ns - Issue to completion delay: > 323800ns > Buffer 64 - Read issue delay: 1400500ns - Issue to completion delay: > 332800ns > Buffer 65 - Read issue delay: 1419600ns - Issue to completion delay: > 337500ns > Buffer 66 - Read issue delay: 1438200ns - Issue to completion delay: > 340900ns > Buffer 67 - Read issue delay: 1460600ns - Issue to completion delay: > 358600ns > Buffer 68 - Read issue delay: 1470800ns - Issue to completion delay: > 347100ns > Buffer 69 - Read issue delay: 1489000ns - Issue to completion delay: > 343600ns > Buffer 70 - Read issue delay: 1507100ns - Issue to completion delay: > 357600ns > Buffer 71 - Read issue delay: 1534100ns - Issue to completion delay: > 349400ns > Buffer 72 - Read issue delay: 1553200ns - Issue to completion delay: > 84400ns > Buffer 73 - Read issue delay: 1563600ns - Issue to completion delay: > 172800ns > Buffer 74 - Read issue delay: 1582300ns - Issue to completion delay: > 108200ns > Buffer 75 - Read issue delay: 1600700ns - Issue to completion delay: > 110900ns > Buffer 76 - Read issue delay: 1610200ns - Issue to completion delay: > 116100ns > Buffer 77 - Read issue delay: 1633900ns - Issue to completion delay: > 110500ns > Buffer 78 - Read issue delay: 1672400ns - Issue to completion delay: > 101600ns > Buffer 79 - Read issue delay: 1698600ns - Issue to completion delay: > 95600ns > Buffer 80 - Read issue delay: 1723600ns - Issue to completion delay: > 122200ns > Buffer 81 - Read issue delay: 1762500ns - Issue to completion delay: > 94400ns > Buffer 82 - Read issue delay: 1787300ns - Issue to completion delay: > 99900ns > Buffer 83 - Read issue delay: 1810200ns - Issue to completion delay: > 102900ns > Buffer 84 - Read issue delay: 1828300ns - Issue to completion delay: > 95400ns > Buffer 85 - Read issue delay: 1854200ns - Issue to completion delay: > 93000ns > Buffer 86 - Read issue delay: 1878400ns - Issue to completion delay: > 88200ns > Buffer 87 - Read issue delay: 1897100ns - Issue to completion delay: > 100200ns > Buffer 88 - Read issue delay: 1914900ns - Issue to completion delay: > 101800ns > Buffer 89 - Read issue delay: 1933600ns - Issue to completion delay: > 104800ns > Buffer 90 - Read issue delay: 1943800ns - Issue to completion delay: > 116100ns > Buffer 91 - Read issue delay: 1962200ns - Issue to completion delay: > 120500ns > Buffer 92 - Read issue delay: 1980300ns - Issue to completion delay: > 124200ns > Buffer 93 - Read issue delay: 1990000ns - Issue to completion delay: > 136500ns > Buffer 94 - Read issue delay: 2008800ns - Issue to completion delay: > 141600ns > Buffer 95 - Read issue delay: 2028200ns - Issue to completion delay: > 143100ns > Buffer 96 - Read issue delay: 2044900ns - Issue to completion delay: > 148900ns > Buffer 97 - Read issue delay: 2054900ns - Issue to completion delay: > 162300ns > Buffer 98 - Read issue delay: 2072800ns - Issue to completion delay: > 165600ns > Buffer 99 - Read issue delay: 2094000ns - Issue to completion delay: > 167500ns > Buffer 100 - Read issue delay: 2103600ns - Issue to completion delay: > 179000ns > Buffer 101 - Read issue delay: 2126300ns - Issue to completion delay: > 211400ns > Buffer 102 - Read issue delay: 2145300ns - Issue to completion delay: > 183400ns > Buffer 103 - Read issue delay: 2163400ns - Issue to completion delay: > 213400ns > Buffer 104 - Read issue delay: 2183300ns - Issue to completion delay: > 199300ns > Buffer 105 - Read issue delay: 2192900ns - Issue to completion delay: > 162900ns > Buffer 106 - Read issue delay: 2215500ns - Issue to completion delay: > 204700ns > Buffer 107 - Read issue delay: 2233500ns - Issue to completion delay: > 208700ns > Buffer 108 - Read issue delay: 2252500ns - Issue to completion delay: > 209000ns > Buffer 109 - Read issue delay: 2271200ns - Issue to completion delay: > 335600ns > Buffer 110 - Read issue delay: 2281500ns - Issue to completion delay: > 318400ns > Buffer 111 - Read issue delay: 2301400ns - Issue to completion delay: > 502400ns > Buffer 112 - Read issue delay: 2320300ns - Issue to completion delay: > 95200ns > Buffer 113 - Read issue delay: 2339600ns - Issue to completion delay: > 118700ns > > Disk E: (D: and E: are partitions on a 2Tb NVMe Seagate FireCuda > ZP2000GM30013) > > PS E:\Test Data> FileReadSpeedTest '.\crystaldiskmark nvme ssd.png' > Worker thread count: 6 > Clock is steady > Buffer size: 512 > Open delay: 92800ns > Open to read delay: 740200ns > Buffer 0 - Read issue delay: 100ns - Issue to completion delay: 86554400ns > Buffer 1 - Read issue delay: 73300ns - Issue to completion delay: > 86443200ns > Buffer 2 - Read issue delay: 89700ns - Issue to completion delay: > 86286500ns > Buffer 3 - Read issue delay: 101900ns - Issue to completion delay: > 86296000ns > Buffer 4 - Read issue delay: 131300ns - Issue to completion delay: > 86413500ns > Buffer 5 - Read issue delay: 145300ns - Issue to completion delay: > 86577300ns > Buffer 6 - Read issue delay: 160900ns - Issue to completion delay: > 86331200ns > Buffer 7 - Read issue delay: 177700ns - Issue to completion delay: > 86872200ns > Buffer 8 - Read issue delay: 190200ns - Issue to completion delay: > 86602100ns > Buffer 9 - Read issue delay: 208000ns - Issue to completion delay: > 86819800ns > Buffer 10 - Read issue delay: 224900ns - Issue to completion delay: > 87068600ns > Buffer 11 - Read issue delay: 237300ns - Issue to completion delay: > 87051700ns > Buffer 12 - Read issue delay: 255100ns - Issue to completion delay: > 86892800ns > Buffer 13 - Read issue delay: 269700ns - Issue to completion delay: > 87075200ns > Buffer 14 - Read issue delay: 280400ns - Issue to completion delay: > 87179800ns > Buffer 15 - Read issue delay: 293600ns - Issue to completion delay: > 87354800ns > Buffer 16 - Read issue delay: 306200ns - Issue to completion delay: > 87297400ns > Buffer 17 - Read issue delay: 317300ns - Issue to completion delay: > 87524800ns > Buffer 18 - Read issue delay: 329900ns - Issue to completion delay: > 87433600ns > Buffer 19 - Read issue delay: 343200ns - Issue to completion delay: > 87455000ns > Buffer 20 - Read issue delay: 355200ns - Issue to completion delay: > 87613800ns > Buffer 21 - Read issue delay: 368800ns - Issue to completion delay: > 88039000ns > Buffer 22 - Read issue delay: 380800ns - Issue to completion delay: > 87908000ns > Buffer 23 - Read issue delay: 391100ns - Issue to completion delay: > 87971200ns > Buffer 24 - Read issue delay: 403300ns - Issue to completion delay: > 87870800ns > Buffer 25 - Read issue delay: 416200ns - Issue to completion delay: > 87816700ns > Buffer 26 - Read issue delay: 427800ns - Issue to completion delay: > 87685300ns > Buffer 27 - Read issue delay: 443200ns - Issue to completion delay: > 87811100ns > Buffer 28 - Read issue delay: 456700ns - Issue to completion delay: > 87682600ns > Buffer 29 - Read issue delay: 467800ns - Issue to completion delay: > 87583500ns > Buffer 30 - Read issue delay: 480100ns - Issue to completion delay: > 87518600ns > Buffer 31 - Read issue delay: 493500ns - Issue to completion delay: > 87727200ns > Buffer 32 - Read issue delay: 503800ns - Issue to completion delay: > 89320200ns > Buffer 33 - Read issue delay: 518100ns - Issue to completion delay: > 89303900ns > Buffer 34 - Read issue delay: 533700ns - Issue to completion delay: > 89251700ns > Buffer 35 - Read issue delay: 549600ns - Issue to completion delay: > 89216900ns > Buffer 36 - Read issue delay: 566600ns - Issue to completion delay: > 89181200ns > Buffer 37 - Read issue delay: 579400ns - Issue to completion delay: > 89148600ns > Buffer 38 - Read issue delay: 590900ns - Issue to completion delay: > 89204900ns > Buffer 39 - Read issue delay: 604700ns - Issue to completion delay: > 89104600ns > Buffer 40 - Read issue delay: 616600ns - Issue to completion delay: > 89069300ns > Buffer 41 - Read issue delay: 627600ns - Issue to completion delay: > 89065400ns > Buffer 42 - Read issue delay: 779700ns - Issue to completion delay: > 88885200ns > Buffer 43 - Read issue delay: 793400ns - Issue to completion delay: > 88855500ns > Buffer 44 - Read issue delay: 804600ns - Issue to completion delay: > 88833200ns > Buffer 45 - Read issue delay: 817900ns - Issue to completion delay: > 88821600ns > Buffer 46 - Read issue delay: 831400ns - Issue to completion delay: > 88780400ns > Buffer 47 - Read issue delay: 842900ns - Issue to completion delay: > 88775600ns > Buffer 48 - Read issue delay: 854700ns - Issue to completion delay: > 88733300ns > Buffer 49 - Read issue delay: 866800ns - Issue to completion delay: > 88715100ns > Buffer 50 - Read issue delay: 878100ns - Issue to completion delay: > 88684100ns > Buffer 51 - Read issue delay: 891300ns - Issue to completion delay: > 88642600ns > Buffer 52 - Read issue delay: 903400ns - Issue to completion delay: > 88554400ns > Buffer 53 - Read issue delay: 915000ns - Issue to completion delay: > 88520300ns > Buffer 54 - Read issue delay: 927400ns - Issue to completion delay: > 88488900ns > Buffer 55 - Read issue delay: 1544000ns - Issue to completion delay: > 87853500ns > Buffer 56 - Read issue delay: 1556400ns - Issue to completion delay: > 87822400ns > Buffer 57 - Read issue delay: 1571200ns - Issue to completion delay: > 87787800ns > Buffer 58 - Read issue delay: 1583900ns - Issue to completion delay: > 87755400ns > Buffer 59 - Read issue delay: 1595800ns - Issue to completion delay: > 87724500ns > Buffer 60 - Read issue delay: 1608900ns - Issue to completion delay: > 87692300ns > Buffer 61 - Read issue delay: 1621800ns - Issue to completion delay: > 87661000ns > Buffer 62 - Read issue delay: 1633300ns - Issue to completion delay: > 87862100ns > Buffer 63 - Read issue delay: 1647100ns - Issue to completion delay: > 87604000ns > Buffer 64 - Read issue delay: 1659400ns - Issue to completion delay: > 87585700ns > Buffer 65 - Read issue delay: 1671600ns - Issue to completion delay: > 87597300ns > Buffer 66 - Read issue delay: 1684800ns - Issue to completion delay: > 87535600ns > Buffer 67 - Read issue delay: 1697100ns - Issue to completion delay: > 87508500ns > Buffer 68 - Read issue delay: 1709000ns - Issue to completion delay: > 87474400ns > Buffer 69 - Read issue delay: 1721500ns - Issue to completion delay: > 87491700ns > Buffer 70 - Read issue delay: 1733300ns - Issue to completion delay: > 87426200ns > Buffer 71 - Read issue delay: 1744800ns - Issue to completion delay: > 87393300ns > Buffer 72 - Read issue delay: 1756200ns - Issue to completion delay: > 87347800ns > Buffer 73 - Read issue delay: 1768100ns - Issue to completion delay: > 87315800ns > Buffer 74 - Read issue delay: 1779900ns - Issue to completion delay: > 87285300ns > Buffer 75 - Read issue delay: 1792400ns - Issue to completion delay: > 87444300ns > Buffer 76 - Read issue delay: 1804000ns - Issue to completion delay: > 87267700ns > Buffer 77 - Read issue delay: 1815100ns - Issue to completion delay: > 87228600ns > Buffer 78 - Read issue delay: 1826700ns - Issue to completion delay: > 87190800ns > Buffer 79 - Read issue delay: 1839800ns - Issue to completion delay: > 87187400ns > Buffer 80 - Read issue delay: 1851400ns - Issue to completion delay: > 87135400ns > Buffer 81 - Read issue delay: 1863700ns - Issue to completion delay: > 87041800ns > Buffer 82 - Read issue delay: 1876400ns - Issue to completion delay: > 86996700ns > Buffer 83 - Read issue delay: 1887600ns - Issue to completion delay: > 86999400ns > Buffer 84 - Read issue delay: 1899800ns - Issue to completion delay: > 86946600ns > Buffer 85 - Read issue delay: 1911600ns - Issue to completion delay: > 86923800ns > Buffer 86 - Read issue delay: 1922000ns - Issue to completion delay: > 86816700ns > Buffer 87 - Read issue delay: 1934200ns - Issue to completion delay: > 86750400ns > Buffer 88 - Read issue delay: 1946000ns - Issue to completion delay: > 84927600ns > Buffer 89 - Read issue delay: 1956500ns - Issue to completion delay: > 84811300ns > Buffer 90 - Read issue delay: 1968200ns - Issue to completion delay: > 84941500ns > Buffer 91 - Read issue delay: 1979500ns - Issue to completion delay: > 85109100ns > Buffer 92 - Read issue delay: 1990100ns - Issue to completion delay: > 85260200ns > Buffer 93 - Read issue delay: 2002400ns - Issue to completion delay: > 85266500ns > Buffer 94 - Read issue delay: 2015100ns - Issue to completion delay: > 85142900ns > Buffer 95 - Read issue delay: 2029500ns - Issue to completion delay: > 85384900ns > Buffer 96 - Read issue delay: 2042000ns - Issue to completion delay: > 85487900ns > Buffer 97 - Read issue delay: 2054300ns - Issue to completion delay: > 85668700ns > Buffer 98 - Read issue delay: 2255700ns - Issue to completion delay: > 85606800ns > Buffer 99 - Read issue delay: 2269400ns - Issue to completion delay: > 85515700ns > Buffer 100 - Read issue delay: 2281200ns - Issue to completion delay: > 85704100ns > Buffer 101 - Read issue delay: 2292000ns - Issue to completion delay: > 85765900ns > Buffer 102 - Read issue delay: 2306100ns - Issue to completion delay: > 86201500ns > Buffer 103 - Read issue delay: 2318800ns - Issue to completion delay: > 86170400ns > Buffer 104 - Read issue delay: 2329100ns - Issue to completion delay: > 86079800ns > Buffer 105 - Read issue delay: 2340600ns - Issue to completion delay: > 85972700ns > Buffer 106 - Read issue delay: 2353100ns - Issue to completion delay: > 85594300ns > Buffer 107 - Read issue delay: 2365000ns - Issue to completion delay: > 86082600ns > Buffer 108 - Read issue delay: 2377500ns - Issue to completion delay: > 86156500ns > Buffer 109 - Read issue delay: 2390200ns - Issue to completion delay: > 86272000ns > Buffer 110 - Read issue delay: 2400300ns - Issue to completion delay: > 86392800ns > Buffer 111 - Read issue delay: 2412200ns - Issue to completion delay: > 86181900ns > Buffer 112 - Read issue delay: 2423800ns - Issue to completion delay: > 86238900ns > Buffer 113 - Read issue delay: 2434200ns - Issue to completion delay: > 86123900ns > On 2025-09-25 03:44, Chris Blume (ProgramMax) wrote: > > Hello everyone, > > I just uploaded a first pass at a new tool to help us in our effort to > improve PNG decoding, FileReadSpeedTest > <https://github.com/ProgramMax/FileReadSpeedTest>. > > It works by finding the optimal buffer size for a given drive & file > system, then loads a file buffer-by-buffer. It reports the time each buffer > arrives. This allows us to "replay" file loading for performance testing. > (The drive and OS will cache data, changing the load speeds & performance > results. We can instead feed the buffers to the test rig at known good > intervals to keep tests consistent.) > > This is how the hardware works under the hood. It does not load an entire > file in one go. This also gives us a target for our decode speeds. In an > ideal world, we can decode a buffer faster than the next buffer arrives. > That would mean the decode speed is limited by the drive, not the > format/algorithm. > > I tested on my laptop, which has a WD_BLACK SN770 2TB drive. That is a > seriously fast drive. Advertised speeds are "up to 5,150 MB/s". I was able > to reach 5,259 MB/s. It is formatted with NTFS (BitLocker encrypted). > Windows reports the ideal buffer size is 4096 bytes. > > A buffer load took ~10 microseconds. So a simple, not-quite-accurate > reaction is "Our format should decode 4096 bytes in ~10 microseconds for > this machine". > For a machine with a more normal drive, we'll have even more time. > > (In order to be more accurate, I'll need to also measure IO command > queuing and OS call overhead. That'll come soon.) > > An important thing to note is this is a moving target. CPU speeds have > leveled out, but drive speeds are still increasing. If we want to target > crazy fast server hardware, that's a different target. Additionally, that > 4096 bytes in ~10 microseconds assumes a single-threaded workload. If we > were able to spread the work across 8 threads, we would have ~80 > microseconds. But with command queuing, multiple threads worth of buffered > data might arrive at nearly the same time, reducing the available > per-thread decode time back down. > > I'll work on improving the tool and gathering more sample data for us to > replay under various conditions. I'll also add Linux and Mac support when I > can. > > -- > Chris Lilley > @svgeesus@mastodon.scot > W3C Distinguished Expert, Color, Graphics & Fonts > W3C Technical Programming Team, Core Web Design > >
Received on Monday, 29 September 2025 04:05:07 UTC