mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 17:15:00 -06:00
141 lines
3.1 KiB
C++
Executable File
141 lines
3.1 KiB
C++
Executable File
// BenchmarkDialog.h
|
|
|
|
#ifndef __BENCHMARK_DIALOG_H
|
|
#define __BENCHMARK_DIALOG_H
|
|
|
|
#include "Windows/Control/ComboBox.h"
|
|
#include "Windows/Synchronization.h"
|
|
#include "../../Compress/LZMA_Alone/LzmaBench.h"
|
|
|
|
#ifdef EXTERNAL_LZMA
|
|
#include "../Common/LoadCodecs.h"
|
|
#endif
|
|
|
|
#include "../FileManager/DialogSize.h"
|
|
|
|
#include "BenchmarkDialogRes.h"
|
|
|
|
struct CBenchInfo2 : public CBenchInfo
|
|
{
|
|
void Init() { GlobalTime = UserTime = 0; }
|
|
};
|
|
|
|
class CProgressSyncInfo
|
|
{
|
|
public:
|
|
bool Stopped;
|
|
bool Paused;
|
|
bool Changed;
|
|
UInt32 DictionarySize;
|
|
UInt32 NumThreads;
|
|
UInt64 NumPasses;
|
|
// UInt64 NumErrors;
|
|
NWindows::NSynchronization::CManualResetEvent _startEvent;
|
|
NWindows::NSynchronization::CCriticalSection CS;
|
|
|
|
CBenchInfo2 CompressingInfoTemp;
|
|
CBenchInfo2 CompressingInfo;
|
|
UInt64 ProcessedSize;
|
|
|
|
CBenchInfo2 DecompressingInfoTemp;
|
|
CBenchInfo2 DecompressingInfo;
|
|
|
|
CProgressSyncInfo()
|
|
{
|
|
if (_startEvent.Create() != S_OK)
|
|
throw 3986437;
|
|
}
|
|
void Init()
|
|
{
|
|
Changed = false;
|
|
Stopped = false;
|
|
Paused = false;
|
|
CompressingInfoTemp.Init();
|
|
CompressingInfo.Init();
|
|
ProcessedSize = 0;
|
|
|
|
DecompressingInfoTemp.Init();
|
|
DecompressingInfo.Init();
|
|
|
|
NumPasses = 0;
|
|
// NumErrors = 0;
|
|
}
|
|
void Stop()
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CS);
|
|
Stopped = true;
|
|
}
|
|
bool WasStopped()
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CS);
|
|
return Stopped;
|
|
}
|
|
void Pause()
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CS);
|
|
Paused = true;
|
|
}
|
|
void Start()
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CS);
|
|
Paused = false;
|
|
}
|
|
bool WasPaused()
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CS);
|
|
return Paused;
|
|
}
|
|
void WaitCreating() { _startEvent.Lock(); }
|
|
};
|
|
|
|
class CBenchmarkDialog:
|
|
public NWindows::NControl::CModalDialog
|
|
{
|
|
NWindows::NControl::CComboBox m_Dictionary;
|
|
NWindows::NControl::CComboBox m_NumThreads;
|
|
UINT_PTR _timer;
|
|
UINT32 _startTime;
|
|
|
|
bool OnTimer(WPARAM timerID, LPARAM callback);
|
|
virtual bool OnInit();
|
|
void OnRestartButton();
|
|
void OnStopButton();
|
|
void OnHelp();
|
|
virtual void OnCancel();
|
|
bool OnButtonClicked(int buttonID, HWND buttonHWND);
|
|
bool OnCommand(int code, int itemID, LPARAM lParam);
|
|
|
|
void PrintTime();
|
|
void PrintRating(UInt64 rating, UINT controlID);
|
|
void PrintUsage(UInt64 usage, UINT controlID);
|
|
void PrintResults(
|
|
UINT32 dictionarySize,
|
|
const CBenchInfo2 &info, UINT usageID, UINT speedID, UINT rpuID, UINT ratingID,
|
|
bool decompressMode = false);
|
|
|
|
UInt32 GetNumberOfThreads();
|
|
UInt32 OnChangeDictionary();
|
|
void OnChangeSettings();
|
|
public:
|
|
CProgressSyncInfo Sync;
|
|
|
|
CBenchmarkDialog(): _timer(0) {}
|
|
INT_PTR Create(HWND wndParent = 0)
|
|
{
|
|
BIG_DIALOG_SIZE(332, 228);
|
|
return CModalDialog::Create(SIZED_DIALOG(IDD_DIALOG_BENCHMARK), wndParent);
|
|
}
|
|
void MessageBoxError(LPCWSTR message)
|
|
{
|
|
MessageBoxW(*this, message, L"7-Zip", MB_ICONERROR);
|
|
}
|
|
};
|
|
|
|
HRESULT Benchmark(
|
|
#ifdef EXTERNAL_LZMA
|
|
CCodecs *codecs,
|
|
#endif
|
|
UInt32 dictionarySize, UInt32 numThreads, HWND hwndParent = NULL);
|
|
|
|
#endif
|