mirror of
https://github.com/yse/easy_profiler.git
synced 2024-12-27 08:41:02 +08:00
Merge branch 'develop' of https://github.com/yse/easy_profiler into develop
This commit is contained in:
commit
c28b720c71
@ -409,7 +409,8 @@ void ProfGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_painter->drawText(rect, 0, item.block->node->getBlockName());
|
|
||||||
|
_painter->drawText(rect, 0, ::profiler_gui::toUnicode(item.block->node->getBlockName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore previous pen color
|
// restore previous pen color
|
||||||
@ -434,7 +435,7 @@ void ProfGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
|
|||||||
pen.setWidth(2);
|
pen.setWidth(2);
|
||||||
_painter->setPen(pen);
|
_painter->setPen(pen);
|
||||||
|
|
||||||
brush.setColor(previousColor);
|
brush.setColor(previousColor);
|
||||||
_painter->setBrush(brush);
|
_painter->setBrush(brush);
|
||||||
|
|
||||||
rect.setRect(item.left() * currentScale - dx, item.top(), ::std::max(item.width() * currentScale, 1.0), item.totalHeight);
|
rect.setRect(item.left() * currentScale - dx, item.top(), ::std::max(item.width() * currentScale, 1.0), item.totalHeight);
|
||||||
@ -446,6 +447,11 @@ void ProfGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
|
|||||||
_painter->restore();
|
_painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QRect ProfGraphicsItem::getRect() const
|
||||||
|
{
|
||||||
|
return view()->mapFromScene(m_boundingRect).boundingRect();
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void ProfGraphicsItem::getBlocks(qreal _left, qreal _right, ::profiler_gui::TreeBlocks& _blocks) const
|
void ProfGraphicsItem::getBlocks(qreal _left, qreal _right, ::profiler_gui::TreeBlocks& _blocks) const
|
||||||
@ -1225,6 +1231,11 @@ void ProfGraphicsView::setTree(const ::profiler::thread_blocks_tree_t& _blocksTr
|
|||||||
scaleTo(BASE_SCALE);
|
scaleTo(BASE_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ProfGraphicsView::Items &ProfGraphicsView::getItems() const
|
||||||
|
{
|
||||||
|
return m_items;
|
||||||
|
}
|
||||||
|
|
||||||
qreal ProfGraphicsView::setTree(ProfGraphicsItem* _item, const ::profiler::BlocksTree::children_t& _children, qreal& _height, qreal _y, unsigned short _level)
|
qreal ProfGraphicsView::setTree(ProfGraphicsItem* _item, const ::profiler::BlocksTree::children_t& _children, qreal& _height, qreal _y, unsigned short _level)
|
||||||
{
|
{
|
||||||
static const qreal MIN_DURATION = 0.25;
|
static const qreal MIN_DURATION = 0.25;
|
||||||
@ -1814,26 +1825,29 @@ ProfGraphicsViewWidget::ProfGraphicsViewWidget(bool _test)
|
|||||||
: QWidget(nullptr)
|
: QWidget(nullptr)
|
||||||
, m_scrollbar(new ProfGraphicsScrollbar(nullptr))
|
, m_scrollbar(new ProfGraphicsScrollbar(nullptr))
|
||||||
, m_view(new ProfGraphicsView(_test))
|
, m_view(new ProfGraphicsView(_test))
|
||||||
|
//, m_threadWidget(new ProfThreadViewWidget(this,m_view))
|
||||||
{
|
{
|
||||||
auto lay = new QVBoxLayout(this);
|
initWidget();
|
||||||
lay->setContentsMargins(1, 0, 1, 0);
|
|
||||||
lay->addWidget(m_view);
|
|
||||||
lay->setSpacing(1);
|
|
||||||
lay->addWidget(m_scrollbar);
|
|
||||||
setLayout(lay);
|
|
||||||
m_view->setScrollbar(m_scrollbar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ProfGraphicsViewWidget::ProfGraphicsViewWidget(const ::profiler::thread_blocks_tree_t& _blocksTree)
|
ProfGraphicsViewWidget::ProfGraphicsViewWidget(const ::profiler::thread_blocks_tree_t& _blocksTree)
|
||||||
: QWidget(nullptr)
|
: QWidget(nullptr)
|
||||||
, m_scrollbar(new ProfGraphicsScrollbar(nullptr))
|
, m_scrollbar(new ProfGraphicsScrollbar(nullptr))
|
||||||
, m_view(new ProfGraphicsView(_blocksTree))
|
, m_view(new ProfGraphicsView(_blocksTree))
|
||||||
|
//, m_threadWidget(new ProfThreadViewWidget(this,m_view))
|
||||||
{
|
{
|
||||||
auto lay = new QVBoxLayout(this);
|
initWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfGraphicsViewWidget::initWidget()
|
||||||
|
{
|
||||||
|
auto lay = new QGridLayout(this);
|
||||||
lay->setContentsMargins(1, 0, 1, 0);
|
lay->setContentsMargins(1, 0, 1, 0);
|
||||||
lay->addWidget(m_view);
|
lay->addWidget(m_view,0,1);
|
||||||
lay->setSpacing(1);
|
lay->setSpacing(1);
|
||||||
lay->addWidget(m_scrollbar);
|
lay->addWidget(m_scrollbar,1,1);
|
||||||
|
//lay->setSpacing(1);
|
||||||
|
//lay->addWidget(m_threadWidget,0,0);
|
||||||
setLayout(lay);
|
setLayout(lay);
|
||||||
m_view->setScrollbar(m_scrollbar);
|
m_view->setScrollbar(m_scrollbar);
|
||||||
}
|
}
|
||||||
@ -1850,3 +1864,48 @@ ProfGraphicsView* ProfGraphicsViewWidget::view()
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
ProfThreadViewWidget::ProfThreadViewWidget(QWidget *parent, ProfGraphicsView* view):QWidget(parent),
|
||||||
|
m_view(view)
|
||||||
|
, m_label(new QLabel("",this))
|
||||||
|
{
|
||||||
|
m_layout = new QHBoxLayout;
|
||||||
|
//QPushButton *button1 = new QPushButton();
|
||||||
|
|
||||||
|
//m_layout->addWidget(m_label);
|
||||||
|
//setLayout(m_layout);
|
||||||
|
//show();
|
||||||
|
connect(&::profiler_gui::EASY_GLOBALS.events, &::profiler_gui::ProfGlobalSignals::selectedThreadChanged, this, &This::onSelectedThreadChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfThreadViewWidget::~ProfThreadViewWidget()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfThreadViewWidget::onSelectedThreadChange()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
auto threadName = ::profiler_gui::EASY_GLOBALS.profiler_blocks[::profiler_gui::EASY_GLOBALS.selected_thread].thread_name;
|
||||||
|
if(threadName[0]!=0)
|
||||||
|
{
|
||||||
|
m_label->setText(threadName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_label->setText(QString("Thread %1").arg(::profiler_gui::EASY_GLOBALS.selected_thread));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
QLayoutItem *ditem;
|
||||||
|
while ((ditem = m_layout->takeAt(0)))
|
||||||
|
delete ditem;
|
||||||
|
|
||||||
|
const auto& items = m_view->getItems();
|
||||||
|
for(const auto& item: items)
|
||||||
|
{
|
||||||
|
m_layout->addWidget(new QLabel(QString("Thread %1").arg(item->threadId())));
|
||||||
|
m_layout->setSpacing(1);
|
||||||
|
}
|
||||||
|
setLayout(m_layout);
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QPoint>
|
#include <QPoint>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QLayout>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "graphics_scrollbar.h"
|
#include "graphics_scrollbar.h"
|
||||||
#include "profiler/reader.h"
|
#include "profiler/reader.h"
|
||||||
@ -64,12 +66,15 @@ public:
|
|||||||
// Public virtual methods
|
// Public virtual methods
|
||||||
|
|
||||||
QRectF boundingRect() const override;
|
QRectF boundingRect() const override;
|
||||||
|
|
||||||
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
void paint(QPainter* _painter, const QStyleOptionGraphicsItem* _option, QWidget* _widget = nullptr) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Public non-virtual methods
|
// Public non-virtual methods
|
||||||
|
|
||||||
|
QRect getRect() const;
|
||||||
|
|
||||||
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
void setBoundingRect(qreal x, qreal y, qreal w, qreal h);
|
||||||
void setBoundingRect(const QRectF& _rect);
|
void setBoundingRect(const QRectF& _rect);
|
||||||
|
|
||||||
@ -263,6 +268,8 @@ public:
|
|||||||
void test(unsigned int _frames_number, unsigned int _total_items_number_estimate, int _rows);
|
void test(unsigned int _frames_number, unsigned int _total_items_number_estimate, int _rows);
|
||||||
void setTree(const ::profiler::thread_blocks_tree_t& _blocksTree);
|
void setTree(const ::profiler::thread_blocks_tree_t& _blocksTree);
|
||||||
|
|
||||||
|
const Items& getItems() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
// Signals
|
// Signals
|
||||||
@ -341,6 +348,24 @@ private:
|
|||||||
|
|
||||||
}; // END of class ProfGraphicsView.
|
}; // END of class ProfGraphicsView.
|
||||||
|
|
||||||
|
class ProfThreadViewWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
ProfGraphicsView* m_view;
|
||||||
|
QLabel* m_label;
|
||||||
|
typedef ProfThreadViewWidget This;
|
||||||
|
|
||||||
|
QHBoxLayout *m_layout;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ProfThreadViewWidget(QWidget *parent, ProfGraphicsView* view);
|
||||||
|
virtual ~ProfThreadViewWidget();
|
||||||
|
public slots:
|
||||||
|
void onSelectedThreadChange();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class ProfGraphicsViewWidget : public QWidget
|
class ProfGraphicsViewWidget : public QWidget
|
||||||
@ -351,6 +376,7 @@ private:
|
|||||||
|
|
||||||
ProfGraphicsView* m_view;
|
ProfGraphicsView* m_view;
|
||||||
ProfGraphicsScrollbar* m_scrollbar;
|
ProfGraphicsScrollbar* m_scrollbar;
|
||||||
|
//ProfThreadViewWidget* m_threadWidget;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -362,8 +388,11 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void initWidget();
|
||||||
|
|
||||||
}; // END of class ProfGraphicsViewWidget.
|
}; // END of class ProfGraphicsViewWidget.
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -522,11 +522,7 @@ size_t ProfTreeWidget::setTreeInternal(const ::profiler_gui::TreeBlocks& _blocks
|
|||||||
auto item = new ProfTreeWidgetItem(block.tree, thread_item);
|
auto item = new ProfTreeWidgetItem(block.tree, thread_item);
|
||||||
duration = endTime - startTime;
|
duration = endTime - startTime;
|
||||||
|
|
||||||
/*QByteArray msg(block.tree->node->getBlockName());
|
item->setText(COL_NAME, ::profiler_gui::toUnicode(block.tree->node->getBlockName()));
|
||||||
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
|
|
||||||
QString strf = codec->toUnicode(msg);
|
|
||||||
*/
|
|
||||||
item->setText(COL_NAME, block.tree->node->getBlockName());
|
|
||||||
item->setTimeSmart(COL_DURATION, duration);
|
item->setTimeSmart(COL_DURATION, duration);
|
||||||
item->setTimeMs(COL_BEGIN, startTime - m_beginTime);
|
item->setTimeMs(COL_BEGIN, startTime - m_beginTime);
|
||||||
item->setTimeMs(COL_END, endTime - m_beginTime);
|
item->setTimeMs(COL_END, endTime - m_beginTime);
|
||||||
@ -672,12 +668,8 @@ size_t ProfTreeWidget::setTreeInternal(const ::profiler::BlocksTree::children_t&
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*QByteArray msg(child.node->getBlockName());
|
|
||||||
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
|
|
||||||
QString strf = codec->toUnicode(msg);*/
|
|
||||||
|
|
||||||
auto item = new ProfTreeWidgetItem(&child, _parent);
|
auto item = new ProfTreeWidgetItem(&child, _parent);
|
||||||
item->setText(COL_NAME, child.node->getBlockName());
|
item->setText(COL_NAME, ::profiler_gui::toUnicode(child.node->getBlockName()));
|
||||||
item->setTimeSmart(COL_DURATION, duration);
|
item->setTimeSmart(COL_DURATION, duration);
|
||||||
item->setTimeMs(COL_BEGIN, startTime - m_beginTime);
|
item->setTimeMs(COL_BEGIN, startTime - m_beginTime);
|
||||||
item->setTimeMs(COL_END, endTime - m_beginTime);
|
item->setTimeMs(COL_END, endTime - m_beginTime);
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
|
#include <QTextCodec>
|
||||||
#include "common_types.h"
|
#include "common_types.h"
|
||||||
#include "globals_qobjects.h"
|
#include "globals_qobjects.h"
|
||||||
|
|
||||||
@ -56,6 +57,12 @@ namespace profiler_gui {
|
|||||||
|
|
||||||
typedef ::std::vector<ProfBlock> ProfBlocks;
|
typedef ::std::vector<ProfBlock> ProfBlocks;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
inline QString toUnicode(const T& _inputString)
|
||||||
|
{
|
||||||
|
return QTextCodec::codecForLocale()->toUnicode(_inputString);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
struct ProfGlobals final
|
struct ProfGlobals final
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include "blocks_tree_widget.h"
|
#include "blocks_tree_widget.h"
|
||||||
#include "blocks_graphics_view.h"
|
#include "blocks_graphics_view.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
#include <QTextCodec>
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ProfMainWindow::ProfMainWindow() : QMainWindow(), m_treeWidget(nullptr), m_graphicsView(nullptr)
|
ProfMainWindow::ProfMainWindow() : QMainWindow(), m_treeWidget(nullptr), m_graphicsView(nullptr)
|
||||||
@ -84,6 +84,40 @@ ProfMainWindow::ProfMainWindow() : QMainWindow(), m_treeWidget(nullptr), m_graph
|
|||||||
menu->addAction(actionTestView);
|
menu->addAction(actionTestView);
|
||||||
menuBar()->addMenu(menu);
|
menuBar()->addMenu(menu);
|
||||||
|
|
||||||
|
|
||||||
|
QSettings settings(::profiler_gui::ORGANAZATION_NAME, ::profiler_gui::APPLICATION_NAME);
|
||||||
|
settings.beginGroup("main");
|
||||||
|
|
||||||
|
QString encoding = settings.value("encoding","UTF-8").toString();
|
||||||
|
|
||||||
|
auto default_codec_mib = QTextCodec::codecForName(encoding.toStdString().c_str())->mibEnum() ;
|
||||||
|
auto default_codec = QTextCodec::codecForMib(default_codec_mib);
|
||||||
|
QTextCodec::setCodecForLocale(default_codec);
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
menu = new QMenu("Settings");
|
||||||
|
auto encodingMenu = menu->addMenu(tr("&Encoding"));
|
||||||
|
|
||||||
|
QActionGroup* codecs_actions = new QActionGroup(this);
|
||||||
|
codecs_actions->setExclusive(true);
|
||||||
|
foreach (int mib, QTextCodec::availableMibs())
|
||||||
|
{
|
||||||
|
auto codec = QTextCodec::codecForMib(mib)->name();
|
||||||
|
|
||||||
|
QAction* action = new QAction(codec,codecs_actions);
|
||||||
|
|
||||||
|
action->setCheckable(true);
|
||||||
|
if(mib == default_codec_mib)
|
||||||
|
{
|
||||||
|
action->setChecked(true);
|
||||||
|
}
|
||||||
|
encodingMenu->addAction(action);
|
||||||
|
connect(action, &QAction::triggered, this, &This::onEncodingChanged);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
menuBar()->addMenu(menu);
|
||||||
|
|
||||||
connect(graphicsView->view(), &ProfGraphicsView::intervalChanged, treeWidget, &ProfTreeWidget::setTreeBlocks);
|
connect(graphicsView->view(), &ProfGraphicsView::intervalChanged, treeWidget, &ProfTreeWidget::setTreeBlocks);
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
@ -179,6 +213,14 @@ void ProfMainWindow::onTestViewportClicked(bool)
|
|||||||
//view->test(3, 300, 1);
|
//view->test(3, 300, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProfMainWindow::onEncodingChanged(bool)
|
||||||
|
{
|
||||||
|
auto _sender = qobject_cast<QAction*>(sender());
|
||||||
|
auto name = _sender->text();
|
||||||
|
QTextCodec *codec = QTextCodec::codecForName(name.toStdString().c_str());
|
||||||
|
QTextCodec::setCodecForLocale(codec);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void ProfMainWindow::closeEvent(QCloseEvent* close_event)
|
void ProfMainWindow::closeEvent(QCloseEvent* close_event)
|
||||||
@ -216,6 +258,7 @@ void ProfMainWindow::saveSettings()
|
|||||||
|
|
||||||
settings.setValue("geometry", this->saveGeometry());
|
settings.setValue("geometry", this->saveGeometry());
|
||||||
settings.setValue("last_file", m_lastFile.c_str());
|
settings.setValue("last_file", m_lastFile.c_str());
|
||||||
|
settings.setValue("encoding", QTextCodec::codecForLocale()->name());
|
||||||
|
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ protected slots:
|
|||||||
void onReloadFileClicked(bool);
|
void onReloadFileClicked(bool);
|
||||||
void onExitClicked(bool);
|
void onExitClicked(bool);
|
||||||
void onTestViewportClicked(bool);
|
void onTestViewportClicked(bool);
|
||||||
|
void onEncodingChanged(bool);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user