JDK-8125654 : Ctrl+Alt+Del cycle causes WebView to start dumping WARNING: unexpected number (>2) of render frames in the queue
  • Type: Bug
  • Component: javafx
  • Sub-Component: web
  • Affected Version: 8
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2012-09-25
  • Updated: 2015-06-17
  • Resolved: 2012-10-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8
8Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Description
Open the attached timer.html in WebView, hit Ctrl+Alt+Del to open the block/switch user/logout Windows system screen, and then hit Esc to go back to the desktop. WebView will start dumping the following warnings:

...
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:11 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:11 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:11 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:11 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:12 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:12 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:12 PM com.sun.webpane.platform.WebPage paint2GC
WARNING: unexpected number (>2) of render frames in the queue: 64
������ 25, 2012 2:31:12 PM com.sun.webpane.platform.WebPage paint2GC
...

I believe this is a consequence of RT-23842 
Comments
Verified with Lombard b91 on Win7x64.
29-05-2013

The above fix has been pushed as http://jfxsrc.us.oracle.com/javafx/8.0/scrum/graphics/rt-closed/rev/aae2f3040899
08-10-2012

Looks good.
28-09-2012

Here is the fix. Webrev: http://javaweb.us.oracle.com/jcg/fx-webrevs/RT-25219/1 Summary of changes: - In WebPage.paint2GC, do not assume that the frame queue may not contain more than two frames. Instead, assume that the frame queue can contain arbitrary number of frames. Also, instead of rendering just a singe frame per a single call to WebPage.paint2GC, render all frames found in the queue on every call to WebPage.paint2GC. - As a measure to prevent the frame queue from growing infinitely in situations when the WebView becomes ineligible for rendering (such as when the user activates the lock/switch user/logout system screen), limit the frame queue size to 10 frames. Ensure the limit on the "writer" side, that is, in the WebPage.updateDirty method. When the queue size exceeds the limit, simply clear the frame queue and request full repaint. - As a performance optimization, when adding a new frame to the frame queue, drop any existing frames found in the queue if they are fully covered by any of the opaque render queues of the new frame. Opaque render queues are those that paint their entire clip rectangle, that is, do not have "transparent" areas. Render queues generated by painting dirty rects are, by definition, opaque.
28-09-2012

It appears render passes can now be omitted even if the node is really visible, that is, pulses and render passes can in general run at different rates. It looks like we now need a smarter and more adaptive render queue processing logic that can deal with that.
27-09-2012

The problem is in the following condition in WebView.handleStagePulse: impl_isTreeVisible() && getScene() != null && getScene().getWindow() != null && getScene().getWindow().isShowing(); As a matter of fact, this condition continues to evaluate to true while the block/switch user/logout Windows system screen is active and NGwebView.update calls are suppressed, thus causing WebView to accumulate render frames.
25-09-2012