Changeset 18589 in josm for trunk/test/unit


Ignore:
Timestamp:
2022-11-08T18:51:13+01:00 (2 years ago)
Author:
taylor.smock
Message:

Fix #22453: Decrease allocations/CPU samples in Geometry.getDistanceSegmentSegment

Statistics, using Mesa County, CO as the data ("nwr in 'Mesa County, CO'") with
the MapWithAI plugin validations enabled (validation run):

  • CPU samples: 54,604 -> 39,146 (-15,458, -28.3%)
  • Memory allocations: 170,983,028,400 -> 4,645,539,624 (-166,337,488,776, -97.3%)
    • All remaining allocations are from creating a new LatLon during interpolation.
  • .7% improvement in GC threads (overall, see notes).

Notes:

  • getDistanceWayNode was also modified to avoid EastNorth allocations.
  • All remaining allocations come from the creation of new LatLon objects. This may be alleviated when value classes become a thing in Java LTS, and we start using them.
  • Profiling was done from application startup to shut down.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/unit/org/openstreetmap/josm/tools/GeometryTest.java

    r18494 r18589  
    1414import java.util.Collections;
    1515import java.util.List;
     16import java.util.stream.Collectors;
    1617import java.util.stream.Stream;
    1718
     
    164165    }
    165166
     167    static Stream<Arguments> testCentroid() {
     168        // The expected values use the BigDecimal calculations
     169        return Stream.of(
     170            Arguments.of(new LatLon(54.10310051693397, 12.094459783282147),
     171                new LatLon[]{
     172                    new LatLon(54.1031207, 12.094513),
     173                    new LatLon(54.1030973, 12.0945423),
     174                    new LatLon(54.1031188, 12.0944413),
     175                    new LatLon(54.1030578, 12.0945178),
     176                    new LatLon(54.1030658, 12.0944275),
     177                    new LatLon(54.1030826, 12.0945434),
     178                    new LatLon(54.1031079, 12.0944243),
     179                    new LatLon(54.1030515, 12.094495),
     180                    new LatLon(54.103094, 12.0944157),
     181                    new LatLon(54.1031257, 12.0944893),
     182                    new LatLon(54.1030687, 12.0945348),
     183                    new LatLon(54.1031251, 12.0944641),
     184                    new LatLon(54.1030792, 12.0944168),
     185                    new LatLon(54.1030508, 12.0944698),
     186                    new LatLon(54.1030559, 12.0944461),
     187                    new LatLon(54.1031107, 12.0945316)
     188                }),
     189            Arguments.of(new LatLon(54.10309639216633, 12.09463150330365),
     190                new LatLon[]{new LatLon(54.1031205, 12.094653),
     191                    new LatLon(54.1030621, 12.0946675),
     192                    new LatLon(54.1030866, 12.0946874),
     193                    new LatLon(54.1030732, 12.0946816),
     194                    new LatLon(54.1030766, 12.0945701),
     195                    new LatLon(54.1031148, 12.0945865),
     196                    new LatLon(54.1031122, 12.0946719),
     197                    new LatLon(54.1030551, 12.0946473),
     198                    new LatLon(54.1031037, 12.0945724),
     199                    new LatLon(54.1031003, 12.094684),
     200                    new LatLon(54.1030647, 12.0945821),
     201                    new LatLon(54.1031219, 12.0946068),
     202                    new LatLon(54.1031239, 12.0946301),
     203                    new LatLon(54.1030903, 12.0945667),
     204                    new LatLon(54.1030564, 12.0946011),
     205                    new LatLon(54.1030531, 12.0946239)
     206                }),
     207                Arguments.of(new LatLon(54.103185854296896, 12.09457804609505),
     208                    new LatLon[] {
     209                        new LatLon(54.1031981, 12.0945501),
     210                        new LatLon(54.1031782, 12.0945501),
     211                        new LatLon(54.1031726, 12.0946082),
     212                        new LatLon(54.1031955, 12.0946015)
     213                    }),
     214                Arguments.of(new LatLon(54.103180913681705, 12.094425831813119),
     215                    new LatLon[] {
     216                        new LatLon(54.1032057, 12.0943903),
     217                        new LatLon(54.1031517, 12.0944053),
     218                        new LatLon(54.1031877, 12.0943743),
     219                        new LatLon(54.1031697, 12.0943743),
     220                        new LatLon(54.1031517, 12.0944353),
     221                        new LatLon(54.1031697, 12.0944663),
     222                        new LatLon(54.1031877, 12.0944663),
     223                        new LatLon(54.1032057, 12.0944363)
     224                    })
     225        );
     226    }
     227
     228    @ParameterizedTest
     229    @MethodSource
     230    void testCentroid(LatLon expected, LatLon... coordinates) {
     231        LatLon actual = ProjectionRegistry.getProjection()
     232                .eastNorth2latlon(Geometry.getCentroid(Stream.of(coordinates).map(Node::new).collect(Collectors.toList())));
     233        assertTrue(expected.equalsEpsilon((ILatLon) actual), "Expected " + expected + " but got " + actual);
     234    }
     235
    166236    /**
    167237     * Test of {@link Geometry#getCentroidEN} method.
     
    172242        EastNorth en2 = new EastNorth(150, 400);
    173243        EastNorth en3 = new EastNorth(200, 200);
    174         assertEquals(en1, Geometry.getCentroidEN(Arrays.asList(en1)));
     244        assertEquals(en1, Geometry.getCentroidEN(Collections.singletonList(en1)));
    175245        assertEquals(new EastNorth(125, 300), Geometry.getCentroidEN(Arrays.asList(en1, en2)));
    176246        assertEquals(new EastNorth(150, 266d + 2d/3d), Geometry.getCentroidEN(Arrays.asList(en1, en2, en3)));
Note: See TracChangeset for help on using the changeset viewer.