Speed up game start under Windows by not filling the symbol listbox until the disasm window is opened.

This commit is contained in:
Henrik Rydgård 2020-09-24 00:28:09 +02:00
parent 6ac9dfe6b5
commit 84b36d6e61
4 changed files with 47 additions and 33 deletions

View file

@ -848,22 +848,33 @@ void CDisasm::SetDebugMode(bool _bDebug, bool switchPC)
} }
} }
void CDisasm::NotifyMapLoaded() void CDisasm::Show(bool bShow) {
{ if (deferredSymbolFill_ && bShow) {
if (g_symbolMap) if (g_symbolMap)
g_symbolMap->FillSymbolListBox(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST),ST_FUNCTION); g_symbolMap->FillSymbolListBox(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST), ST_FUNCTION);
CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg,IDC_DISASMVIEW)); deferredSymbolFill_ = false;
}
Dialog::Show(bShow);
}
void CDisasm::NotifyMapLoaded() {
if (m_bShowState == SW_SHOW) {
if (g_symbolMap)
g_symbolMap->FillSymbolListBox(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST), ST_FUNCTION);
} else {
deferredSymbolFill_ = true;
}
CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg, IDC_DISASMVIEW));
ptr->clearFunctions(); ptr->clearFunctions();
ptr->redraw(); ptr->redraw();
} }
void CDisasm::Goto(u32 addr) void CDisasm::Goto(u32 addr)
{ {
CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg,IDC_DISASMVIEW)); CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg, IDC_DISASMVIEW));
ptr->gotoAddr(addr); ptr->gotoAddr(addr);
SetFocus(GetDlgItem(m_hDlg, IDC_DISASMVIEW)); SetFocus(GetDlgItem(m_hDlg, IDC_DISASMVIEW));
ptr->redraw(); ptr->redraw();
} }
void CDisasm::UpdateDialog(bool _bComplete) void CDisasm::UpdateDialog(bool _bComplete)

View file

@ -16,7 +16,8 @@
class CDisasm : public Dialog class CDisasm : public Dialog
{ {
private: private:
int minWidth,minHeight; int minWidth;
int minHeight;
DebugInterface *cpu; DebugInterface *cpu;
u64 lastTicks; u64 lastTicks;
@ -31,8 +32,9 @@ private:
std::vector<MemCheck> displayedMemChecks_; std::vector<MemCheck> displayedMemChecks_;
bool keepStatusBarText = false; bool keepStatusBarText = false;
bool hideBottomTabs = false; bool hideBottomTabs = false;
bool deferredSymbolFill_ = false;
BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam); BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam) override;
void UpdateSize(WORD width, WORD height); void UpdateSize(WORD width, WORD height);
void SavePosition(); void SavePosition();
void updateThreadLabel(bool clear); void updateThreadLabel(bool clear);
@ -47,7 +49,9 @@ public:
CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *cpu); CDisasm(HINSTANCE _hInstance, HWND _hParent, DebugInterface *cpu);
~CDisasm(); ~CDisasm();
virtual void Update() { void Show(bool bShow) override;
void Update() override {
UpdateDialog(true); UpdateDialog(true);
SetDebugMode(Core_IsStepping(), false); SetDebugMode(Core_IsStepping(), false);
breakpointList->reloadBreakpoints(); breakpointList->reloadBreakpoints();

View file

@ -8,7 +8,7 @@ Dialog::Dialog(LPCSTR res, HINSTANCE _hInstance, HWND _hParent)
{ {
m_hInstance = _hInstance; m_hInstance = _hInstance;
m_hParent = _hParent; m_hParent = _hParent;
m_hResource=res; m_hResource = res;
m_bValid = true; m_bValid = true;
Create(); Create();
} }
@ -32,12 +32,12 @@ void Dialog::Destroy()
void Dialog::Show(bool _bShow) void Dialog::Show(bool _bShow)
{ {
ShowWindow(m_hDlg, _bShow ? SW_NORMAL : SW_HIDE); m_bShowState = _bShow ? SW_NORMAL : SW_HIDE;
ShowWindow(m_hDlg, m_bShowState);
if (_bShow) if (_bShow)
BringWindowToTop(m_hDlg); BringWindowToTop(m_hDlg);
} }
INT_PTR Dialog::DlgProcStatic(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) INT_PTR Dialog::DlgProcStatic(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{ {
Dialog *dis = (Dialog*)GetWindowLongPtr(hdlg, GWLP_USERDATA); Dialog *dis = (Dialog*)GetWindowLongPtr(hdlg, GWLP_USERDATA);

View file

@ -4,32 +4,31 @@
class Dialog class Dialog
{ {
public:
Dialog(LPCSTR res, HINSTANCE _hInstance, HWND _hParent);
virtual ~Dialog();
virtual void Show(bool _bShow);
virtual void Update() {}
HWND GetDlgHandle() {
return m_hDlg;
}
protected: protected:
HINSTANCE m_hInstance; virtual void Create();
void Destroy();
HWND m_hParent; HWND m_hParent;
HWND m_hDlg; HWND m_hDlg;
LPCSTR m_hResource; LPCSTR m_hResource;
bool m_bValid; bool m_bValid;
UINT m_bShowState = SW_HIDE;
virtual BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam) virtual BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam) = 0;
{
MessageBox(0,L"WTF? Pure Call",0,0);
return 0;
}
static INT_PTR CALLBACK DlgProcStatic(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK DlgProcStatic(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
virtual void Create();
void Destroy();
public:
Dialog(LPCSTR res, HINSTANCE _hInstance, HWND _hParent);
virtual ~Dialog();
void Show(bool _bShow);
virtual void Update() {} private:
HINSTANCE m_hInstance;
HWND GetDlgHandle()
{
return m_hDlg;
}
}; };