1// Bench.h
2
3#ifndef __7ZIP_BENCH_H
4#define __7ZIP_BENCH_H
5
6#include "../../Common/CreateCoder.h"
7#include "../../UI/Common/Property.h"
8
9struct CBenchInfo
10{
11  UInt64 GlobalTime;
12  UInt64 GlobalFreq;
13  UInt64 UserTime;
14  UInt64 UserFreq;
15  UInt64 UnpackSize;
16  UInt64 PackSize;
17  UInt64 NumIterations;
18
19  CBenchInfo(): NumIterations(0) {}
20  UInt64 GetUsage() const;
21  UInt64 GetRatingPerUsage(UInt64 rating) const;
22  UInt64 GetSpeed(UInt64 numCommands) const;
23};
24
25struct IBenchCallback
26{
27  virtual HRESULT SetFreq(bool showFreq, UInt64 cpuFreq) = 0;
28  virtual HRESULT SetEncodeResult(const CBenchInfo &info, bool final) = 0;
29  virtual HRESULT SetDecodeResult(const CBenchInfo &info, bool final) = 0;
30};
31
32UInt64 GetCompressRating(UInt32 dictSize, UInt64 elapsedTime, UInt64 freq, UInt64 size);
33UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt64 numIterations);
34
35const int kBenchMinDicLogSize = 18;
36
37UInt64 GetBenchMemoryUsage(UInt32 numThreads, UInt32 dictionary);
38
39struct IBenchPrintCallback
40{
41  virtual void Print(const char *s) = 0;
42  virtual void NewLine() = 0;
43  virtual HRESULT CheckBreak() = 0;
44};
45
46HRESULT Bench(
47    DECL_EXTERNAL_CODECS_LOC_VARS
48    IBenchPrintCallback *printCallback,
49    IBenchCallback *benchCallback,
50    const CObjectVector<CProperty> &props,
51    UInt32 numIterations,
52    bool multiDict
53    );
54
55#endif
56