Progress seems to be calculated based on the amount of data actually transferred instead of checked (by the client).
Example:
1 GB has actually changed on the client but it needs to check all 100 GB of data. Then progress on the server will show max 1% because the client doesn’t send the 99 GB of unchanged data - right up to the moment it has finished.
As a result, ETA is also wrong because as nothing is sent while the client is busy checking for modified data, transfer speed is steadily decreasing and ETA sometimes even climbs up to several years.
Solution:
I think it should show how much the client has already checked instead of sent to the server.