Changeset 16542 in josm


Ignore:
Timestamp:
2020-06-07T09:46:52+02:00 (4 years ago)
Author:
simon04
Message:

fix #19225 - MapRendererPerformanceTest does not render as intended anymore (patch by johsin18, modified)

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/RenderBenchmarkCollector.java

    r12846 r16542  
    6565        @Override
    6666        public void renderStart(double circum) {
    67             timeStart = System.currentTimeMillis();
     67            timeStart = getCurrentTimeMilliseconds();
    6868            super.renderStart(circum);
    6969        }
     
    7171        @Override
    7272        public boolean renderSort() {
    73             timeGenerateDone = System.currentTimeMillis();
     73            timeGenerateDone = getCurrentTimeMilliseconds();
    7474            return super.renderSort();
    7575        }
     
    7777        @Override
    7878        public boolean renderDraw(List<StyleRecord> allStyleElems) {
    79             timeSortingDone = System.currentTimeMillis();
     79            timeSortingDone = getCurrentTimeMilliseconds();
    8080            return super.renderDraw(allStyleElems);
    8181        }
     
    9999        @Override
    100100        public void renderDone() {
    101             timeFinished = System.currentTimeMillis();
     101            timeFinished = getCurrentTimeMilliseconds();
    102102            super.renderDone();
    103103        }
     
    110110            return timeFinished - timeGenerateDone;
    111111        }
     112    }
     113
     114    public static long getCurrentTimeMilliseconds() {
     115        return System.nanoTime() / 1000000; // System.currentTimeMillis has low accuracy, sometimes multiples of 16ms
    112116    }
    113117
  • trunk/test/performance/org/openstreetmap/josm/gui/mappaint/MapRendererPerformanceTest.java

    r16519 r16542  
    44import java.awt.Color;
    55import java.awt.Graphics2D;
     6import java.awt.Point;
    67import java.awt.image.BufferedImage;
    78import java.io.File;
     
    1011import java.util.ArrayList;
    1112import java.util.Collections;
     13import java.util.Comparator;
    1214import java.util.EnumMap;
    13 import java.util.HashMap;
    1415import java.util.List;
    1516import java.util.Locale;
     
    3536import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
    3637import org.openstreetmap.josm.data.projection.ProjectionRegistry;
    37 import org.openstreetmap.josm.gui.MainApplication;
    3838import org.openstreetmap.josm.gui.NavigatableComponent;
    3939import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting;
     
    4646import org.openstreetmap.josm.io.OsmReader;
    4747import org.openstreetmap.josm.testutils.JOSMTestRules;
    48 import org.openstreetmap.josm.tools.Logging;
    4948
    5049import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
     50
     51import static org.junit.Assert.assertEquals;
    5152
    5253/**
     
    100101        img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_ARGB);
    101102        g = (Graphics2D) img.getGraphics();
    102         g.setClip(0, 0, IMG_WIDTH, IMG_WIDTH);
     103        g.setClip(0, 0, IMG_WIDTH, IMG_HEIGHT);
    103104        g.setColor(Color.BLACK);
    104         g.fillRect(0, 0, IMG_WIDTH, IMG_WIDTH);
    105         nc = MainApplication.getMap().mapView;
    106         nc.setBounds(0, 0, IMG_WIDTH, IMG_HEIGHT);
     105        g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
     106
     107        nc = new NavigatableComponent() {
     108            {
     109                setBounds(0, 0, IMG_WIDTH, IMG_HEIGHT);
     110                updateLocationState();
     111            }
     112
     113            @Override
     114            protected boolean isVisibleOnScreen() {
     115                return true;
     116            }
     117
     118            @Override
     119            public Point getLocationOnScreen() {
     120                return new Point(0, 0);
     121            }
     122        };
     123        nc.zoomTo(BOUNDS_CITY_ALL);
    107124
    108125        MapPaintStyles.readFromPreferences();
     
    175192        public LatLon center = LL_CITY;
    176193        public Bounds bounds;
    177         public int noWarmup = 3;
    178         public int noIterations = 7;
     194        public int noWarmup = 20;
     195        public int noIterations = 30;
    179196        public boolean dumpImage = DUMP_IMAGE;
    180197        public boolean clearStyleCache = true;
     
    208225
    209226            StyledMapRenderer renderer = new StyledMapRenderer(g, nc, false);
     227            assertEquals(IMG_WIDTH, (int) nc.getState().getViewWidth());
     228            assertEquals(IMG_HEIGHT, (int) nc.getState().getViewHeight());
    210229
    211230            int noTotal = noWarmup + noIterations;
    212231            for (int i = 1; i <= noTotal; i++) {
    213232                g.setColor(Color.BLACK);
    214                 g.fillRect(0, 0, IMG_WIDTH, IMG_WIDTH);
     233                g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
    215234                if (clearStyleCache) {
    216235                    MapPaintStyles.getStyles().clearCached();
    217                 }
    218                 System.gc();
    219                 System.runFinalization();
    220                 try {
    221                     Thread.sleep(300);
    222                 } catch (InterruptedException ex) {
    223                     Logging.warn(ex);
    224236                }
    225237                BenchmarkData data = new BenchmarkData();
     
    234246                }
    235247                if (i == 1) {
    236                     dumpElementCount(data);
    237                 }
    238                 dumpTimes(data);
     248                    data.dumpElementCount();
     249                }
     250                data.dumpTimes();
    239251                if (dumpImage && i == noTotal) {
    240252                    dumpRenderedImage(label);
     
    276288        test.label = "big";
    277289        test.dumpImage = false;
    278         test.noWarmup = 3;
    279         test.noIterations = 10;
    280290        test.mpGenerate = true;
    281291        test.clearStyleCache = true;
     
    285295    private static void testDrawFeature(Feature feature) throws IOException {
    286296        PerformanceTester test = new PerformanceTester();
    287         test.noWarmup = 3;
    288         test.noIterations = 10;
    289297        test.mpDraw = true;
    290298        test.clearStyleCache = false;
     
    302310        }
    303311        MapPaintStyleLoader.reloadStyles(filterStyleIdx);
     312        dsCity.clearMappaintCache();
    304313        test.run();
    305314    }
     
    333342                MapPaintStyles.toggleStyleActive(filterStyleIdx);
    334343            }
    335             Assert.assertEquals(active, filterStyle.active);
     344            // Assert.assertEquals(active, filterStyle.active);
    336345        }
    337346    }
     
    340349        File outputfile = new File("test-neubrandenburg-"+id+".png");
    341350        ImageIO.write(img, "png", outputfile);
    342     }
    343 
    344     public static void dumpTimes(BenchmarkData bd) {
    345         System.out.print(String.format("gen. %3d, sort %3d, draw %3d%n", bd.getGenerateTime(), bd.getSortTime(), bd.getDrawTime()));
    346     }
    347 
    348     public static void dumpElementCount(BenchmarkData bd) {
    349         System.out.println(bd.recordElementStats().entrySet().stream()
    350                 .map(e -> e.getKey().getSimpleName().replace("Element", "") + ":" + e.getValue()).collect(Collectors.joining(" ")));
    351351    }
    352352
     
    361361        }
    362362
    363         private Map<Class<? extends StyleElement>, Integer> recordElementStats() {
    364             Map<Class<? extends StyleElement>, Integer> styleElementCount = new HashMap<>();
    365             for (StyleRecord r : allStyleElems) {
    366                 Class<? extends StyleElement> klass = r.getStyle().getClass();
    367                 Integer count = styleElementCount.get(klass);
    368                 if (count == null) {
    369                     count = 0;
    370                 }
    371                 styleElementCount.put(klass, count + 1);
    372             }
    373             return styleElementCount;
     363        private Map<Class<? extends StyleElement>, Long> recordElementStats() {
     364            return allStyleElems.stream()
     365                    .collect(Collectors.groupingBy(r -> r.getStyle().getClass(), Collectors.counting()));
     366        }
     367
     368        public void dumpTimes() {
     369            System.out.print(String.format("gen. %4d, sort %4d, draw %4d%n", getGenerateTime(), getSortTime(), getDrawTime()));
     370        }
     371
     372        public void dumpElementCount() {
     373            System.out.println(recordElementStats().entrySet().stream()
     374                    .sorted(Comparator.comparing(e -> e.getKey().getSimpleName()))
     375                    .map(e -> e.getKey().getSimpleName().replace("Element", "") + ":" + e.getValue())
     376                    .collect(Collectors.joining(" ")));
    374377        }
    375378    }
Note: See TracChangeset for help on using the changeset viewer.