mirror of
https://github.com/jkriege2/JKQtPlotter.git
synced 2024-12-24 09:31:40 +08:00
NEW: Added CMake option JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT, which activates several runtime-measurement guards of type JKQTPAutoOutputTimer (output via qDebug())
This commit is contained in:
parent
b02db2eb93
commit
3fee9609fb
@ -25,6 +25,9 @@ endif()
|
||||
if(NOT DEFINED JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS)
|
||||
option(JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS "Build the library using precompiled headers to improve compile speed" ON)
|
||||
endif()
|
||||
if(NOT DEFINED JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT)
|
||||
option(JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT "Build the library to output extra timing information using Debug()" OFF)
|
||||
endif()
|
||||
if(NOT DEFINED JKQtPlotter_ENABLED_CXX20)
|
||||
option(JKQtPlotter_ENABLED_CXX20 "Build the library using C++20" OFF)
|
||||
endif()
|
||||
|
@ -24,11 +24,21 @@ if(JKQtPlotter_BUILD_INCLUDE_XITS_FONTS)
|
||||
else()
|
||||
message( STATUS "XITS fonts: NOT AVAILABLE IN LIB" )
|
||||
endif(JKQtPlotter_BUILD_INCLUDE_XITS_FONTS)
|
||||
if(JKQtPlotter_BUILD_INCLUDE_FIRAMATH_FONTS)
|
||||
message( STATUS "FIRA fonts: LINKED IN" )
|
||||
else()
|
||||
message( STATUS "FIRA fonts: NOT AVAILABLE IN LIB" )
|
||||
endif(JKQtPlotter_BUILD_INCLUDE_FIRAMATH_FONTS)
|
||||
if(${JKQtPlotter_HAS_NO_PRINTER_SUPPORT})
|
||||
message( STATUS "Print support: OFF" )
|
||||
else()
|
||||
message( STATUS "Print support: ON" )
|
||||
endif()
|
||||
if(${JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT})
|
||||
message( STATUS "Timing Info output: OFF" )
|
||||
else()
|
||||
message( STATUS "Timing Info output: ON" )
|
||||
endif()
|
||||
if (JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS)
|
||||
message( STATUS "Precompiled Header: ON" )
|
||||
else()
|
||||
|
@ -81,6 +81,10 @@ function(JKQtCommon_setDefaultLibOptions TARGETNAME)
|
||||
target_compile_options(${TARGETNAME} PUBLIC /EHsc)
|
||||
target_compile_definitions(${TARGETNAME} PUBLIC NOMINMAX)
|
||||
endif()
|
||||
if(JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT)
|
||||
target_compile_definitions(${TARGETNAME} PRIVATE JKQTBP_AUTOTIMER)
|
||||
endif()
|
||||
|
||||
target_include_directories(${TARGETNAME} PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
|
@ -148,6 +148,9 @@ function(JKQtMathText_setDefaultLibOptions TARGETNAME)
|
||||
if(JKQtPlotter_BUILD_INCLUDE_FIRAMATH_FONTS)
|
||||
target_compile_definitions(${TARGETNAME} PRIVATE JKQTMATHTEXT_COMPILED_WITH_FIRAMATH)
|
||||
endif(JKQtPlotter_BUILD_INCLUDE_FIRAMATH_FONTS)
|
||||
if(JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT)
|
||||
target_compile_definitions(${TARGETNAME} PRIVATE JKQTBP_AUTOTIMER)
|
||||
endif()
|
||||
|
||||
# precomiled headers to speed up compilation
|
||||
if (JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS)
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "jkqtmathtext/nodes/jkqtmathtextnode.h"
|
||||
#include "jkqtcommon/jkqtpcodestructuring.h"
|
||||
#include "jkqtcommon/jkqtpstringtools.h"
|
||||
#include "jkqtcommon/jkqtpdebuggingtools.h"
|
||||
#include "jkqtmathtext/nodes/jkqtmathtextnodetools.h"
|
||||
#include "jkqtmathtext/nodes/jkqtmathtexttextnode.h"
|
||||
#include "jkqtmathtext/nodes/jkqtmathtextbracenode.h"
|
||||
@ -297,6 +298,9 @@ void JKQTMathText::saveSettings(QSettings& settings, const QString& group) const
|
||||
|
||||
bool JKQTMathText::parse(const QString &markup, DefaultParserTypes markupType, ParseOptions options)
|
||||
{
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::parse('%2')").arg(objectName()).arg(markup));
|
||||
#endif
|
||||
if (markupType==LatexParser) return parse<JKQTMathTextLatexParser>(markup, options);
|
||||
return false;
|
||||
}
|
||||
@ -1250,6 +1254,9 @@ void JKQTMathText::modifyEnvironmentFromFontSettings(JKQTMathTextEnvironment &ev
|
||||
|
||||
JKQTMathTextNodeSize JKQTMathText::getSizeDetail(QPainter &painter)
|
||||
{
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::getSizeDetail()").arg(objectName()));
|
||||
#endif
|
||||
JKQTMathTextNodeSize s;
|
||||
if (getNodeTree()!=nullptr) {
|
||||
JKQTMathTextEnvironment ev;
|
||||
@ -1265,6 +1272,9 @@ void JKQTMathText::draw(QPainter &painter, QPointF x, bool drawBoxes)
|
||||
}
|
||||
|
||||
double JKQTMathText::draw(QPainter& painter, double x, double y, bool drawBoxes){
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::draw(x,y)").arg(objectName()));
|
||||
#endif
|
||||
if (getNodeTree()!=nullptr) {
|
||||
painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();});
|
||||
painter.setPen(fontColor);
|
||||
@ -1279,6 +1289,9 @@ double JKQTMathText::draw(QPainter& painter, double x, double y, bool drawBoxes)
|
||||
}
|
||||
|
||||
void JKQTMathText::draw(QPainter& painter, unsigned int flags, QRectF rect, bool drawBoxes) {
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::draw(rect)").arg(objectName()));
|
||||
#endif
|
||||
if (getNodeTree()!=nullptr) {
|
||||
painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();});
|
||||
painter.setPen(fontColor);
|
||||
@ -1309,6 +1322,9 @@ void JKQTMathText::draw(QPainter& painter, unsigned int flags, QRectF rect, bool
|
||||
|
||||
QPixmap JKQTMathText::drawIntoPixmap(bool drawBoxes, QColor backgroundColor, int sizeincrease, qreal devicePixelRatio)
|
||||
{
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::drawIntoPixmap()").arg(objectName()));
|
||||
#endif
|
||||
// 1. generate dummy QPixmap that is needed to use a QPainter
|
||||
// we need the dummy, because we first need to determine the size of the render output
|
||||
// for which we need a QPainter.
|
||||
@ -1351,6 +1367,9 @@ QPixmap JKQTMathText::drawIntoPixmap(bool drawBoxes, QColor backgroundColor, int
|
||||
|
||||
QImage JKQTMathText::drawIntoImage(bool drawBoxes, QColor backgroundColor, int sizeincrease, qreal devicePixelRatio, unsigned int resolution_dpi)
|
||||
{
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::drawIntoImage()").arg(objectName()));
|
||||
#endif
|
||||
// 1. generate dummy QPixmap that is needed to use a QPainter
|
||||
// we need the dummy, because we first need to determine the size of the render output
|
||||
// for which we need a QPainter.
|
||||
@ -1397,6 +1416,9 @@ QImage JKQTMathText::drawIntoImage(bool drawBoxes, QColor backgroundColor, int s
|
||||
|
||||
QPicture JKQTMathText::drawIntoPicture(bool drawBoxes)
|
||||
{
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTMathText[%1]::drawIntoPicture()").arg(objectName()));
|
||||
#endif
|
||||
// 1. generate dummy QPixmap that is needed to use a QPainter
|
||||
// we need the dummy, because we first need to determine the size of the render output
|
||||
// for which we need a QPainter.
|
||||
|
@ -208,7 +208,9 @@ function(JKQtPlottter_setDefaultLibOptions TARGETNAME)
|
||||
set_property(TARGET ${TARGETNAME} PROPERTY CXX_STANDARD ${JKQtPlotter_QT_CXX_STANDARD})
|
||||
set_property(TARGET ${TARGETNAME} PROPERTY CXX_STANDARD_REQUIRED ${JKQtPlotter_QT_CXX_STANDARD_REQUIRED})
|
||||
target_compile_features(${TARGETNAME} PUBLIC ${JKQtPlotter_QT_CXX_COMPILE_FEATURE})
|
||||
#target_compile_definitions(${TARGETNAME} PRIVATE JKQTBP_AUTOTIMER)
|
||||
if(JKQtPlotter_BUILD_WITH_TIMING_INFO_OUTPUT)
|
||||
target_compile_definitions(${TARGETNAME} PRIVATE JKQTBP_AUTOTIMER)
|
||||
endif()
|
||||
|
||||
if(MINGW)
|
||||
# COMPILER-SETTINGS FOR MINGW
|
||||
|
@ -127,8 +127,13 @@ JKQTMathTextNodeSize JKQTBasePlotter::getTextSizeDetail(const QFont &fm, const Q
|
||||
|
||||
JKQTMathTextNodeSize JKQTBasePlotter::getTextSizeDetail(const QString &fontName, double fontSize, const QString &text, QPainter& painter)
|
||||
{
|
||||
thread_local QHash<JKQTBasePlotter::textSizeKey, JKQTMathTextNodeSize> s_TextSizeDataCache;
|
||||
JKQTBasePlotter::textSizeKey dh(fontName, fontSize, text, painter.device());
|
||||
static QReadWriteLock s_TextSizeLock;
|
||||
thread_local QHash<JKQTBasePlotter::textSizeKey, JKQTMathTextNodeSize> s_TextSizeDataCache;
|
||||
QReadLocker lockR(&s_TextSizeLock);
|
||||
if (s_TextSizeDataCache.contains(dh)) return s_TextSizeDataCache[dh];
|
||||
lockR.unlock();
|
||||
QWriteLocker lockW(&s_TextSizeLock);
|
||||
if (s_TextSizeDataCache.contains(dh)) return s_TextSizeDataCache[dh];
|
||||
mathText.setFontSpecial(fontName);
|
||||
mathText.setFontSize(fontSize);
|
||||
@ -863,6 +868,9 @@ void JKQTBasePlotter::calcPlotScaling(JKQTPEnhancedPainter& painter){
|
||||
// this needs to be done twice, as the kay size calculation needs the internalPlotWidth and internalPlotHeight
|
||||
// for a second step
|
||||
for (int i=0; i<2; i++) {
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTBasePlotter[%1]::calcPlotScaling()::iteration%2").arg(objectName()).arg(i+1));
|
||||
#endif
|
||||
|
||||
internalPlotMargins[PlotMarginUse::muKey]=PlotMargin();
|
||||
switch(internalPlotKeyDescription.keyLocation) {
|
||||
@ -1252,7 +1260,7 @@ void JKQTBasePlotter::drawPlotLabel(JKQTPEnhancedPainter& painter) {
|
||||
|
||||
void JKQTBasePlotter::drawPlot(JKQTPEnhancedPainter& painter) {
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaaot("JKQTBasePlotter::paintPlot");
|
||||
JKQTPAutoOutputTimer jkaaot("JKQTBasePlotter::drawPlot()");
|
||||
#endif
|
||||
|
||||
#if QT_VERSION<QT_VERSION_CHECK(6,0,0)
|
||||
@ -3752,9 +3760,11 @@ bool JKQTBasePlotter::saveAsPixelImage(const QString& filename, bool displayPrev
|
||||
}
|
||||
|
||||
if (!displayPreview || exportpreview(gridPrintingSize, false)) {
|
||||
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
QImage png(QSizeF(double(printSizeX_Millimeter)+outputSizeIncrease.width(), double(printSizeY_Millimeter)+outputSizeIncrease.height()).toSize(), QImage::Format_ARGB32);
|
||||
png.fill(Qt::transparent);
|
||||
const double durPrepImage=timer.nsecsElapsed();
|
||||
{
|
||||
JKQTPEnhancedPainter painter;
|
||||
painter.begin(&png);
|
||||
@ -3772,8 +3782,14 @@ bool JKQTBasePlotter::saveAsPixelImage(const QString& filename, bool displayPrev
|
||||
exportpreviewPaintRequested(painter, QSize(jkqtp_roundTo<int>(printSizeX_Millimeter), jkqtp_roundTo<int>(printSizeY_Millimeter)));
|
||||
painter.end();
|
||||
}
|
||||
if (form=="NONE") return png.save(fn);
|
||||
else return png.save(fn, form.toLatin1().data());
|
||||
const double durPlot=timer.nsecsElapsed()-durPrepImage;
|
||||
bool res=false;
|
||||
if (form=="NONE") res= png.save(fn);
|
||||
else res= png.save(fn, form.toLatin1().data());
|
||||
const double durAll=timer.nsecsElapsed();
|
||||
const double durSave=durAll-durPlot;
|
||||
qDebug()<<"durPrepImage="<<durPrepImage/1e6<<"ms, durPlot="<<durPlot/1e6<<"ms, durSave="<<durSave/1e6<<"ms, durAll="<<durAll/1e6<<"ms";
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -542,7 +542,7 @@ int JKQTPCoordinateAxis::calcLinearUnitDigits() {
|
||||
|
||||
void JKQTPCoordinateAxis::calcPlotScaling(bool force) {
|
||||
#ifdef JKQTBP_AUTOTIMER
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTBasePlotter[%1]::calcPlotScaling()").arg(objectName()));
|
||||
JKQTPAutoOutputTimer jkaat(QString("JKQTPCoordinateAxis[%1]::calcPlotScaling()").arg(objectName()));
|
||||
#endif
|
||||
if (!doUpdateScaling) return;
|
||||
if (!force && !paramsChanged) return;
|
||||
|
Loading…
Reference in New Issue
Block a user