summaryrefslogtreecommitdiffstats
path: root/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
diff options
context:
space:
mode:
authorAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-06-17 11:36:40 +0200
committerAndreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>2009-06-17 11:44:48 +0200
commitfa8030a935acaacee570eee320e7510a4cfdc853 (patch)
tree51d48d56c94739aa569bb60f5ef6998da35ff110 /src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
parent24580f35a58390b4177aef8edef1192dc05f8ac2 (diff)
Speed up QPixmap::width(), height(), isNull() and depth().
This change moves the w, h, d variables to QPixmapData and introduces is_null to keep track of nullness. This is possible only because QPixmapData is internal API; otherwise we'd have to be smarter. The optimization makes the QPixmap::width() function take 7 instructions, down from 34 before. For the calculator demo in the declarative ui branch this reduces a block of 750000 instructions (out of 30000000) to around 100000-150000 instructions. Tested on Windows, Linux, Mac. Raster, X11 and OpenGL paint engines. Have not tested the DirectFB engine. Reviewed-by: Trond
Diffstat (limited to 'src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp')
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index c2048d8a3..c23924884 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -82,6 +82,10 @@ void QDirectFBPixmapData::resize(int width, int height)
return;
}
+ w = width;
+ h = height;
+ is_null = (w <= 0 || h <= 0);
+ d = metric(QPaintDevice::PdmDepth);
setSerialNumber(++global_ser_no);
}
@@ -191,6 +195,10 @@ void QDirectFBPixmapData::fromImage(const QImage &i,
invalidate();
return;
}
+ w = metric(QPaintDevice::PdmWidth);
+ h = metric(QPaintDevice::PdmHeight);
+ is_null = (w <= 0 || h <= 0);
+ d = metric(QPaintDevice::PdmDepth);
setSerialNumber(++global_ser_no);
}