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

Bug 360152

Summary: [TableViewer (Virtual)] Benefit of Virtual is lost when tooltips are fetched for a row
Product: [RT] RAP Reporter: Clemens Schneider <hula.bula>
Component: RWTAssignee: Project Inbox <rap-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P1 CC: ivan
Version: 1.5   
Target Milestone: 1.5 M3   
Hardware: All   
OS: All   
Whiteboard: sr142
Attachments:
Description Flags
Proposed patch for v14_Maintenance branch ruediger.herrmann: review+

Description Clemens Schneider CLA 2011-10-06 14:54:46 EDT
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)
Comment 1 Ivan Furnadjiev CLA 2011-10-06 15:57:00 EDT
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.
Comment 2 Ivan Furnadjiev CLA 2011-10-06 17:56:37 EDT
Created attachment 204724 [details]
Proposed patch for v14_Maintenance branch
Comment 3 Ivan Furnadjiev CLA 2011-10-07 04:35:30 EDT
Applied patch to v14_Maintenance branch.