-
Bug
-
Resolution: Fixed
-
P3
-
fx2.0
Ensemble2Auto reliability test failed with OOM after less than 3 hours.
Heap dump file shows that heap is mostly occupied by BorderPane (62Mb) and
GridPane (51Mb). The path to GC root shows that these objects are referenced
from ensemble.samples.animation.timelines.TimelineEventSample$1 which are
not removed from javafx.animation.AnimationTimer[] for some reason.
Instrumenting AbstractMasterTimer and AnimationTimer classes shows that every
time we click on TimelineEvents sample ensemble.samples.animation.timelines.TimelineEventSample$1
is added twice while when we switch to another tab it is removed only once.
The reason is because sample.play() is called twice from ensemble.pages.SamplePage:
149 sample.play();
213 sample.play();
while sample.stop() is called only once:
215 sample.stop();
javafx.animation.AnimationTimer[] doesn't check for uniqueness, so the number of times
we call play() and stop() methods should be equal. This needs to be fixed in Ensemble2.
I will try to patch my local version of Ensemble and remove first call of play()
and run Ensemble2Auto to see how much it helps.
I am not sure this is correct fix, so it should be up to Ensemble developers to fix it properly.
Heap dump file shows that heap is mostly occupied by BorderPane (62Mb) and
GridPane (51Mb). The path to GC root shows that these objects are referenced
from ensemble.samples.animation.timelines.TimelineEventSample$1 which are
not removed from javafx.animation.AnimationTimer[] for some reason.
Instrumenting AbstractMasterTimer and AnimationTimer classes shows that every
time we click on TimelineEvents sample ensemble.samples.animation.timelines.TimelineEventSample$1
is added twice while when we switch to another tab it is removed only once.
The reason is because sample.play() is called twice from ensemble.pages.SamplePage:
149 sample.play();
213 sample.play();
while sample.stop() is called only once:
215 sample.stop();
javafx.animation.AnimationTimer[] doesn't check for uniqueness, so the number of times
we call play() and stop() methods should be equal. This needs to be fixed in Ensemble2.
I will try to patch my local version of Ensemble and remove first call of play()
and run Ensemble2Auto to see how much it helps.
I am not sure this is correct fix, so it should be up to Ensemble developers to fix it properly.