data MeterState = MeterState
{ meterBytesProcessed :: BytesProcessed
- , meterTimeStamp :: Double
- } deriving (Show, Read)
+ , meterTimeStamp :: POSIXTime
+ } deriving (Show)
type DisplayMeter = MVar String -> Maybe Integer -> MeterState -> MeterState -> IO ()
-- | Make a meter. Pass the total size, if it's known.
mkMeter :: Maybe Integer -> DisplayMeter -> IO Meter
mkMeter totalsize displaymeter = do
- ts <- realToFrac <$> getPOSIXTime
+ ts <- getPOSIXTime
Meter
<$> newMVar totalsize
<*> newMVar (MeterState zeroBytesProcessed ts)
-- | Updates the meter, displaying it if necessary.
updateMeter :: Meter -> MeterUpdate
updateMeter (Meter totalsizev sv bv displaymeter) new = do
- now <- realToFrac <$> getPOSIXTime
+ now <- getPOSIXTime
let curms = MeterState new now
oldms <- swapMVar sv curms
when (meterBytesProcessed oldms /= new) $ do