protected final ConnectionStyle style;
+ private static class Cache {
+ Path2D path = new Path2D.Double();
+ THashSet<RoutePoint> branchPoints = new THashSet<>();
+ }
+
// Caches to avoid creating new objects all the time during rendering
- protected transient Path2D path;
- protected transient THashSet<RoutePoint> branchPoints;
+ protected static ThreadLocal<Cache> caches = ThreadLocal.withInitial(() -> new Cache());
public StyledRouteGraphRenderer(ConnectionStyle style) {
if (style == null)
@Override
public void render(Graphics2D g, RouteGraph rg) {
- if (path == null)
- path = new Path2D.Double();
+ Cache cache = caches.get();
+ Path2D path = cache.path;
+ THashSet<RoutePoint> branchPoints = cache.branchPoints;
+
path.reset();
rg.getPath2D(path);
style.drawPath(g, path, false);
- if (branchPoints == null)
- branchPoints = new THashSet<RoutePoint>();
branchPoints.clear();
for(RouteLine line : rg.getLines()) {
renderLine(g, line, false);