On Tue, 10 Mar 2020 14:35:59 GMT, Florian Kirmaier <fkirma...@openjdk.org> 
wrote:

>> Hi everyone,
>> 
>> ticket: https://bugs.openjdk.java.net/browse/JDK-8236259
>> 
>> The fix itself is quite straight forward.
>> It basically just removed the listener which causes the leak.
>> 
>> The unit-test for the fix is a bit more complicated.
>> 
>> I added a library JMemoryBuddy https://github.com/Sandec/JMemoryBuddy 
>> (written by myself), which simplifies testing for
>> memory leaks. I think there are many places in the JavaFX-codebase that 
>> could highly benefit from this library.
>> It could also simplify many of the already existing unit tests.
>> It makes testing for memory-leaks readably and reliable.
>> It would also be possible to just copy the code of the library into the 
>> JavaFX-codebase.
>> It only contains a single class.
>> 
>> I also had to make a method public, to write the test. I'm open to ideas, 
>> how I could solve it differently.
>
> Florian Kirmaier has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   JDK-8200224
>   cleaned up code based on code review

Requested few changes in test and a suggestion for fix.

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 45:

> 44: import java.util.concurrent.TimeUnit;
> 45:
> 46: import junit.framework.Assert;

Please remove the unused imports.

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 78:

> 77:             primaryStage.show();
> 78:         }
> 79:     }

Use `stage` or `primaryStage` uniformly to make `Stage` calls in the `start()` 
method.

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 76:

> 75:                 });
> 76:             });
> 77:             primaryStage.show();

This call can be changed as,
primaryStage.setOnShown(l -> {
    Platform.runLater(() -> startupLatch.countDown());
});

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 112:

> 111:             throw new AssertionError("Content of WeakReference was not 
> collected. content: " +
> weakReference.get()); 112:         }
> 113:     }

This can be replaced using `Assert.assertNull()`

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 131:

> 130:
> 131: }

You can get rid of some empty lines like 130, 89, 85.

tests/system/src/test/java/test/javafx/scene/control/ProgressIndicatorLeakTest.java
 line 114:

> 113:     }
> 114:     public static void createGarbage() {
> 115:         LinkedList list = new LinkedList<Integer>();

I think the test should consistently pass or fail without using this method.
Can you please check and remove this method if can be.
I tested once and it passes.

modules/javafx.controls/src/main/java/javafx/scene/control/skin/ProgressIndicatorSkin.java
 line 550:

> 549:         }
> 550:
> 551:         private void setFillOverride(Paint fillOverride) {

The issue can be alternatively fixed using below change at line#510
            text.fontProperty().addListener(new 
WeakChangeListener<>((observable, oldValue, newValue) -> {
                doneTextWidth = Utils.computeTextWidth(text.getFont(), DONE, 0);
                doneTextHeight = Utils.computeTextHeight(text.getFont(), DONE, 
0, TextBoundsType.LOGICAL_VERTICAL_CENTER);
            }));

I am not sure which one is better.
As there are no objections, I am good with the any.

-------------

Changes requested by arapte (Reviewer).

PR: https://git.openjdk.java.net/jfx/pull/71

Reply via email to