xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Common/Bench.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Bench.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_7ZIP_BENCH_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_7ZIP_BENCH_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/System.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/CreateCoder.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../UI/Common/Property.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker UInt64 Benchmark_GetUsage_Percents(UInt64 usage);
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker struct CBenchInfo
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   UInt64 GlobalTime;
16*f6dc9357SAndroid Build Coastguard Worker   UInt64 GlobalFreq;
17*f6dc9357SAndroid Build Coastguard Worker   UInt64 UserTime;
18*f6dc9357SAndroid Build Coastguard Worker   UInt64 UserFreq;
19*f6dc9357SAndroid Build Coastguard Worker   UInt64 UnpackSize;
20*f6dc9357SAndroid Build Coastguard Worker   UInt64 PackSize;
21*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumIterations;
22*f6dc9357SAndroid Build Coastguard Worker 
23*f6dc9357SAndroid Build Coastguard Worker   /*
24*f6dc9357SAndroid Build Coastguard Worker      during Code(): we track benchInfo only from one thread (theads with index[0])
25*f6dc9357SAndroid Build Coastguard Worker        NumIterations means number of threads
26*f6dc9357SAndroid Build Coastguard Worker        UnpackSize and PackSize are total sizes of all iterations of current thread
27*f6dc9357SAndroid Build Coastguard Worker      after Code():
28*f6dc9357SAndroid Build Coastguard Worker        NumIterations means the number of Iterations
29*f6dc9357SAndroid Build Coastguard Worker        UnpackSize and PackSize are total sizes of all threads
30*f6dc9357SAndroid Build Coastguard Worker   */
31*f6dc9357SAndroid Build Coastguard Worker 
CBenchInfoCBenchInfo32*f6dc9357SAndroid Build Coastguard Worker   CBenchInfo(): NumIterations(0) {}
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetUsage() const;
35*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetRatingPerUsage(UInt64 rating) const;
36*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetSpeed(UInt64 numUnits) const;
GetUnpackSizeSpeedCBenchInfo37*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetUnpackSizeSpeed() const { return GetSpeed(UnpackSize * NumIterations); }
38*f6dc9357SAndroid Build Coastguard Worker 
Get_UnpackSize_FullCBenchInfo39*f6dc9357SAndroid Build Coastguard Worker   UInt64 Get_UnpackSize_Full() const { return UnpackSize * NumIterations; }
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetRating_LzmaEnc(UInt64 dictSize) const;
42*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetRating_LzmaDec() const;
43*f6dc9357SAndroid Build Coastguard Worker };
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker 
46*f6dc9357SAndroid Build Coastguard Worker struct CTotalBenchRes
47*f6dc9357SAndroid Build Coastguard Worker {
48*f6dc9357SAndroid Build Coastguard Worker   // UInt64 NumIterations1; // for Usage
49*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumIterations2; // for Rating / RPU
50*f6dc9357SAndroid Build Coastguard Worker 
51*f6dc9357SAndroid Build Coastguard Worker   UInt64 Rating;
52*f6dc9357SAndroid Build Coastguard Worker   UInt64 Usage;
53*f6dc9357SAndroid Build Coastguard Worker   UInt64 RPU;
54*f6dc9357SAndroid Build Coastguard Worker   UInt64 Speed;
55*f6dc9357SAndroid Build Coastguard Worker 
InitCTotalBenchRes56*f6dc9357SAndroid Build Coastguard Worker   void Init() { /* NumIterations1 = 0; */ NumIterations2 = 0; Rating = 0; Usage = 0; RPU = 0; Speed = 0; }
57*f6dc9357SAndroid Build Coastguard Worker 
SetSumCTotalBenchRes58*f6dc9357SAndroid Build Coastguard Worker   void SetSum(const CTotalBenchRes &r1, const CTotalBenchRes &r2)
59*f6dc9357SAndroid Build Coastguard Worker   {
60*f6dc9357SAndroid Build Coastguard Worker     Rating = (r1.Rating + r2.Rating);
61*f6dc9357SAndroid Build Coastguard Worker     Usage = (r1.Usage + r2.Usage);
62*f6dc9357SAndroid Build Coastguard Worker     RPU = (r1.RPU + r2.RPU);
63*f6dc9357SAndroid Build Coastguard Worker     Speed = (r1.Speed + r2.Speed);
64*f6dc9357SAndroid Build Coastguard Worker     // NumIterations1 = (r1.NumIterations1 + r2.NumIterations1);
65*f6dc9357SAndroid Build Coastguard Worker     NumIterations2 = (r1.NumIterations2 + r2.NumIterations2);
66*f6dc9357SAndroid Build Coastguard Worker   }
67*f6dc9357SAndroid Build Coastguard Worker 
68*f6dc9357SAndroid Build Coastguard Worker   void Generate_From_BenchInfo(const CBenchInfo &info);
69*f6dc9357SAndroid Build Coastguard Worker   void Mult_For_Weight(unsigned weight);
70*f6dc9357SAndroid Build Coastguard Worker   void Update_With_Res(const CTotalBenchRes &r);
71*f6dc9357SAndroid Build Coastguard Worker };
72*f6dc9357SAndroid Build Coastguard Worker 
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker const unsigned kBenchMinDicLogSize = 18;
75*f6dc9357SAndroid Build Coastguard Worker 
76*f6dc9357SAndroid Build Coastguard Worker UInt64 GetBenchMemoryUsage(UInt32 numThreads, int level, UInt64 dictionary, bool totalBench);
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN
DECLARE_INTERFACE(IBenchCallback)79*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(IBenchCallback)
80*f6dc9357SAndroid Build Coastguard Worker {
81*f6dc9357SAndroid Build Coastguard Worker   // virtual HRESULT SetFreq(bool showFreq, UInt64 cpuFreq) = 0;
82*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetEncodeResult(const CBenchInfo &info, bool final) = 0;
83*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT SetDecodeResult(const CBenchInfo &info, bool final) = 0;
84*f6dc9357SAndroid Build Coastguard Worker };
85*f6dc9357SAndroid Build Coastguard Worker 
DECLARE_INTERFACE(IBenchPrintCallback)86*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(IBenchPrintCallback)
87*f6dc9357SAndroid Build Coastguard Worker {
88*f6dc9357SAndroid Build Coastguard Worker   virtual void Print(const char *s) = 0;
89*f6dc9357SAndroid Build Coastguard Worker   virtual void NewLine() = 0;
90*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT CheckBreak() = 0;
91*f6dc9357SAndroid Build Coastguard Worker };
92*f6dc9357SAndroid Build Coastguard Worker 
DECLARE_INTERFACE(IBenchFreqCallback)93*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(IBenchFreqCallback)
94*f6dc9357SAndroid Build Coastguard Worker {
95*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT AddCpuFreq(unsigned numThreads, UInt64 freq, UInt64 usage) = 0;
96*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT FreqsFinished(unsigned numThreads) = 0;
97*f6dc9357SAndroid Build Coastguard Worker };
98*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END
99*f6dc9357SAndroid Build Coastguard Worker 
100*f6dc9357SAndroid Build Coastguard Worker HRESULT Bench(
101*f6dc9357SAndroid Build Coastguard Worker     DECL_EXTERNAL_CODECS_LOC_VARS
102*f6dc9357SAndroid Build Coastguard Worker     IBenchPrintCallback *printCallback,
103*f6dc9357SAndroid Build Coastguard Worker     IBenchCallback *benchCallback,
104*f6dc9357SAndroid Build Coastguard Worker     const CObjectVector<CProperty> &props,
105*f6dc9357SAndroid Build Coastguard Worker     UInt32 numIterations,
106*f6dc9357SAndroid Build Coastguard Worker     bool multiDict,
107*f6dc9357SAndroid Build Coastguard Worker     IBenchFreqCallback *freqCallback = NULL);
108*f6dc9357SAndroid Build Coastguard Worker 
109*f6dc9357SAndroid Build Coastguard Worker AString GetProcessThreadsInfo(const NWindows::NSystem::CProcessAffinity &ti);
110*f6dc9357SAndroid Build Coastguard Worker 
111*f6dc9357SAndroid Build Coastguard Worker void GetSysInfo(AString &s1, AString &s2);
112*f6dc9357SAndroid Build Coastguard Worker void GetCpuName(AString &s);
113*f6dc9357SAndroid Build Coastguard Worker void AddCpuFeatures(AString &s);
114*f6dc9357SAndroid Build Coastguard Worker 
115*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LARGE_PAGES
116*f6dc9357SAndroid Build Coastguard Worker void Add_LargePages_String(AString &s);
117*f6dc9357SAndroid Build Coastguard Worker #else
118*f6dc9357SAndroid Build Coastguard Worker // #define Add_LargePages_String
119*f6dc9357SAndroid Build Coastguard Worker #endif
120*f6dc9357SAndroid Build Coastguard Worker 
121*f6dc9357SAndroid Build Coastguard Worker #endif
122