Slight performance improvement when seeking and fix graph load issue

This commit is contained in:
Hugo Teso 2017-04-11 13:41:44 +02:00
parent 85d5b2e14c
commit e8a48a4a86
6 changed files with 64 additions and 24 deletions

@ -1 +1 @@
Subproject commit afccf1907acc8c0e2b6ff2071199de69d8ecf565
Subproject commit 48dbae99de86c1b798f46c1ccdbe13312301a4ad

@ -1 +1 @@
Subproject commit 12b7916db311f37c8c55a91c5683c42eafe3a7be
Subproject commit 99c0151a2d9dbff70ba0a6aa46ddec2e523c8f65

View File

@ -58,6 +58,7 @@ MainWindow::MainWindow(QWidget *parent, QRCore *kore) :
ui->setupUi(this);
doLock = false;
this->current_address = "entry0";
registerCustomFonts();
@ -881,8 +882,10 @@ void MainWindow::seek(const QString &offset, const QString &name)
{
if (offset.length() == 0)
return;
if (name != NULL)
if (name != NULL) {
this->memoryDock->setWindowTitle(name);
this->current_address = name;
}
this->hexdumpTopOffset = 0;
this->hexdumpBottomOffset = 0;
core->seek(offset);
@ -907,9 +910,12 @@ void MainWindow::refreshMem(QString off)
{
//add_debug_output("Refreshing to: " + off);
//graphicsBar->refreshColorBar();
/*
this->memoryDock->refreshDisasm(off);
this->memoryDock->refreshHexdump(off);
this->memoryDock->create_graph(off);
*/
this->memoryDock->updateViews();
this->memoryDock->get_refs_data(off);
this->memoryDock->setFcnName(off);
}

View File

@ -56,6 +56,7 @@ public:
SideBar *sideBar;
bool responsive;
QString current_address;
explicit MainWindow(QWidget *parent = 0, QRCore *kore = nullptr);
~MainWindow();

View File

@ -35,6 +35,9 @@ MemoryWidget::MemoryWidget(MainWindow *main) :
this->memTabWidget = ui->memTabWidget;
this->last_fcn = "entry0";
this->last_disasm_fcn = "entry0";
this->last_graph_fcn = "entry0";
this->last_hexdump_fcn = "entry0";
// Increase asm text edit margin
QTextDocument *asm_docu = this->disasTextEdit->document();
@ -483,6 +486,7 @@ void MemoryWidget::refreshDisasm(const QString &offset)
// Prevent further scroll
disconnect(this->disasTextEdit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(disasmScrolled()));
disconnect(this->disasTextEdit, SIGNAL(cursorPositionChanged()), this, SLOT(on_disasTextEdit_2_cursorPositionChanged()));
// Get disas at offset
if (!offset.isEmpty())
@ -522,24 +526,7 @@ void MemoryWidget::refreshDisasm(const QString &offset)
}
connect(this->disasTextEdit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(disasmScrolled()));
// Gett ALL disasm, dissabled
/*
int size;
QString txt;
size = main->core->get_size();
QList<QList<QString>> sections = main->core->get_exec_sections();
foreach (QList<QString> section, sections) {
// TODO: Remove later this check and add all sections
if (section[2].contains(".text")) {
this->main->core->cmd("s section." + section[2]);
this->main->core->cmd("b " + section[1]);
txt.append( this->main->core->cmd("pD") );
}
}
*/
connect(this->disasTextEdit, SIGNAL(cursorPositionChanged()), this, SLOT(on_disasTextEdit_2_cursorPositionChanged()));
}
void MemoryWidget::refreshHexdump(QString where)
@ -1524,7 +1511,7 @@ void MemoryWidget::create_graph(QString off)
QString fcn = this->main->core->cmdFunctionAt(off);
//this->main->add_debug_output("Graph Fcn: " + fcn);
ui->graphWebView->load(QUrl("qrc:/graph/html/graph/index.html#" + off));
ui->graphWebView->setUrl(QUrl("qrc:/graph/html/graph/index.html#" + off));
QString port = this->main->core->config("http.port");
ui->graphWebView->page()->mainFrame()->evaluateJavaScript(QString("r2.root=\"http://localhost:" + port + "\""));
@ -1612,8 +1599,9 @@ void MemoryWidget::on_disasTextEdit_2_cursorPositionChanged()
ui->fcnNameEdit->setText(at);
this->main->memoryDock->setWindowTitle(at);
this->main->memoryDock->get_refs_data(ele);
this->main->memoryDock->create_graph(ele);
//this->main->memoryDock->create_graph(ele);
this->setMiniGraph(at);
this->main->current_address = at;
}
}
}
@ -1766,7 +1754,7 @@ bool MemoryWidget::eventFilter(QObject *obj, QEvent *event)
if ((obj == ui->disasTextEdit_2 || obj == ui->disasTextEdit_2->viewport()) && event->type() == QEvent::MouseButtonDblClick)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
qDebug()<<QString("Click location: (%1,%2)").arg(mouseEvent->x()).arg(mouseEvent->y());
//qDebug()<<QString("Click location: (%1,%2)").arg(mouseEvent->x()).arg(mouseEvent->y());
QTextCursor cursor = ui->disasTextEdit_2->cursorForPosition(QPoint(mouseEvent->x(), mouseEvent->y()));
cursor.select(QTextCursor::LineUnderCursor);
QString lastline = cursor.selectedText();
@ -1937,3 +1925,42 @@ void MemoryWidget::frameLoadFinished(bool ok)
}
}
}
void MemoryWidget::on_memTabWidget_currentChanged(int index)
{
/*
this->main->add_debug_output("Update index: " + QString::number(index) + " to function: " + this->main->current_address);
this->main->add_debug_output("Last disasm: " + this->last_disasm_fcn);
this->main->add_debug_output("Last graph: " + this->last_graph_fcn);
this->main->add_debug_output("Last hexdump: " + this->last_hexdump_fcn);
*/
this->updateViews();
}
void MemoryWidget::updateViews() {
// Update only the selected view to improve performance
int index = ui->memTabWidget->tabBar()->currentIndex();
if (index == 0) {
// Disasm
if (this->last_disasm_fcn != this->main->current_address) {
//this->main->add_debug_output("Doing disasm");
this->refreshDisasm(this->main->current_address);
this->last_disasm_fcn = this->main->current_address;
}
} else if (index == 1) {
// Hex
if (this->last_hexdump_fcn != this->main->current_address) {
//this->main->add_debug_output("Doing hex");
this->refreshHexdump(this->main->current_address);
this->last_hexdump_fcn = this->main->current_address;
}
} else if (index == 2) {
// Graph
if (this->last_graph_fcn != this->main->current_address) {
//this->main->add_debug_output("Doing graph");
this->create_graph(this->main->current_address);
this->last_graph_fcn = this->main->current_address;
}
}
}

View File

@ -87,6 +87,8 @@ public slots:
void frameLoadFinished(bool ok);
void updateViews();
protected:
void resizeEvent(QResizeEvent *event) override;
bool eventFilter(QObject *obj, QEvent *event) override;
@ -97,6 +99,9 @@ private:
ut64 hexdumpTopOffset;
ut64 hexdumpBottomOffset;
QString last_fcn;
QString last_disasm_fcn;
QString last_graph_fcn;
QString last_hexdump_fcn;
private slots:
void highlightCurrentLine();
@ -170,6 +175,7 @@ private slots:
void on_simpleGrapgToolButton_clicked();
void on_opcodeDescButton_clicked();
void seek_back();
void on_memTabWidget_currentChanged(int index);
};
#endif // MEMORYWIDGET_H