diff options
author | Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com> | 2009-06-17 09:36:40 (GMT) |
---|---|---|
committer | Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com> | 2009-06-17 09:44:48 (GMT) |
commit | fa8030a935acaacee570eee320e7510a4cfdc853 (patch) | |
tree | 51d48d56c94739aa569bb60f5ef6998da35ff110 /src/plugins | |
parent | 24580f35a58390b4177aef8edef1192dc05f8ac2 (diff) | |
download | Qt-fa8030a935acaacee570eee320e7510a4cfdc853.zip Qt-fa8030a935acaacee570eee320e7510a4cfdc853.tar.gz Qt-fa8030a935acaacee570eee320e7510a4cfdc853.tar.bz2 |
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')
-rw-r--r-- | src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp index c2048d8..c239248 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); } |