Changeset 2621


Ignore:
Timestamp:
05/11/12 02:48:45 (2 years ago)
Author:
lowjoel
Message:

Instead of compressing the BlackBox? reports with bz2, use LZMA which results in a 30% smaller file and also a speed up of 300%,

Location:
trunk/eraser
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser/Eraser.BlackBox/BlackBox.cs

    r2536 r2621  
    3939using System.ComponentModel; 
    4040 
     41using SevenZip; 
     42using SevenZip.Compression.LZMA; 
    4143using ICSharpCode.SharpZipLib.Tar; 
    4244using ICSharpCode.SharpZipLib.BZip2; 
     
    617619    public class BlackBoxReportUploader 
    618620    { 
     621        private class SevenZipProgressCallback : ICodeProgress 
     622        { 
     623            public SevenZipProgressCallback(BlackBoxReportUploader uploader, 
     624                SteppedProgressManager progress, ProgressManager stepProgress, 
     625                ProgressChangedEventHandler progressChanged) 
     626            { 
     627                Uploader = uploader; 
     628                Progress = progress; 
     629                StepProgress = stepProgress; 
     630                EventHandler = progressChanged; 
     631            } 
     632 
     633            #region ICodeProgress Members 
     634 
     635            public void SetProgress(long inSize, long outSize) 
     636            { 
     637                StepProgress.Completed = inSize; 
     638                EventHandler(Uploader, new ProgressChangedEventArgs(Progress, null)); 
     639            } 
     640 
     641            #endregion 
     642 
     643            private BlackBoxReportUploader Uploader; 
     644            private SteppedProgressManager Progress; 
     645            private ProgressManager StepProgress; 
     646            private ProgressChangedEventHandler EventHandler; 
     647        } 
     648 
    619649        /// <summary> 
    620650        /// Constructor. 
     
    731761            ProgressManager step = new ProgressManager(); 
    732762            progress.Steps.Add(new SteppedProgressManagerStep(step, 0.5f, "Compressing")); 
    733             using (FileStream bzipFile = new FileStream(ReportBaseName + ".tbz", 
     763            CoderPropID[] propIDs =  
     764                { 
     765                    CoderPropID.DictionarySize, 
     766                    CoderPropID.PosStateBits, 
     767                    CoderPropID.LitContextBits, 
     768                    CoderPropID.LitPosBits, 
     769                    CoderPropID.Algorithm, 
     770                    CoderPropID.NumFastBytes, 
     771                    CoderPropID.MatchFinder, 
     772                    CoderPropID.EndMarker 
     773                }; 
     774            object[] properties =  
     775                { 
     776                    (Int32)(1 << 24),           //Dictionary Size 
     777                    (Int32)2,                   //PosState Bits 
     778                    (Int32)0,                   //LitContext Bits 
     779                    (Int32)2,                   //LitPos Bits 
     780                    (Int32)2,                   //Algorithm 
     781                    (Int32)128,                 //Fast Bytes 
     782                    "bt4",                      //Match Finger 
     783                    true                        //Write end-of-stream 
     784                }; 
     785 
     786            SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); 
     787            encoder.SetCoderProperties(propIDs, properties); 
     788 
     789            using (FileStream sevenZipFile = new FileStream(ReportBaseName + ".tar.7z", 
    734790                FileMode.Create)) 
    735791            using (FileStream tarStream = new FileStream(ReportBaseName + ".tar", 
    736792                FileMode.Open, FileAccess.Read, FileShare.Read, 262144, FileOptions.DeleteOnClose)) 
    737             using (BZip2OutputStream bzipStream = new BZip2OutputStream(bzipFile, 262144)) 
    738             { 
    739                 //Compress the tar file 
    740                 int lastRead = 0; 
    741                 byte[] buffer = new byte[524288]; 
    742                 while ((lastRead = tarStream.Read(buffer, 0, buffer.Length)) != 0) 
    743                 { 
    744                     bzipStream.Write(buffer, 0, lastRead); 
    745                     step.Total = tarStream.Length; 
    746                     step.Completed = tarStream.Position; 
    747  
    748                     if (progressChanged != null) 
    749                         progressChanged(this, new ProgressChangedEventArgs(progress, null)); 
    750                 } 
     793            { 
     794                encoder.WriteCoderProperties(sevenZipFile); 
     795                Int64 fileSize = -1; 
     796                for (int i = 0; i < 8; i++) 
     797                    sevenZipFile.WriteByte((Byte)(fileSize >> (8 * i))); 
     798 
     799                step.Total = tarStream.Length; 
     800                ICodeProgress callback = progressChanged == null ? null : 
     801                    new SevenZipProgressCallback(this, progress, step, progressChanged); 
     802                encoder.Code(tarStream, sevenZipFile, -1, -1, callback); 
    751803            } 
    752804        } 
     
    762814            Compress(overallProgress, progressChanged); 
    763815 
    764             using (FileStream bzipFile = new FileStream(ReportBaseName + ".tbz", 
     816            using (FileStream bzipFile = new FileStream(ReportBaseName + ".tar.7z", 
    765817                FileMode.Open, FileAccess.Read, FileShare.Read, 131072, FileOptions.DeleteOnClose)) 
    766818            using (Stream logFile = Report.DebugLog) 
     
    769821                PostDataBuilder builder = new PostDataBuilder(); 
    770822                builder.AddPart(new PostDataField("action", "upload")); 
    771                 builder.AddPart(new PostDataFileField("crashReport", "Report.tbz", bzipFile)); 
     823                builder.AddPart(new PostDataFileField("crashReport", "Report.tar.7z", bzipFile)); 
    772824                AddStackTraceToRequest(Report.StackTrace, builder); 
    773825 
  • trunk/eraser/Eraser.BlackBox/Eraser.BlackBox.csproj

    r2509 r2621  
    6565      <HintPath>..\Dependencies\ICSharpCode.SharpZipLib.dll</HintPath> 
    6666      <Private>True</Private> 
     67    </Reference> 
     68    <Reference Include="Lzma#"> 
     69      <HintPath>..\Dependencies\Lzma#.dll</HintPath> 
    6770    </Reference> 
    6871    <Reference Include="Microsoft.VisualBasic" /> 
Note: See TracChangeset for help on using the changeset viewer.