-
Bug
-
Resolution: Fixed
-
P3
-
None
-
Vista, Dual 2.6Ghz Xeon, 6u10, JavaFX 1.0 b53
While running the FXTester performance suite (see http://j2se.sfbay.sun.com/web/bin/view/SQEJFC/FXPerformanceSuite) I got an NPE from com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:219).
The line in question is:
for (int i = 0; i < children.size(); i++) {
I see that other usages of "children" do a null check, but we don't have one in render().
This only happens when attempting to run a bogus FXTester testcase (so there likely are no children). It happens between the Glow and InnerShadow effects, as w/ the following command line:
~/c/FX1.0/javafx-sdk1.0-b53/bin/javafx -classpath PerfTesting.jar workload.FXTester -dur 10 Bogus -effects Glow InnerShadow
Output from the test run:
...
Setting up tests for Bogus
WARNING: Unknown test name: "Bogus"
WARNING: Unknown test name: "Bogus"
Bogus+Glow: FPS: 196.67 fps
Bogus+Glow: FPS: 200.07 fps
Bogus+Glow: FPS: 200.07 fps
Bogus+Glow: Average FPS: 198.91 fps
Unexpected exception caught in MasterTimer.timePulse():
java.lang.NullPointerException
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:219)
at com.sun.scenario.scenegraph.SGNode.render(SGNode.java:925)
at com.sun.scenario.scenegraph.NodeEffectInput.getImageDataForNode(NodeEffectInput.java:143)
at com.sun.scenario.scenegraph.NodeEffectInput.filter(NodeEffectInput.java:93)
at com.sun.scenario.effect.FilterEffect.filter(FilterEffect.java:87)
at com.sun.scenario.effect.DelegateEffect.filter(DelegateEffect.java:67)
at com.sun.scenario.effect.Effect.render(Effect.java:212)
at com.sun.scenario.scenegraph.SGEffect.render(SGEffect.java:137)
at com.sun.scenario.scenegraph.SGWrapper.render(SGWrapper.java:122)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:221)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:221)
at com.sun.scenario.scenegraph.JSGPanel.paintComponent(JSGPanel.java:582)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at com.sun.scenario.scenegraph.JSGPanel.repaintDirtyRegions(JSGPanel.java:634)
at com.sun.scenario.scenegraph.JSGPanelRepainter.repaintAll(JSGPanelRepainter.java:106)
at com.sun.scenario.scenegraph.JSGPanelRepainter$FrameDisplay.run(JSGPanelRepainter.java:112)
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:365)
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:247)
at com.sun.embeddedswing.EmbeddedEventQueue.doPulse(EmbeddedEventQueue.java:470)
at com.sun.embeddedswing.EmbeddedEventQueue.access$000(EmbeddedEventQueue.java:72)
at com.sun.embeddedswing.EmbeddedEventQueue$2.run(EmbeddedEventQueue.java:377)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Bogus+InnerShadow: FPS: 199.00 fps
Bogus+InnerShadow: FPS: 200.00 fps
Bogus+InnerShadow: FPS: 200.00 fps
Bogus+InnerShadow: Average FPS: 199.62 fps
The line in question is:
for (int i = 0; i < children.size(); i++) {
I see that other usages of "children" do a null check, but we don't have one in render().
This only happens when attempting to run a bogus FXTester testcase (so there likely are no children). It happens between the Glow and InnerShadow effects, as w/ the following command line:
~/c/FX1.0/javafx-sdk1.0-b53/bin/javafx -classpath PerfTesting.jar workload.FXTester -dur 10 Bogus -effects Glow InnerShadow
Output from the test run:
...
Setting up tests for Bogus
WARNING: Unknown test name: "Bogus"
WARNING: Unknown test name: "Bogus"
Bogus+Glow: FPS: 196.67 fps
Bogus+Glow: FPS: 200.07 fps
Bogus+Glow: FPS: 200.07 fps
Bogus+Glow: Average FPS: 198.91 fps
Unexpected exception caught in MasterTimer.timePulse():
java.lang.NullPointerException
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:219)
at com.sun.scenario.scenegraph.SGNode.render(SGNode.java:925)
at com.sun.scenario.scenegraph.NodeEffectInput.getImageDataForNode(NodeEffectInput.java:143)
at com.sun.scenario.scenegraph.NodeEffectInput.filter(NodeEffectInput.java:93)
at com.sun.scenario.effect.FilterEffect.filter(FilterEffect.java:87)
at com.sun.scenario.effect.DelegateEffect.filter(DelegateEffect.java:67)
at com.sun.scenario.effect.Effect.render(Effect.java:212)
at com.sun.scenario.scenegraph.SGEffect.render(SGEffect.java:137)
at com.sun.scenario.scenegraph.SGWrapper.render(SGWrapper.java:122)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:221)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:221)
at com.sun.scenario.scenegraph.JSGPanel.paintComponent(JSGPanel.java:582)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at com.sun.scenario.scenegraph.JSGPanel.repaintDirtyRegions(JSGPanel.java:634)
at com.sun.scenario.scenegraph.JSGPanelRepainter.repaintAll(JSGPanelRepainter.java:106)
at com.sun.scenario.scenegraph.JSGPanelRepainter$FrameDisplay.run(JSGPanelRepainter.java:112)
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:365)
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:247)
at com.sun.embeddedswing.EmbeddedEventQueue.doPulse(EmbeddedEventQueue.java:470)
at com.sun.embeddedswing.EmbeddedEventQueue.access$000(EmbeddedEventQueue.java:72)
at com.sun.embeddedswing.EmbeddedEventQueue$2.run(EmbeddedEventQueue.java:377)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Bogus+InnerShadow: FPS: 199.00 fps
Bogus+InnerShadow: FPS: 200.00 fps
Bogus+InnerShadow: FPS: 200.00 fps
Bogus+InnerShadow: Average FPS: 199.62 fps
- relates to
-
JDK-8099715 How should Effects handle Nodes with 0 size?
- Closed