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
parent
9feb20e581
commit
00c869a5c6
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue