Friendly Jira Robot created ERT-735:
---------------------------------------
Summary: [GTK3] Group widget causes memory leak and slowdown [EBZ#547227]
Key: ERT-735
URL:
https://issues.jboss.org/browse/ERT-735
Project: Eclipse Release Train
Issue Type: Task
Components: Platform
Reporter: Friendly Jira Robot
Created attachment 278590
Snippet
SWTBot unit tests have never worked properly on GTK3, so they were always run with GTK2.
Starting with 2018-12, SWTBot unit tests are no longer successful since GTK2 support is
removed. The unit tests get progressively slower until the whole build fails with Tycho
return code 137.
We've discovered that the issue seems to be with the Group widget, which is used
extensively in the SWT Control Example shell in SWTBot unit tests.
It appears that creating and disposing Group widgets gets linearly slower, until the
system finally kills the build, presumably running out of memory.
The included snippet shows the issue. Running it once for every SWTBot unit test class on
the latest CI infrastructure gives the following output:
https://ci.eclipse.org/swtbot/job/swtbot-gerrit/1035/console
1st unit test class:
15:08:26 gtk version: 3.22.30
15:08:26
15:08:26 shell.dispose() for Shell {} with 400 Composite [1]... 10 ms =
15:08:26 shell.dispose() for Shell {} with 400 Composite [2]... 11 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [3]... 12 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [4]... 13 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [5]... 10 ms =
15:08:26 shell.dispose() for Shell {} with 400 Composite [6]... 11 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [7]... 13 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [8]... 11 ms ==
15:08:26 shell.dispose() for Shell {} with 400 Composite [9]... 11 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [10]... 11 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [11]... 11 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [12]... 10 ms =
15:08:27 shell.dispose() for Shell {} with 400 Composite [13]... 12 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [14]... 14 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [15]... 12 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [16]... 11 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [17]... 12 ms =
15:08:27 shell.dispose() for Shell {} with 400 Composite [18]... 12 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [19]... 11 ms ==
15:08:27 shell.dispose() for Shell {} with 400 Composite [20]... 11 ms ==
15:08:27
15:08:28 shell.dispose() for Shell {} with 400 Group [1]... 36 ms ====
15:08:28 shell.dispose() for Shell {} with 400 Group [2]... 38 ms ====
15:08:28 shell.dispose() for Shell {} with 400 Group [3]... 39 ms ====
15:08:28 shell.dispose() for Shell {} with 400 Group [4]... 43 ms =====
15:08:29 shell.dispose() for Shell {} with 400 Group [5]... 46 ms =====
15:08:29 shell.dispose() for Shell {} with 400 Group [6]... 48 ms =====
15:08:29 shell.dispose() for Shell {} with 400 Group [7]... 53 ms ======
15:08:29 shell.dispose() for Shell {} with 400 Group [8]... 54 ms ======
15:08:30 shell.dispose() for Shell {} with 400 Group [9]... 57 ms ======
15:08:30 shell.dispose() for Shell {} with 400 Group [10]... 59 ms ======
15:08:30 shell.dispose() for Shell {} with 400 Group [11]... 62 ms =======
15:08:30 shell.dispose() for Shell {} with 400 Group [12]... 64 ms =======
15:08:31 shell.dispose() for Shell {} with 400 Group [13]... 67 ms =======
15:08:31 shell.dispose() for Shell {} with 400 Group [14]... 69 ms =======
15:08:31 shell.dispose() for Shell {} with 400 Group [15]... 75 ms ========
15:08:31 shell.dispose() for Shell {} with 400 Group [16]... 74 ms ========
15:08:32 shell.dispose() for Shell {} with 400 Group [17]... 77 ms ========
15:08:32 shell.dispose() for Shell {} with 400 Group [18]... 78 ms ========
15:08:32 shell.dispose() for Shell {} with 400 Group [19]... 81 ms =========
15:08:32 shell.dispose() for Shell {} with 400 Group [20]... 84 ms =========
15:08:32
:
:
:
10th unit test class:
15:20:56 gtk version: 3.22.30
15:20:56
15:20:56 shell.dispose() for Shell {} with 400 Composite [1]... 12 ms ==
15:20:56 shell.dispose() for Shell {} with 400 Composite [2]... 13 ms ==
15:20:56 shell.dispose() for Shell {} with 400 Composite [3]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [4]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [5]... 11 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [6]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [7]... 11 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [8]... 13 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [9]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [10]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [11]... 11 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [12]... 12 ms ==
15:20:57 shell.dispose() for Shell {} with 400 Composite [13]... 11 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [14]... 13 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [15]... 11 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [16]... 12 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [17]... 11 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [18]... 12 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [19]... 12 ms ==
15:20:58 shell.dispose() for Shell {} with 400 Composite [20]... 11 ms ==
15:20:58
15:21:01 shell.dispose() for Shell {} with 400 Group [1]... 2786 ms
=======================================================================================================================================================================================================================================================================================
15:21:04 shell.dispose() for Shell {} with 400 Group [2]... 2798 ms
========================================================================================================================================================================================================================================================================================
15:21:07 shell.dispose() for Shell {} with 400 Group [3]... 2818 ms
==========================================================================================================================================================================================================================================================================================
15:21:10 shell.dispose() for Shell {} with 400 Group [4]... 2837 ms
============================================================================================================================================================================================================================================================================================
15:21:14 shell.dispose() for Shell {} with 400 Group [5]... 2851 ms
==============================================================================================================================================================================================================================================================================================
15:21:17 shell.dispose() for Shell {} with 400 Group [6]... 2865 ms
===============================================================================================================================================================================================================================================================================================
15:21:20 shell.dispose() for Shell {} with 400 Group [7]... 2853 ms
==============================================================================================================================================================================================================================================================================================
15:21:23 shell.dispose() for Shell {} with 400 Group [8]... 2890 ms
=================================================================================================================================================================================================================================================================================================
15:21:26 shell.dispose() for Shell {} with 400 Group [9]... 2892 ms
==================================================================================================================================================================================================================================================================================================
15:21:29 shell.dispose() for Shell {} with 400 Group [10]... 2916 ms
====================================================================================================================================================================================================================================================================================================
15:21:32 shell.dispose() for Shell {} with 400 Group [11]... 2913 ms
====================================================================================================================================================================================================================================================================================================
15:21:35 shell.dispose() for Shell {} with 400 Group [12]... 2939 ms
======================================================================================================================================================================================================================================================================================================
15:21:39 shell.dispose() for Shell {} with 400 Group [13]... 3047 ms
=================================================================================================================================================================================================================================================================================================================
15:21:42 shell.dispose() for Shell {} with 400 Group [14]... 3000 ms
============================================================================================================================================================================================================================================================================================================
15:21:45 shell.dispose() for Shell {} with 400 Group [15]... 3032 ms
================================================================================================================================================================================================================================================================================================================
15:21:48 shell.dispose() for Shell {} with 400 Group [16]... 2982 ms
===========================================================================================================================================================================================================================================================================================================
15:21:52 shell.dispose() for Shell {} with 400 Group [17]... 2987 ms
===========================================================================================================================================================================================================================================================================================================
15:21:55 shell.dispose() for Shell {} with 400 Group [18]... 3016 ms
==============================================================================================================================================================================================================================================================================================================
15:21:58 shell.dispose() for Shell {} with 400 Group [19]... 3017 ms
==============================================================================================================================================================================================================================================================================================================
15:22:01 shell.dispose() for Shell {} with 400 Group [20]... 3031 ms
================================================================================================================================================================================================================================================================================================================
--
This message was sent by Atlassian Jira
(v7.12.1#712002)