@@ -482,17 +482,53 @@ impl<T, E> ResultSwap<T, E> for Result<T, E> {
482482
483483#[ cfg( feature = "diff" ) ]
484484fn gen_delta ( orig : & Path , new : & Path , patch : & Path ) -> Result < ( ) , std:: io:: Error > {
485+ use std:: io:: Read ;
486+ let baseline = memory_stats:: memory_stats ( ) . unwrap ( ) . physical_mem ;
487+
485488 let orig = OpenOptions :: new ( ) . read ( true ) . open ( orig) . unwrap ( ) ;
486- let mut orig = zstd:: Decoder :: new ( orig) ?;
489+ let mut origb = Vec :: new ( ) ;
490+ zstd:: Decoder :: new ( orig) ?. read_to_end ( & mut origb) ?;
491+ let origb_len = origb. len ( ) ;
492+ let mut origb = Cursor :: new ( origb) ;
493+
487494 let new = OpenOptions :: new ( ) . read ( true ) . open ( new) . unwrap ( ) ;
488- let mut new = zstd:: Decoder :: new ( new) ?;
495+ let mut newb = Vec :: new ( ) ;
496+ zstd:: Decoder :: new ( new) ?. read_to_end ( & mut newb) ?;
497+ let newb_len = newb. len ( ) ;
498+ let mut newb = Cursor :: new ( newb) ;
489499
490500 let patch = OpenOptions :: new ( ) . write ( true ) . create ( true ) . open ( patch) . unwrap ( ) ;
491501 let mut patch = zstd:: Encoder :: new ( patch, 22 ) ?;
492502
493- ddelta:: generate_chunked ( & mut orig, & mut new, & mut patch, None , |p| debug ! ( "{p:?}" ) ) . unwrap ( ) ;
503+ let before = memory_stats:: memory_stats ( ) . unwrap ( ) . physical_mem ;
504+ let mut max = before;
505+ ddelta:: generate_chunked ( & mut origb, & mut newb, & mut patch, None , |p| {
506+ match p {
507+ ddelta:: State :: Reading => debug ! ( "Reading" ) ,
508+ ddelta:: State :: Sorting => debug ! ( "Sorting" ) ,
509+ ddelta:: State :: Working ( b) => debug ! ( "Working({})" , ByteSize :: b( b) ) ,
510+ } ;
511+ max = max. max ( memory_stats:: memory_stats ( ) . unwrap ( ) . physical_mem ) ;
512+ debug ! (
513+ "adduse: {}" ,
514+ ByteSize :: b( ( max - origb_len - newb_len - baseline) as u64 )
515+ ) ;
516+ } )
517+ . unwrap ( ) ;
494518 patch. do_finish ( ) ?;
495519
520+ debug ! ( "init mem use: {}" , ByteSize :: b( before as u64 ) ) ;
521+ debug ! ( "maxi mem use: {}" , ByteSize :: b( max as u64 ) ) ;
522+ debug ! (
523+ "orig: {}, new: {}" ,
524+ ByteSize :: b( origb_len as u64 ) ,
525+ ByteSize :: b( newb_len as u64 )
526+ ) ;
527+ debug ! ( "baseline: {}" , ByteSize :: b( baseline as u64 ) ) ;
528+ debug ! (
529+ "adduse: {}" ,
530+ ByteSize :: b( ( max - origb_len - newb_len - baseline) as u64 )
531+ ) ;
496532 Ok ( ( ) )
497533}
498534
0 commit comments