Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 495849

Summary: [HiDPI][Win32][GTK] IllegalArgumentException below MarketplaceViewer$4.run (thrown in TextLayout.setWidthInPixels)
Product: [Eclipse Project] Platform Reporter: EPP Error Reports <error-reports-inbox>
Component: SWTAssignee: Niraj Modi <niraj.modi>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: lshanmug, reckord, sravankumarl
Version: 4.6Flags: lshanmug: review+
Target Milestone: 4.6.1   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/77542
https://git.eclipse.org/c/platform/eclipse.platform.swt.git/commit/?id=02e0a7b593b86b295d26309438ffeb066fde7429
Whiteboard:
Bug Depends on:    
Bug Blocks: 495269    

Description EPP Error Reports CLA 2016-06-10 02:00:01 EDT
The following problem was reported via the automated error reporting:

Message: Unhandled event loop exception
java.lang.IllegalArgumentException: Argument not valid
    at org.eclipse.swt.graphics.TextLayout.setWidthInPixels(TextLayout.java:3333)
    at org.eclipse.swt.graphics.TextLayout.setWidth(TextLayout.java:3329)
    at org.eclipse.swt.widgets.Link.computeSizeInPixels(Link.java:213)
    at org.eclipse.swt.widgets.Control.computeSize(Control.java:663)
    at org.eclipse.swt.layout.GridData.computeSize(GridData.java:502)
    at org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:482)
    at org.eclipse.swt.layout.GridLayout.computeSize(GridLayout.java:164)
    at org.eclipse.swt.widgets.Composite.computeSizeInPixels(Composite.java:238)
    at org.eclipse.swt.widgets.Control.computeSize(Control.java:663)
    at org.eclipse.swt.layout.GridData.computeSize(GridData.java:502)
    at org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:482)
    at org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:197)
    at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1383)
    at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1794)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4846)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5116)
    at org.eclipse.swt.internal.win32.OS.DefWindowProcW(OS.java:-2)
    at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2547)
    at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:88)
    at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5671)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4859)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:5103)
    at org.eclipse.swt.internal.win32.OS.SetWindowPos(OS.java:-2)
    at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1482)
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3246)
    at org.eclipse.swt.widgets.Composite.setBoundsInPixels(Composite.java:1099)
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3207)
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3203)
    at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3274)
    at org.eclipse.swt.widgets.Control.setBounds(Control.java:3270)
    at org.eclipse.swt.custom.ScrolledComposite.setContent(ScrolledComposite.java:487)
    at org.eclipse.equinox.internal.p2.ui.discovery.util.ControlListViewer.doUpdateContent(ControlListViewer.java:230)
    at org.eclipse.equinox.internal.p2.ui.discovery.util.ControlListViewer.refreshAll(ControlListViewer.java:486)
    at org.eclipse.equinox.internal.p2.ui.discovery.util.ControlListViewer.inputChanged(ControlListViewer.java:354)
    at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:286)
    at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1696)
    at org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer.catalogUpdated(CatalogViewer.java:242)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer.access$4(MarketplaceViewer.java:1)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer$4.run(MarketplaceViewer.java:309)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer.runUpdate(MarketplaceViewer.java:679)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer.catalogUpdated(MarketplaceViewer.java:306)
    at org.eclipse.equinox.internal.p2.ui.discovery.wizards.CatalogViewer.updateCatalog(CatalogViewer.java:591)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer.updateCatalog(MarketplaceViewer.java:954)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplacePage.safeUpdateCatalog(MarketplacePage.java:758)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplacePage.access$11(MarketplacePage.java:755)
    at org.eclipse.epp.internal.mpc.ui.wizards.MarketplacePage$8.run(MarketplacePage.java:748)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4208)



Bundles:
| org.eclipse.epp.mpc.ui | 1.5.0.v20160601-1407 | 1.5.0.v20160601-1407 |
| org.eclipse.equinox.p2.ui.discovery | 1.0.200.v20160504-1450 | 1.0.200.v20160504-1450 |
| org.eclipse.jface | 3.12.0.v20160518-1929 | 3.12.0.v20160518-1929 |
| org.eclipse.swt | 3.105.0.v20160525-1431 | 3.105.0.v20160525-1431 |

Operating Systems:
| Windows | 10.0.0 | 10.0.0 |


The above information is a snapshot of the collected data. Visit https://dev.eclipse.org/recommenders/committers/aeri/v2/#!/problems/572d29a3e4b098492e44b18a for the latest data.

Thank you for your assistance.
 Your friendly error-reports-inbox.
Comment 1 Carsten Reckord CLA 2016-06-10 05:44:56 EDT
It looks like this is caused by the new HiDPI / AutoScale feature in SWT. It scales the value down to < 1 so integer conversion turns it to zero.

In Link.computeSizeInPixels(Link.java:213):

if (wHint == 0) {
   layout.setWidth (DPIUtil.autoScaleDown(1));
   ...
}

This will yield a 0 width for scale factors of 200% and above. Reassigning to SWT.
Comment 2 Niraj Modi CLA 2016-07-19 12:23:48 EDT
(In reply to Carsten Reckord from comment #1)
> It looks like this is caused by the new HiDPI / AutoScale feature in SWT. It
> scales the value down to < 1 so integer conversion turns it to zero.
> 
> In Link.computeSizeInPixels(Link.java:213):
> 
> if (wHint == 0) {
>    layout.setWidth (DPIUtil.autoScaleDown(1));
>    ...
> }
> 
> This will yield a 0 width for scale factors of 200% and above. Reassigning
> to SWT.

Both Windowns and GTK's Link widget classes are making call to DPIUtil.autoScaleDown(1), will share a fix-patch shortly.
Comment 3 Niraj Modi CLA 2016-07-20 01:32:40 EDT
Hi Sravan, patch for your review to be back-ported to 4.6.1
https://git.eclipse.org/r/#/c/77542/
Comment 4 Niraj Modi CLA 2016-07-21 04:24:38 EDT
Did a search in SWT code-base to confirm if there are any more such calls apart from Link.java(win32 and GTK), using below regex:
DPIUtil\.autoScaleDown.?\([1-9]\)

We are good on this.
Comment 6 Niraj Modi CLA 2016-07-25 13:39:16 EDT
Resolving now, fix back-ported to 4.6.1 via below git commit:
http://git.eclipse.org/c/platform/eclipse.platform.swt.git/commit/?h=R4_6_maintenance&id=0cd5ecf21555efcf4b2e4629cd2ff969ca609fc1
Comment 7 Carsten Reckord CLA 2016-09-12 10:02:53 EDT
*** Bug 500811 has been marked as a duplicate of this bug. ***