0
0
mirror of https://github.com/yse/easy_profiler.git synced 2024-12-27 08:41:02 +08:00

Moved QFonts into EASY_GLOBALS and deferred instantiation of EASY_GLOBAS

until after QApplication.
This commit is contained in:
Oliver Daniell 2017-08-10 09:12:33 +01:00
parent a1aa8fc2e1
commit f241444f1d
6 changed files with 30 additions and 41 deletions

View File

@ -100,9 +100,6 @@ const uint64_t IDLE_TIME = 400;
const int FLICKER_INTERVAL = 10; // 100Hz const int FLICKER_INTERVAL = 10; // 100Hz
const qreal FLICKER_FACTOR = 16.0 / FLICKER_INTERVAL; const qreal FLICKER_FACTOR = 16.0 / FLICKER_INTERVAL;
const auto BG_FONT = ::profiler_gui::EFont("Helvetica", 10, QFont::Bold);
const auto CHRONOMETER_FONT = ::profiler_gui::EFont("Helvetica", 16, QFont::Bold);
#ifdef max #ifdef max
#undef max #undef max
#endif #endif
@ -284,7 +281,7 @@ void EasyTimelineIndicatorItem::paint(QPainter* _painter, const QStyleOptionGrap
_painter->drawLine(QLineF(visibleSceneRect.width() - 10, visibleSceneRect.height() - 6, visibleSceneRect.width() - 10, visibleSceneRect.height() - 14)); _painter->drawLine(QLineF(visibleSceneRect.width() - 10, visibleSceneRect.height() - 6, visibleSceneRect.width() - 10, visibleSceneRect.height() - 14));
_painter->setPen(Qt::black); _painter->setPen(Qt::black);
_painter->setFont(BG_FONT); _painter->setFont(EASY_GLOBALS.bg_font);
_painter->drawText(QRectF(visibleSceneRect.width() - 10 - step, visibleSceneRect.height() - 63, step, 50), Qt::AlignRight | Qt::AlignBottom | Qt::TextDontClip, text); _painter->drawText(QRectF(visibleSceneRect.width() - 10 - step, visibleSceneRect.height() - 63, step, 50), Qt::AlignRight | Qt::AlignBottom | Qt::TextDontClip, text);
_painter->restore(); _painter->restore();
@ -2027,7 +2024,7 @@ void EasyThreadNameItem::paint(QPainter* _painter, const QStyleOptionGraphicsIte
// Draw thread names // Draw thread names
auto default_font = _painter->font(); auto default_font = _painter->font();
_painter->setFont(BG_FONT); _painter->setFont(EASY_GLOBALS.bg_font);
for (auto item : items) for (auto item : items)
{ {
++i; ++i;
@ -2082,8 +2079,8 @@ void EasyThreadNameItem::paint(QPainter* _painter, const QStyleOptionGraphicsIte
_painter->drawLine(QLineF(0, h + 2, w, h + 2)); _painter->drawLine(QLineF(0, h + 2, w, h + 2));
// Draw information // Draw information
_painter->setFont(CHRONOMETER_FONT); _painter->setFont(EASY_GLOBALS.chronometer_font);
QFontMetricsF fm(CHRONOMETER_FONT, parentView); QFontMetricsF fm(EASY_GLOBALS.chronometer_font, parentView);
const qreal th = fm.height(); // Calculate displayed text height const qreal th = fm.height(); // Calculate displayed text height
const qreal time1 = view->chronoTime(); const qreal time1 = view->chronoTime();
const qreal time2 = view->chronoTimeAux(); const qreal time2 = view->chronoTimeAux();
@ -2184,7 +2181,7 @@ void EasyThreadNamesWidget::onTreeChange()
m_idleTimer.stop(); m_idleTimer.stop();
m_idleTime = 0; m_idleTime = 0;
QFontMetricsF fm(BG_FONT, this); QFontMetricsF fm(EASY_GLOBALS.bg_font, this);
qreal maxLength = 100; qreal maxLength = 100;
const auto& graphicsItems = m_view->getItems(); const auto& graphicsItems = m_view->getItems();
for (auto graphicsItem : graphicsItems) for (auto graphicsItem : graphicsItems)

View File

@ -62,8 +62,6 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
const auto CHRONOMETER_FONT = ::profiler_gui::EFont("Helvetica", 16, QFont::Bold);
#ifdef max #ifdef max
#undef max #undef max
#endif #endif
@ -152,7 +150,7 @@ void EasyChronometerItem::paint(QPainter* _painter, const QStyleOptionGraphicsIt
selectedInterval = units2microseconds(selectedInterval); selectedInterval = units2microseconds(selectedInterval);
const QString text = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, selectedInterval); // Displayed text const QString text = ::profiler_gui::timeStringReal(EASY_GLOBALS.time_units, selectedInterval); // Displayed text
const auto textRect = QFontMetricsF(CHRONOMETER_FONT, sceneView).boundingRect(text); // Calculate displayed text boundingRect const auto textRect = QFontMetricsF(EASY_GLOBALS.chronometer_font, sceneView).boundingRect(text); // Calculate displayed text boundingRect
const auto rgb = m_color.rgb() & 0x00ffffff; const auto rgb = m_color.rgb() & 0x00ffffff;
@ -239,7 +237,7 @@ void EasyChronometerItem::paint(QPainter* _painter, const QStyleOptionGraphicsIt
_painter->setCompositionMode(QPainter::CompositionMode_Difference); // This lets the text to be visible on every background _painter->setCompositionMode(QPainter::CompositionMode_Difference); // This lets the text to be visible on every background
_painter->setRenderHint(QPainter::TextAntialiasing); _painter->setRenderHint(QPainter::TextAntialiasing);
_painter->setPen(0x00ffffff - rgb); _painter->setPen(0x00ffffff - rgb);
_painter->setFont(CHRONOMETER_FONT); _painter->setFont(EASY_GLOBALS.chronometer_font);
int textFlags = 0; int textFlags = 0;
switch (EASY_GLOBALS.chrono_text_position) switch (EASY_GLOBALS.chrono_text_position)

View File

@ -81,8 +81,6 @@ inline QRgb selectedItemBorderColor(::profiler::color_t _color) {
} }
const QPen HIGHLIGHTER_PEN = ([]() -> QPen { QPen p(::profiler::colors::Black); p.setStyle(Qt::DotLine); p.setWidth(2); return p; })(); const QPen HIGHLIGHTER_PEN = ([]() -> QPen { QPen p(::profiler::colors::Black); p.setStyle(Qt::DotLine); p.setWidth(2); return p; })();
const auto ITEMS_FONT = ::profiler_gui::EFont("Helvetica", 10, QFont::Medium);
const auto SELECTED_ITEM_FONT = ::profiler_gui::EFont("Helvetica", 10, QFont::Bold);
#ifdef max #ifdef max
#undef max #undef max
@ -418,7 +416,7 @@ void EasyGraphicsItem::paintChildren(const float _minWidth, const int _narrowSiz
_painter->setPen(p.textColor); _painter->setPen(p.textColor);
if (item.block == EASY_GLOBALS.selected_block) if (item.block == EASY_GLOBALS.selected_block)
_painter->setFont(SELECTED_ITEM_FONT); _painter->setFont(EASY_GLOBALS.selected_item_font);
// drawing text // drawing text
auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name(); auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name();
@ -436,7 +434,7 @@ void EasyGraphicsItem::paintChildren(const float _minWidth, const int _narrowSiz
// restore font // restore font
if (item.block == EASY_GLOBALS.selected_block) if (item.block == EASY_GLOBALS.selected_block)
_painter->setFont(ITEMS_FONT); _painter->setFont(EASY_GLOBALS.items_font);
// END Draw text~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // END Draw text~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (do_paint_children) if (do_paint_children)
@ -458,7 +456,7 @@ void EasyGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
EasyPainterInformation p(view()); EasyPainterInformation p(view());
_painter->save(); _painter->save();
_painter->setFont(ITEMS_FONT); _painter->setFont(EASY_GLOBALS.items_font);
// Reset indices of first visible item for each layer // Reset indices of first visible item for each layer
const auto levelsNumber = levels(); const auto levelsNumber = levels();
@ -837,7 +835,7 @@ void EasyGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
_painter->setPen(p.textColor); _painter->setPen(p.textColor);
if (item.block == EASY_GLOBALS.selected_block) if (item.block == EASY_GLOBALS.selected_block)
_painter->setFont(SELECTED_ITEM_FONT); _painter->setFont(EASY_GLOBALS.selected_item_font);
// drawing text // drawing text
auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name(); auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name();
@ -855,7 +853,7 @@ void EasyGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
// restore font // restore font
if (item.block == EASY_GLOBALS.selected_block) if (item.block == EASY_GLOBALS.selected_block)
_painter->setFont(ITEMS_FONT); _painter->setFont(EASY_GLOBALS.items_font);
// END Draw text~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // END Draw text~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ifdef EASY_GRAPHICS_ITEM_RECURSIVE_PAINT #ifdef EASY_GRAPHICS_ITEM_RECURSIVE_PAINT
@ -944,7 +942,7 @@ void EasyGraphicsItem::paint(QPainter* _painter, const QStyleOptionGraphicsItem*
p.textColor = ::profiler_gui::textColorForRgb(itemDesc.color());// SELECTED_ITEM_COLOR); p.textColor = ::profiler_gui::textColorForRgb(itemDesc.color());// SELECTED_ITEM_COLOR);
_painter->setPen(p.textColor); _painter->setPen(p.textColor);
_painter->setFont(SELECTED_ITEM_FONT); _painter->setFont(EASY_GLOBALS.selected_item_font);
// drawing text // drawing text
auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name(); auto name = *itemBlock.tree.node->name() != 0 ? itemBlock.tree.node->name() : itemDesc.name();

View File

@ -104,6 +104,10 @@ namespace profiler_gui {
, auto_adjust_histogram_height(true) , auto_adjust_histogram_height(true)
, display_only_frames_on_histogram(false) , display_only_frames_on_histogram(false)
, bind_scene_and_tree_expand_status(true) , bind_scene_and_tree_expand_status(true)
, bg_font(::profiler_gui::EFont("Helvetica", 10, QFont::Bold))
, chronometer_font(::profiler_gui::EFont("Helvetica", 16, QFont::Bold))
, items_font(::profiler_gui::EFont("Helvetica", 10, QFont::Medium))
, selected_item_font(::profiler_gui::EFont("Helvetica", 10, QFont::Medium))
{ {
} }

View File

@ -60,6 +60,7 @@
#include <QColor> #include <QColor>
#include <QTextCodec> #include <QTextCodec>
#include <QSize> #include <QSize>
#include <QFont>
#include "common_types.h" #include "common_types.h"
#include "globals_qobjects.h" #include "globals_qobjects.h"
@ -202,7 +203,10 @@ namespace profiler_gui {
bool display_only_frames_on_histogram; ///< Display only top-level blocks on histogram when drawing histogram by block id bool display_only_frames_on_histogram; ///< Display only top-level blocks on histogram when drawing histogram by block id
bool bind_scene_and_tree_expand_status; /** \brief If true then items on graphics scene and in the tree (blocks hierarchy) are binded on each other bool bind_scene_and_tree_expand_status; /** \brief If true then items on graphics scene and in the tree (blocks hierarchy) are binded on each other
so expanding/collapsing items on scene also expands/collapse items in the tree. */ so expanding/collapsing items on scene also expands/collapse items in the tree. */
QFont bg_font; ///< Font for blocks_graphics_view
QFont chronometer_font; ///< Font for easy_chronometer_item
QFont items_font; ///< Font for easy_graphics_item
QFont selected_item_font; ///< Font for easy_graphics_item
private: private:
EasyGlobals(); EasyGlobals();
@ -214,7 +218,7 @@ namespace profiler_gui {
} // END of namespace profiler_gui. } // END of namespace profiler_gui.
#ifndef IGNORE_GLOBALS_DECLARATION #ifndef IGNORE_GLOBALS_DECLARATION
static ::profiler_gui::EasyGlobals& EASY_GLOBALS = ::profiler_gui::EasyGlobals::instance(); #define EASY_GLOBALS ::profiler_gui::EasyGlobals::instance()
inline ::profiler_gui::EasyBlock& easyBlock(::profiler::block_index_t i) { inline ::profiler_gui::EasyBlock& easyBlock(::profiler::block_index_t i) {
return EASY_GLOBALS.gui_blocks[i]; return EASY_GLOBALS.gui_blocks[i];

View File

@ -50,8 +50,13 @@
#include <chrono> #include <chrono>
#include <QApplication> #include <QApplication>
#include <QFontDatabase>
#include <QImageReader>
#include <iostream>
#include <QtPlugin>
#include "main_window.h" #include "main_window.h"
#include "globals.h"
#include <easy/reader.h> #include <easy/reader.h>
@ -64,25 +69,8 @@ int main(int argc, char **argv)
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
//QFileSystemModel *model = new QFileSystemModel; //Instanciate easy globals after QApplication to allow creation of global fonts, and on the main thread to avoid data races
//model->setRootPath(QDir::currentPath()); EASY_GLOBALS;
// const char* filename = 0;
// if(argc > 1 && argv[1]){
// filename = argv[1];
// }else{
// return 255;
// }
// QFile file(filename);
// file.open(QIODevice::ReadOnly);
// TreeModel model(file.readAll());
// file.close();
// QTreeView *tree = new QTreeView();
// tree->setModel(&model);
//
// tree->show();
auto now = ::std::chrono::duration_cast<std::chrono::seconds>(::std::chrono::system_clock::now().time_since_epoch()).count() >> 1; auto now = ::std::chrono::duration_cast<std::chrono::seconds>(::std::chrono::system_clock::now().time_since_epoch()).count() >> 1;
srand((unsigned int)now); srand((unsigned int)now);