Fix lancelot PaintCommands for reuse

Some structures needed to be cleaned for the reuse to be safe.
Reusing it cuts down on the overhead in lancebench.

Also uniqueness of block names are now enforced, and the common pattern
of "end_block blockName" could now be parsed if not always commented
out by begin_block handling.

Change-Id: I0daf6445292383aaab9392550d0842e0a654ad27
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
bb10
Allan Sandfeld Jensen 2019-11-26 15:09:58 +01:00
parent 9feb20e581
commit 00c869a5c6
4 changed files with 42 additions and 33 deletions

View File

@ -230,9 +230,9 @@ void PaintCommands::staticInit()
"begin_block <blockName>",
"begin_block blockName");
DECL_PAINTCOMMAND("end_block", command_end_block,
"^end_block$",
"end_block",
"end_block");
"^end_block\\s*(\\w*)$",
"end_block [blockName]",
"end_block blockName");
DECL_PAINTCOMMAND("repeat_block", command_repeat_block,
"^repeat_block\\s+(\\w*)$",
"repeat_block <blockName>",
@ -744,6 +744,13 @@ void PaintCommands::runCommands()
if (height <= 0)
height = 800;
m_pathMap.clear();
m_imageMap.clear();
m_pixmapMap.clear();
m_regionMap.clear();
m_gradientStops.clear();
m_blockMap.clear();
// paint background
if (m_checkers_background) {
QPixmap pm(20, 20);
@ -901,6 +908,8 @@ void PaintCommands::command_begin_block(QRegularExpressionMatch re)
const QString &blockName = re.captured(1);
if (m_verboseMode)
printf(" -(lance) begin_block (%s)\n", qPrintable(blockName));
if (m_blockMap.contains(blockName))
qFatal("Two blocks named (%s)", qPrintable(blockName));
m_commands[m_currentCommandIndex] = QLatin1String("# begin block (") + blockName + QLatin1Char(')');
QStringList newBlock;

View File

@ -133,7 +133,7 @@ setPen nopen
translate 50 0
begin_block rects
begin_block rects2
drawPath rect
drawRect 0 20 10 10
drawImage img 0 40
@ -154,59 +154,59 @@ translate 10 20
rotate 90
drawRect 0 0 10 10
restore
end_block rects
end_block rects2
setPen red
drawText -5 -10 "0.0"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.1"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.2"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.3"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.4"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.5"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.6"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.7"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.8"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "0.9"
setPen nopen
translate 40 0.1
repeat_block rects
repeat_block rects2
setPen red
drawText -5 -10 "1.0"
setPen nopen
@ -410,4 +410,4 @@ drawText 0 0 "outline/fill consistency"
setPen red
setBrush green
translate 80 -30
drawPolygon [13.6965 -99.1837 -71.4767 13.823 32.4596 -33.1847]
drawPolygon [13.6965 -99.1837 -71.4767 13.823 32.4596 -33.1847]

View File

@ -8,7 +8,7 @@ image_convertToFormat zebra_png zebra ARGB32_Premultiplied
translate 75 100
# standard draw
begin_block row
begin_block row1
drawImage zebra -50 -50
translate 90 0
@ -136,12 +136,12 @@ save
rotate_y 180
drawImage zebra -50 -50
restore
end_block
end_block row1
resetMatrix
translate 75 280
setRenderHint SmoothPixmapTransform
repeat_block row
repeat_block row1
resetMatrix
setPen black
@ -162,7 +162,7 @@ setRenderHint SmoothPixmapTransform false
translate 75 100
# standard draw
begin_block row
begin_block row2
drawImage dome -50 -50
translate 90 0
@ -290,13 +290,13 @@ save
rotate_y 180
drawImage dome -50 -50
restore
end_block
end_block row2
resetMatrix
translate 0 400
translate 75 280
setRenderHint SmoothPixmapTransform
repeat_block row
repeat_block row2
resetMatrix
setPen black
@ -306,4 +306,4 @@ drawText 0 0 "Fast Pixmap Transform"
resetMatrix
translate 0 400
translate 300 210
drawText 0 0 "Smooth Pixmap Transform"
drawText 0 0 "Smooth Pixmap Transform"

View File

@ -305,17 +305,17 @@ void tst_LanceBench::runTestSuite(GraphicsEngine engine, QImage::Format format,
void tst_LanceBench::paint(QPaintDevice *device, GraphicsEngine engine, QImage::Format format, const QStringList &script, const QString &filePath)
{
PaintCommands pcmd(script, 800, 800, format);
switch (engine) {
case OpenGL:
pcmd.setType(OpenGLBufferType); // version/profile is communicated through the context's format()
break;
case Raster:
pcmd.setType(ImageType);
break;
}
pcmd.setFilePath(filePath);
QBENCHMARK {
PaintCommands pcmd(script, 800, 800, format);
switch (engine) {
case OpenGL:
pcmd.setType(OpenGLBufferType); // version/profile is communicated through the context's format()
break;
case Raster:
pcmd.setType(ImageType);
break;
}
pcmd.setFilePath(filePath);
QPainter p(device);
pcmd.setPainter(&p);
pcmd.runCommands();