Changeset 17822 in josm


Ignore:
Timestamp:
2021-04-26T19:31:01+02:00 (3 years ago)
Author:
simon04
Message:

see #20745 - Avoid heap allocations in OsmReader

12.0% of OsmReaderPerformanceTest amount to org.openstreetmap.josm.data.osm.OsmPrimitive.updateTagged

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r17749 r17822  
    570570        // 'area' is not really uninteresting (putting it in that list may have unpredictable side effects)
    571571        // but it's clearly not enough to consider an object as tagged (see #9261)
    572         updateFlagsNoLock(FLAG_TAGGED, keys()
     572        updateFlagsNoLock(FLAG_TAGGED, hasKeys() && keys()
    573573                .anyMatch(key -> !isUninterestingKey(key) && !"area".equals(key)));
    574574    }
  • trunk/src/org/openstreetmap/josm/io/AbstractReader.java

    r17754 r17822  
    595595         * @throws IllegalDataException in case of invalid data
    596596         */
    597         void accept(Node n) throws IllegalDataException;
     597        void accept(NodeData n) throws IllegalDataException;
    598598    }
    599599
     
    606606         * @throws IllegalDataException in case of invalid data
    607607         */
    608         void accept(Way w, Collection<Long> nodeIds) throws IllegalDataException;
     608        void accept(WayData w, Collection<Long> nodeIds) throws IllegalDataException;
    609609    }
    610610
     
    617617         * @throws IllegalDataException in case of invalid data
    618618         */
    619         void accept(Relation r, Collection<RelationMemberData> members) throws IllegalDataException;
     619        void accept(RelationData r, Collection<RelationMemberData> members) throws IllegalDataException;
    620620    }
    621621
     
    643643
    644644    private Node addNode(NodeData nd, NodeReader nodeReader) throws IllegalDataException {
    645         Node n = (Node) buildPrimitive(nd);
    646         nodeReader.accept(n);
    647         return n;
     645        nodeReader.accept(nd);
     646        return (Node) buildPrimitive(nd);
    648647    }
    649648
     
    691690        WayData wd = new WayData(0);
    692691        commonReader.accept(wd);
    693         Way w = (Way) buildPrimitive(wd);
    694692
    695693        Collection<Long> nodeIds = new ArrayList<>();
    696         wayReader.accept(w, nodeIds);
    697         if (w.isDeleted() && !nodeIds.isEmpty()) {
    698             Logging.info(tr("Deleted way {0} contains nodes", Long.toString(w.getUniqueId())));
     694        wayReader.accept(wd, nodeIds);
     695        if (wd.isDeleted() && !nodeIds.isEmpty()) {
     696            Logging.info(tr("Deleted way {0} contains nodes", Long.toString(wd.getUniqueId())));
    699697            nodeIds = new ArrayList<>();
    700698        }
    701699        ways.put(wd.getUniqueId(), nodeIds);
    702         return w;
     700        return (Way) buildPrimitive(wd);
    703701    }
    704702
     
    706704        RelationData rd = new RelationData(0);
    707705        commonReader.accept(rd);
    708         Relation r = (Relation) buildPrimitive(rd);
    709706
    710707        Collection<RelationMemberData> members = new ArrayList<>();
    711         relationReader.accept(r, members);
    712         if (r.isDeleted() && !members.isEmpty()) {
    713             Logging.info(tr("Deleted relation {0} contains members", Long.toString(r.getUniqueId())));
     708        relationReader.accept(rd, members);
     709        if (rd.isDeleted() && !members.isEmpty()) {
     710            Logging.info(tr("Deleted relation {0} contains members", Long.toString(rd.getUniqueId())));
    714711            members = new ArrayList<>();
    715712        }
    716713        relations.put(rd.getUniqueId(), members);
    717         return r;
    718     }
    719 
    720     protected final RelationMemberData parseRelationMember(Relation r, String ref, String type, String role) throws IllegalDataException {
     714        return (Relation) buildPrimitive(rd);
     715    }
     716
     717    protected final RelationMemberData parseRelationMember(RelationData r, String ref, String type, String role) throws IllegalDataException {
    721718        if (ref == null) {
    722719            throw new IllegalDataException(tr("Missing attribute ''ref'' on member in relation {0}.",
     
    731728    }
    732729
    733     protected final RelationMemberData parseRelationMember(Relation r, long id, String type, String role) throws IllegalDataException {
     730    protected final RelationMemberData parseRelationMember(RelationData r, long id, String type, String role) throws IllegalDataException {
    734731        if (id == 0) {
    735732            throw new IllegalDataException(tr("Incomplete <member> specification with ref=0"));
  • trunk/src/org/openstreetmap/josm/io/OsmJsonReader.java

    r17232 r17822  
    1919import org.openstreetmap.josm.data.osm.DataSet;
    2020import org.openstreetmap.josm.data.osm.PrimitiveData;
    21 import org.openstreetmap.josm.data.osm.Relation;
     21import org.openstreetmap.josm.data.osm.RelationData;
    2222import org.openstreetmap.josm.data.osm.RelationMemberData;
    2323import org.openstreetmap.josm.data.osm.Tagged;
    24 import org.openstreetmap.josm.data.osm.Way;
     24import org.openstreetmap.josm.data.osm.WayData;
    2525import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    2626import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    144144    }
    145145
    146     private static void readWayNodesAndTags(JsonObject item, Way w, Collection<Long> nodeIds) {
     146    private static void readWayNodesAndTags(JsonObject item, WayData w, Collection<Long> nodeIds) {
    147147        for (JsonValue v : item.getJsonArray("nodes")) {
    148148            nodeIds.add(((JsonNumber) v).longValue());
     
    155155    }
    156156
    157     private void readRelationMembersAndTags(JsonObject item, Relation r, Collection<RelationMemberData> members)
     157    private void readRelationMembersAndTags(JsonObject item, RelationData r, Collection<RelationMemberData> members)
    158158            throws IllegalDataException {
    159159        JsonArray jsonArray = item.getJsonArray("members");
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r16641 r17822  
    2222import org.openstreetmap.josm.data.osm.DataSet;
    2323import org.openstreetmap.josm.data.osm.Node;
     24import org.openstreetmap.josm.data.osm.NodeData;
    2425import org.openstreetmap.josm.data.osm.PrimitiveData;
    2526import org.openstreetmap.josm.data.osm.Relation;
     27import org.openstreetmap.josm.data.osm.RelationData;
    2628import org.openstreetmap.josm.data.osm.RelationMemberData;
    2729import org.openstreetmap.josm.data.osm.Tagged;
    2830import org.openstreetmap.josm.data.osm.Way;
     31import org.openstreetmap.josm.data.osm.WayData;
    2932import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    3033import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    235238    }
    236239
    237     private void parseNodeTags(Node n) throws IllegalDataException {
     240    private void parseNodeTags(NodeData n) throws IllegalDataException {
    238241        try {
    239242            while (parser.hasNext()) {
     
    263266    }
    264267
    265     private void parseWayNodesAndTags(Way w, Collection<Long> nodeIds) throws IllegalDataException {
     268    private void parseWayNodesAndTags(WayData w, Collection<Long> nodeIds) throws IllegalDataException {
    266269        try {
    267270            while (parser.hasNext()) {
     
    287290    }
    288291
    289     private long parseWayNode(Way w) throws XMLStreamException {
     292    private long parseWayNode(WayData w) throws XMLStreamException {
    290293        if (parser.getAttributeValue(null, "ref") == null) {
    291294            throwException(
     
    312315    }
    313316
    314     private void parseRelationMembersAndTags(Relation r, Collection<RelationMemberData> members) throws IllegalDataException {
     317    private void parseRelationMembersAndTags(RelationData r, Collection<RelationMemberData> members) throws IllegalDataException {
    315318        try {
    316319            while (parser.hasNext()) {
     
    336339    }
    337340
    338     private RelationMemberData parseRelationMember(Relation r) throws XMLStreamException {
     341    private RelationMemberData parseRelationMember(RelationData r) throws XMLStreamException {
    339342        RelationMemberData result = null;
    340343        try {
Note: See TracChangeset for help on using the changeset viewer.