Community
Participate
Working Groups
Build Identifier: 1.5M2 When using TableViewer in Virtual mode with many items (say 50000+), hovering an arbitrary entry in the table causes all TableItems to be instanciated. Long UI freezes and an increased memory footprint on server side are the result of this misbehaviour. Following stacktrace shows when the problem occurs. A call to Table.getItems() instanciates all TableItems. Table.getItems() line: 769 TableLCA.getItemById(Table, String) line: 441 TableLCA.readCellToolTipTextRequested(Table) line: 417 TableLCA.readData(Widget) line: 92 DisplayLCA$1.doVisit(Widget) line: 96 DisplayLCA$1(WidgetTreeVisitor$AllWidgetTreeVisitor).visit(Composite) line: 34 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 48 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 WidgetTreeVisitor.accept(Widget, WidgetTreeVisitor) line: 55 DisplayLCA.readData(Display) line: 103 ReadData.execute(Display) line: 26 RWTLifeCycle.continueLifeCycle() line: 183 RWTLifeCycle.sleep() line: 259 Display.sleep() line: 1174 ControlsDemo.createUI() line: 47 EntryPointManager.createUI(String) line: 81 RWTLifeCycle.createUI() line: 204 RWTLifeCycle$UIThreadController.run() line: 88 UIThread(Thread).run() line: 679 UIThread.run() line: 101 Reproducible: Always Steps to Reproduce: 1. Open Controls-Demo-Code and change constant value of ADD_ITEMS to 50000 2. Startup Controls-Demo, TableViewer-Tab, select VIRTUAL, add 50000 items 3. Hover over some arbitrary row 4. UI freezes, all TableItems get instanciated The issue is more severe on slower browsers (like IE8) but is nevertheless noticeable in chrome and safari (add more items for heavier delay)
The method TableLCA#getItemById has been removed. TableLCA#getItem is used instead in TableLCA#readCellToolTipTextRequested (no more calls to Table#getItems()). Changes are in CVS HEAD.
Created attachment 204724 [details] Proposed patch for v14_Maintenance branch
Applied patch to v14_Maintenance branch.