Comment 7 for bug 1033253

Revision history for this message
Rostislav Stříbrný (rstribrn) wrote :

I still don't have a solution but here are my latest findings about this issue:

1.) WID process uses following files:
lsof -p <PID> | grep swt
 eclipse 7819 rstribrn mem REG 8,7 40736 1058233 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-cairo-gtk-3453.so
 eclipse 7819 rstribrn mem REG 8,7 23060 1058235 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-atk-gtk-3453.so
 eclipse 7819 rstribrn mem REG 8,7 352276 1058234 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-pi-gtk-3453.so
 eclipse 7819 rstribrn mem REG 8,7 11360 1058230 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-gtk-3453.so
 eclipse 7819 rstribrn 102r REG 8,7 17000 3424093 /opt/IBM/SDPShared/plugins/org.eclipse.swt_3.4.2.v3453a.jar
 eclipse 7819 rstribrn 112r REG 8,7 2066776 3421737 /opt/IBM/SDPShared/plugins/org.eclipse.swt.gtk.linux.x86_3.4.1.v3453a.jar

lsof -p <PID> | grep gtk
 eclipse 14813 rstribrn mem REG 8,1 80704 15754 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/printbackends/libprintbackend-cups.so
 eclipse 14813 rstribrn mem REG 8,1 18068 4218 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/printbackends/libprintbackend-file.so
 eclipse 14813 rstribrn mem REG 8,7 40736 1058233 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-cairo-gtk-3453.so
 eclipse 14813 rstribrn mem REG 8,7 23060 1058235 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-atk-gtk-3453.so
 eclipse 14813 rstribrn mem REG 8,1 26512 6241 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so
 eclipse 14813 rstribrn mem REG 8,7 352276 1058234 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-pi-gtk-3453.so
 eclipse 14813 rstribrn mem REG 8,7 11360 1058230 /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-gtk-3453.so
 eclipse 14813 rstribrn mem REG 8,1 219296 31730 /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/engines/libmurrine.so
 eclipse 14813 rstribrn mem REG 8,1 4617044 931729 /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0.2400.17
 eclipse 14813 rstribrn mem REG 8,1 17948 926032 /usr/lib/i386-linux-gnu/libcanberra-gtk.so.0.1.9
 eclipse 14813 rstribrn mem REG 8,1 22156 529 /usr/lib/i386-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so
 eclipse 14813 rstribrn mem REG 8,7 133193 790237 /opt/IBM/WID62/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.101.R34x_v20080805/eclipse_1115.so
 eclipse 14813 rstribrn 182r REG 8,7 2066776 3421737 /opt/IBM/SDPShared/plugins/org.eclipse.swt.gtk.linux.x86_3.4.1.v3453a.jar

lsof -p <PID> | grep gdk
 eclipse 14813 rstribrn mem REG 8,1 5604 1454545 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so
 eclipse 14813 rstribrn mem REG 8,1 18044 1458116 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so
 eclipse 14813 rstribrn mem REG 8,1 26176 1457839 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gif.so
 eclipse 14813 rstribrn mem REG 8,1 13768 1457834 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-bmp.so
 eclipse 14813 rstribrn mem REG 8,1 712732 924837 /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0.2400.17
 eclipse 14813 rstribrn mem REG 8,1 137196 924851 /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0.2800.0

2.) kill -3 <PID>
javacore.20130429.181810.32056.0005.txt
 3XMTHREADINFO "main" J9VMThread:0x09288400, j9thread_t:0x0926C02C, java/lang/Thread:0x98B60020, state:R, prio=6
 3XMTHREADINFO1 (native thread ID:0x7D38, native priority:0x6, native policy:UNKNOWN)
 3XMTHREADINFO2 (native stack address range from:0xFF27A000, to:0xFFA7A000, size:0x800000)
 3XMTHREADINFO3 Java callstack:
 4XESTACKTRACE at org/eclipse/swt/internal/gtk/OS._gdk_pixbuf_scale_simple(Native Method)
 4XESTACKTRACE at org/eclipse/swt/internal/gtk/OS.gdk_pixbuf_scale_simple(OS.java:3154(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/GC.scale(GC.java:1105(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/GC.drawImage(GC.java:884(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/GC.drawImage(GC.java:873(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/GC.drawImage(GC.java:759(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/ImageData.fillGradientRectangle(ImageData.java:3597(Compiled Code))
 4XESTACKTRACE at org/eclipse/swt/graphics/GC.fillGradientRectangle(GC.java:1833(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/SWTGraphics.fillGradient(SWTGraphics.java:515(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Graphics.fillGradient(Graphics.java:412(Compiled Code))
 4XESTACKTRACE at com/ibm/wbit/bpel/ui/editparts/borders/GradientBorder.paintGradient(Bytecode PC:18(Compiled Code))
 4XESTACKTRACE at com/ibm/wbit/bpel/ui/editparts/figures/GradientFigure.paintClientArea(Bytecode PC:28(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paint(Figure.java:1051(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paintChildren(Figure.java:1087(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paintClientArea(Figure.java:1119(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paint(Figure.java:1051(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paintChildren(Figure.java:1087(Compiled Code))
 4XESTACKTRACE at org/eclipse/draw2d/Figure.paintClientArea(Figure.java:1119(Compiled Code))

 2CLTEXTCLLIB Loader org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader(0x993A33C8)
 3CLTEXTLIB /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-gtk-3453.so
 3CLTEXTLIB /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-pi-gtk-3453.so
 3CLTEXTLIB /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-atk-gtk-3453.so
 3CLTEXTLIB /opt/IBM/WID62/configuration/org.eclipse.osgi/bundles/2282/1/.cp/libswt-cairo-gtk-3453.so

=> So it seems that it is spending the time in OS._gdk_pixbuf_scale_simple.

3.) gdk_pixbuf_scale_simple is provided by libgdk_pixbuf-2.0.so

4.) I've verified the differences between the builds of gdk-pixbuf-2.28.0 for oneiric and precise/raring and found no problematic difference.

I've verified the differences between the gdk-pixbuf-2.24.1 (oneiric version) and gdk-pixbuf-2.28.0 (raring) and also found nothing.

5.) However, gdk_pixbuf_scale_simple function calls gdk_pixbuf_scale...but wait, this function should be performed by hardware (and not CPU), right?

=> That led me to another investigation.

6.) SWT library
org/eclipse/swt/graphics/Device.java
has boolean named useXRender

It seems that there is some difference in libXrender (oneiric version and all newer versions)
 - Oneiric version sets device.useXRender (boolean) flag to TRUE
 - All other newer version sets it to FALSE

=> I've verified this with a simple Java program which was using libXrender1.so from Ubuntu Oneiric (11.10) and from Ubuntu Raring (13.04).

When Oneiric's version was used => Device.useXRender flag was set to TRUE.
When newer version of the same library was put on the LD_LIBRARY_PATH => Device.useXRender flag was set to FALSE.

Strange...still need more investigation what's going on :-(...