During investigation of instability of JFX_FPS counter for WebNode.GUIMark2-Text test I've found that sometimes
WebNode marks itself as dirty too often. Here is a log which shows what we have.
At one pulse StageTKPulseListener reqistered in WebView marks the WebView as dirty since page.isDirty() returns true,
and FX render all dirty areas WebView has in this pulse. But on next pulse .WebPage.fwkRepain() mark the WebView
as dirty again (though it looks like there is no dirty regions), and FX again (tries to) render WebView (and this time we have
nothing to render, but this is counted as one more rendered fread by PerformanceTracker).
It looks like there is some timing between pulse and .WebPage.fwkRepain() call, since not always it is called on different pulse.
Anyway it is worth to investigate/fix this problem. Before this moment we will consider JFX_FPS useless for WebNode.GUIMark2-Text test.
[java] pulse started
[java] CF.addDirtyScene: 17691874 (1920,1170)
[java] java.lang.Exception: Stack trace
[java] at java.lang.Thread.dumpStack(Thread.java:1249)
[java] at com.sun.javafx.tk.quantum.CollectedFuture.addDirtyScene(CollectedFuture.java:83)
[java] at com.sun.javafx.tk.quantum.GlassScene.sceneChanged(GlassScene.java:266)
[java] at com.sun.javafx.tk.quantum.ViewScene.sceneChanged(ViewScene.java:119)
[java] at com.sun.javafx.tk.quantum.GlassScene.markDirty(GlassScene.java:133)
[java] at javafx.scene.Scene.addToDirtyList(Scene.java:330)
[java] at javafx.scene.Node.impl_markDirty(Node.java:300)
[java] at javafx.scene.web.WebView.access$300(WebView.java:46)
[java] at javafx.scene.web.WebView$3.pulse(WebView.java:190)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:249)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:361)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$10.run(QuantumToolkit.java:296)
[java] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[java] at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
[java] at com.sun.glass.ui.win.WinApplication$1$1.run(WinApplication.java:49)
[java] at java.lang.Thread.run(Thread.java:662)
[java] CF.repaintAll: #work: 1
[java] clip: WCRectangle{x:0.0 y:0.0 w:1200.0 h:41.0}
[java] clip: WCRectangle{x:0.0 y:30.0 w:903.0 h:602.0}
[java] clip: WCRectangle{x:900.0 y:30.0 w:302.0 h:602.0}
[java] CF.renderComplete: 17691874 (1920,1170)
[java] calcFps()
[java] pulse finished
[java] pulse started
[java] CF.addDirtyScene: 17691874 (1920,1170)
[java] java.lang.Exception: Stack trace
[java] at java.lang.Thread.dumpStack(Thread.java:1249)
[java] at com.sun.javafx.tk.quantum.CollectedFuture.addDirtyScene(CollectedFuture.java:83)
[java] at com.sun.javafx.tk.quantum.GlassScene.sceneChanged(GlassScene.java:266)
[java] at com.sun.javafx.tk.quantum.ViewScene.sceneChanged(ViewScene.java:119)
[java] at com.sun.javafx.tk.quantum.GlassScene.markDirty(GlassScene.java:133)
[java] at javafx.scene.Scene.addToDirtyList(Scene.java:330)
[java] at javafx.scene.Node.impl_markDirty(Node.java:300)
[java] at javafx.scene.web.WebView.impl_repaint(WebView.java:630)
[java] at com.sun.webpane.sg.WebPageClientImpl.repaint(WebPageClientImpl.java:33)
[java] at com.sun.webpane.platform.WebPage.fwkRepaint(WebPage.java:1783)
[java] at com.sun.webpane.webkit.Timer.twkFireTimerEvent(Native Method)
[java] at com.sun.webpane.webkit.Timer.fireTimerEvent(Timer.java:62)
[java] at com.sun.webpane.webkit.Timer.notifyTick(Timer.java:43)
[java] at javafx.scene.web.WebEngine$PulseTimer$2.pulse(WebEngine.java:92)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:253)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:361)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$10.run(QuantumToolkit.java:296)
[java] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[java] at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
[java] at com.sun.glass.ui.win.WinApplication$1$1.run(WinApplication.java:49)
[java] at java.lang.Thread.run(Thread.java:662)
[java] CF.repaintAll: #work: 1
[java] CF.renderComplete: 17691874 (1920,1170)
[java] calcFps()
[java] pulse finished
WebNode marks itself as dirty too often. Here is a log which shows what we have.
At one pulse StageTKPulseListener reqistered in WebView marks the WebView as dirty since page.isDirty() returns true,
and FX render all dirty areas WebView has in this pulse. But on next pulse .WebPage.fwkRepain() mark the WebView
as dirty again (though it looks like there is no dirty regions), and FX again (tries to) render WebView (and this time we have
nothing to render, but this is counted as one more rendered fread by PerformanceTracker).
It looks like there is some timing between pulse and .WebPage.fwkRepain() call, since not always it is called on different pulse.
Anyway it is worth to investigate/fix this problem. Before this moment we will consider JFX_FPS useless for WebNode.GUIMark2-Text test.
[java] pulse started
[java] CF.addDirtyScene: 17691874 (1920,1170)
[java] java.lang.Exception: Stack trace
[java] at java.lang.Thread.dumpStack(Thread.java:1249)
[java] at com.sun.javafx.tk.quantum.CollectedFuture.addDirtyScene(CollectedFuture.java:83)
[java] at com.sun.javafx.tk.quantum.GlassScene.sceneChanged(GlassScene.java:266)
[java] at com.sun.javafx.tk.quantum.ViewScene.sceneChanged(ViewScene.java:119)
[java] at com.sun.javafx.tk.quantum.GlassScene.markDirty(GlassScene.java:133)
[java] at javafx.scene.Scene.addToDirtyList(Scene.java:330)
[java] at javafx.scene.Node.impl_markDirty(Node.java:300)
[java] at javafx.scene.web.WebView.access$300(WebView.java:46)
[java] at javafx.scene.web.WebView$3.pulse(WebView.java:190)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:249)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:361)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$10.run(QuantumToolkit.java:296)
[java] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[java] at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
[java] at com.sun.glass.ui.win.WinApplication$1$1.run(WinApplication.java:49)
[java] at java.lang.Thread.run(Thread.java:662)
[java] CF.repaintAll: #work: 1
[java] clip: WCRectangle{x:0.0 y:0.0 w:1200.0 h:41.0}
[java] clip: WCRectangle{x:0.0 y:30.0 w:903.0 h:602.0}
[java] clip: WCRectangle{x:900.0 y:30.0 w:302.0 h:602.0}
[java] CF.renderComplete: 17691874 (1920,1170)
[java] calcFps()
[java] pulse finished
[java] pulse started
[java] CF.addDirtyScene: 17691874 (1920,1170)
[java] java.lang.Exception: Stack trace
[java] at java.lang.Thread.dumpStack(Thread.java:1249)
[java] at com.sun.javafx.tk.quantum.CollectedFuture.addDirtyScene(CollectedFuture.java:83)
[java] at com.sun.javafx.tk.quantum.GlassScene.sceneChanged(GlassScene.java:266)
[java] at com.sun.javafx.tk.quantum.ViewScene.sceneChanged(ViewScene.java:119)
[java] at com.sun.javafx.tk.quantum.GlassScene.markDirty(GlassScene.java:133)
[java] at javafx.scene.Scene.addToDirtyList(Scene.java:330)
[java] at javafx.scene.Node.impl_markDirty(Node.java:300)
[java] at javafx.scene.web.WebView.impl_repaint(WebView.java:630)
[java] at com.sun.webpane.sg.WebPageClientImpl.repaint(WebPageClientImpl.java:33)
[java] at com.sun.webpane.platform.WebPage.fwkRepaint(WebPage.java:1783)
[java] at com.sun.webpane.webkit.Timer.twkFireTimerEvent(Native Method)
[java] at com.sun.webpane.webkit.Timer.fireTimerEvent(Timer.java:62)
[java] at com.sun.webpane.webkit.Timer.notifyTick(Timer.java:43)
[java] at javafx.scene.web.WebEngine$PulseTimer$2.pulse(WebEngine.java:92)
[java] at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:253)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:361)
[java] at com.sun.javafx.tk.quantum.QuantumToolkit$10.run(QuantumToolkit.java:296)
[java] at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[java] at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
[java] at com.sun.glass.ui.win.WinApplication$1$1.run(WinApplication.java:49)
[java] at java.lang.Thread.run(Thread.java:662)
[java] CF.repaintAll: #work: 1
[java] CF.renderComplete: 17691874 (1920,1170)
[java] calcFps()
[java] pulse finished