mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 00:16:16 +00:00
put off invoking the JFX thread till deeper in the stack. remove unused list, use concurrent hashmaps
This commit is contained in:
parent
ff2278a98e
commit
ddcc2d567f
@ -33,7 +33,6 @@ import javafx.concurrent.Task;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.chart.Axis;
|
||||
import javafx.scene.chart.BarChart;
|
||||
import javafx.scene.chart.Chart;
|
||||
import javafx.scene.chart.XYChart;
|
||||
import javafx.scene.control.Label;
|
||||
@ -81,7 +80,7 @@ public abstract class AbstractVisualizationPane<X, Y, N, C extends XYChart<X, Y>
|
||||
}
|
||||
protected final SimpleBooleanProperty hasEvents = new SimpleBooleanProperty(true);
|
||||
|
||||
protected final ObservableList<BarChart.Series<X, Y>> dataSets = FXCollections.<BarChart.Series<X, Y>>observableArrayList();
|
||||
protected final ObservableList<XYChart.Series<X, Y>> dataSeries = FXCollections.<XYChart.Series<X, Y>> observableArrayList();
|
||||
|
||||
protected C chart;
|
||||
|
||||
|
@ -111,7 +111,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
||||
|
||||
@Override
|
||||
protected Boolean isTickBold(String value) {
|
||||
return dataSets.stream().flatMap((series) -> series.getData().stream())
|
||||
return dataSeries.stream().flatMap((series) -> series.getData().stream())
|
||||
.anyMatch((data) -> data.getXValue().equals(value) && data.getYValue().intValue() > 0);
|
||||
}
|
||||
|
||||
@ -144,7 +144,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
||||
Platform.runLater(() -> {
|
||||
updateMessage(NbBundle.getMessage(this.getClass(), "CountsViewPane.loggedTask.resetUI"));
|
||||
eventTypeMap.clear();
|
||||
dataSets.clear();
|
||||
dataSeries.clear();
|
||||
dateAxis.getCategories().clear();
|
||||
|
||||
DateTime start = timeRange.getStart();
|
||||
@ -264,7 +264,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
||||
super(controller, partPane, contextPane, spacer);
|
||||
chart = new EventCountsChart(controller, dateAxis, countAxis);
|
||||
setChartClickHandler();
|
||||
chart.setData(dataSets);
|
||||
chart.setData(dataSeries);
|
||||
setCenter(chart);
|
||||
|
||||
Tooltip.install(chart, getDefaultTooltip());
|
||||
@ -337,8 +337,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
||||
series = new XYChart.Series<>();
|
||||
series.setName(et.getDisplayName());
|
||||
eventTypeMap.put(et, series);
|
||||
|
||||
dataSets.add(series);
|
||||
dataSeries.add(series);
|
||||
}
|
||||
return series;
|
||||
|
||||
@ -395,7 +394,7 @@ public class CountsViewPane extends AbstractVisualizationPane<String, Number, No
|
||||
controller.selectTimeAndType(interval, RootEventType.getInstance());
|
||||
|
||||
selectedNodes.clear();
|
||||
for (XYChart.Series<String, Number> s : dataSets) {
|
||||
for (XYChart.Series<String, Number> s : dataSeries) {
|
||||
s.getData().forEach((XYChart.Data<String, Number> d) -> {
|
||||
if (startDateString.contains(d.getXValue())) {
|
||||
selectedNodes.add(d.getNode());
|
||||
|
@ -111,15 +111,13 @@ public class DetailViewPane extends AbstractVisualizationPane<DateTime, EventClu
|
||||
|
||||
public DetailViewPane(TimeLineController controller, Pane partPane, Pane contextPane, Region bottomLeftSpacer) {
|
||||
super(controller, partPane, contextPane, bottomLeftSpacer);
|
||||
|
||||
//initialize chart;
|
||||
chart = new EventDetailsChart(controller, dateAxis, verticalAxis, selectedNodes);
|
||||
setChartClickHandler(); //can we push this into chart
|
||||
chart.setData(dataSets);
|
||||
chart.setData(dataSeries);
|
||||
setCenter(chart);
|
||||
|
||||
settingsNodes = new ArrayList<>(new DetailViewSettingsPane().getChildrenUnmodifiable());
|
||||
|
||||
//bind layout fo axes and spacers
|
||||
dateAxis.setTickLabelGap(0);
|
||||
dateAxis.setAutoRanging(false);
|
||||
@ -260,7 +258,10 @@ public class DetailViewPane extends AbstractVisualizationPane<DateTime, EventClu
|
||||
return eventTypeToSeriesMap.computeIfAbsent(et, (EventType t) -> {
|
||||
XYChart.Series<DateTime, EventCluster> series = new XYChart.Series<>();
|
||||
series.setName(et.getDisplayName());
|
||||
dataSets.add(series);
|
||||
Platform.runLater(() -> {
|
||||
dataSeries.add(series);
|
||||
});
|
||||
|
||||
return series;
|
||||
});
|
||||
}
|
||||
@ -299,7 +300,7 @@ public class DetailViewPane extends AbstractVisualizationPane<DateTime, EventClu
|
||||
dateAxis.setUpperBound(new DateTime(upperBound, TimeLineController.getJodaTimeZone()));
|
||||
vertScrollBar.setValue(0);
|
||||
eventTypeToSeriesMap.clear();
|
||||
dataSets.clear();
|
||||
dataSeries.clear();
|
||||
});
|
||||
|
||||
List<EventCluster> eventClusters = filteredEvents.getEventClusters();
|
||||
@ -315,9 +316,9 @@ public class DetailViewPane extends AbstractVisualizationPane<DateTime, EventClu
|
||||
final XYChart.Data<DateTime, EventCluster> xyData = new BarChart.Data<>(new DateTime(cluster.getSpan().getStartMillis()), cluster);
|
||||
|
||||
if (isCancelled() == false) {
|
||||
Platform.runLater(() -> {
|
||||
getSeries(cluster.getEventType()).getData().add(xyData);
|
||||
});
|
||||
// Platform.runLater(() -> {
|
||||
getSeries(cluster.getEventType()).getData().add(xyData);
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,11 +24,11 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
@ -36,6 +36,7 @@ import java.util.stream.Stream;
|
||||
import javafx.animation.KeyFrame;
|
||||
import javafx.animation.KeyValue;
|
||||
import javafx.animation.Timeline;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.InvalidationListener;
|
||||
import javafx.beans.Observable;
|
||||
import javafx.beans.property.ReadOnlyDoubleProperty;
|
||||
@ -148,17 +149,9 @@ public final class EventDetailsChart extends XYChart<DateTime, EventCluster> imp
|
||||
*/
|
||||
private final Group nodeGroup = new Group();
|
||||
private final ObservableList<EventBundle<?>> bundles = FXCollections.observableArrayList();
|
||||
private final Map<ImmutablePair<EventType, String>, EventStripe> stripeDescMap = new HashMap<>();
|
||||
private final Map<EventStripe, EventStripeNode> stripeNodeMap = new HashMap<>();
|
||||
private final Map<EventCluster, Line> projectionMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* list of series of data added to this chart
|
||||
*
|
||||
* TODO: replace this with a map from name to series? -jm
|
||||
*/
|
||||
private final ObservableList<Series<DateTime, EventCluster>> seriesList =
|
||||
FXCollections.<Series<DateTime, EventCluster>>observableArrayList();
|
||||
private final Map<ImmutablePair<EventType, String>, EventStripe> stripeDescMap = new ConcurrentHashMap<>();
|
||||
private final Map<EventStripe, EventStripeNode> stripeNodeMap = new ConcurrentHashMap<>();
|
||||
private final Map<EventCluster, Line> projectionMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* true == layout each event type in its own band, false == mix all the
|
||||
@ -334,21 +327,26 @@ public final class EventDetailsChart extends XYChart<DateTime, EventCluster> imp
|
||||
@Override
|
||||
protected synchronized void dataItemAdded(Series<DateTime, EventCluster> series, int i, Data<DateTime, EventCluster> data) {
|
||||
final EventCluster eventCluster = data.getYValue();
|
||||
bundles.add(eventCluster);
|
||||
|
||||
EventStripe eventStripe = stripeDescMap.merge(ImmutablePair.of(eventCluster.getEventType(), eventCluster.getDescription()),
|
||||
new EventStripe(eventCluster, null),
|
||||
(EventStripe u, EventStripe v) -> {
|
||||
EventStripeNode remove = stripeNodeMap.remove(u);
|
||||
nodeGroup.getChildren().remove(remove);
|
||||
remove = stripeNodeMap.remove(v);
|
||||
nodeGroup.getChildren().remove(remove);
|
||||
EventStripeNode removeU = stripeNodeMap.remove(u);
|
||||
EventStripeNode removeV = stripeNodeMap.remove(v);
|
||||
Platform.runLater(() -> {
|
||||
nodeGroup.getChildren().remove(removeU);
|
||||
nodeGroup.getChildren().remove(removeV);
|
||||
});
|
||||
return EventStripe.merge(u, v);
|
||||
}
|
||||
);
|
||||
EventStripeNode stripeNode = new EventStripeNode(EventDetailsChart.this, eventStripe, null);
|
||||
stripeNodeMap.put(eventStripe, stripeNode);
|
||||
nodeGroup.getChildren().add(stripeNode);
|
||||
data.setNode(stripeNode);
|
||||
Platform.runLater(() -> {
|
||||
bundles.add(eventCluster);
|
||||
nodeGroup.getChildren().add(stripeNode);
|
||||
data.setNode(stripeNode);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -360,11 +358,18 @@ public final class EventDetailsChart extends XYChart<DateTime, EventCluster> imp
|
||||
@Override
|
||||
protected synchronized void dataItemRemoved(Data<DateTime, EventCluster> data, Series<DateTime, EventCluster> series) {
|
||||
EventCluster eventCluster = data.getYValue();
|
||||
bundles.removeAll(eventCluster);
|
||||
Platform.runLater(() -> {
|
||||
bundles.removeAll(eventCluster);
|
||||
});
|
||||
|
||||
EventStripe removedStripe = stripeDescMap.remove(ImmutablePair.of(eventCluster.getEventType(), eventCluster.getDescription()));
|
||||
EventStripeNode removedNode = stripeNodeMap.remove(removedStripe);
|
||||
nodeGroup.getChildren().remove(removedNode);
|
||||
data.setNode(null);
|
||||
if (removedStripe != null) {
|
||||
EventStripeNode removedNode = stripeNodeMap.remove(removedStripe);
|
||||
Platform.runLater(() -> {
|
||||
nodeGroup.getChildren().remove(removedNode);
|
||||
data.setNode(null);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -396,7 +401,6 @@ public final class EventDetailsChart extends XYChart<DateTime, EventCluster> imp
|
||||
for (int j = 0; j < series.getData().size(); j++) {
|
||||
dataItemAdded(series, j, series.getData().get(j));
|
||||
}
|
||||
seriesList.add(series);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -404,7 +408,6 @@ public final class EventDetailsChart extends XYChart<DateTime, EventCluster> imp
|
||||
for (int j = 0; j < series.getData().size(); j++) {
|
||||
dataItemRemoved(series.getData().get(j), series);
|
||||
}
|
||||
seriesList.remove(series);
|
||||
}
|
||||
|
||||
ReadOnlyDoubleProperty maxVScrollProperty() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user