-
Andrew Hodgkinson authored
Detail: Use of the RMA by PipeFS could lead to fragmentation, and is slower than a private dynamic area as the RMA's a very busy heap. The new dynamic area is set to 16MB maximum size, called "PipeFS", and the code is compile-time switched, not run-time. PipeFS has no block handling code so its get/put byte routines are called by the OS in a tight loop. Unfortunately for each byte it reads/writes it issues UpCall_ModifyingFile, and moreover does this without specifying a filename, so *all* directories are rescanned - for every single byte read or written to PipeFS. This is why PipeFS is so extremely slow prior to this version. Now, a callback is set, and the UpCall only issued when this goes off - after any block transfers, for example. A typical effect is a 171K file save from a text editor to PipeFS used to take around 20 seconds, and now takes less than a quarter of a second. Streaming data through PipeFS is now a sensible option. There are two variants of the callback code; one maintans an array of filename pointers and goes through the list each time the call- back fires; the other just issues a general UpCall each time. The first one should work OK, and is there in case anyone ever works out how to use R1 properly for the UpCall. Admin: Copied files into PipeFS up to the DA limit and verified sensible behaviour at this point; memory released as expected on file removal; files appear to be intact; MP3 streaming at 128kbps from network or disc through PipeFS is reliable; Filer window behaviour with "full info" on and Task Manager display of dynamic area size act as expected. By default, the compile-time options mean the module will only run on RISC OS 3.5 or later. Tested on RISC OS 3.70 only. Version 0.19. Tagged as 'PipeFS-0_19'
2dae69a3