< prev index next >

src/java.desktop/share/classes/sun/java2d/marlin/DMarlinRenderingEngine.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 29,38 **** --- 29,39 ---- import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Path2D; import java.awt.geom.PathIterator; import java.security.AccessController; + import sun.awt.geom.PathConsumer2D; import static sun.java2d.marlin.MarlinUtils.logInfo; import sun.java2d.ReentrantContextProvider; import sun.java2d.ReentrantContextProviderCLQ; import sun.java2d.ReentrantContextProviderTL; import sun.java2d.pipe.AATileGenerator;
*** 44,54 **** * Marlin RendererEngine implementation (derived from Pisces) */ public final class DMarlinRenderingEngine extends RenderingEngine implements MarlinConst { ! private static enum NormMode { ON_WITH_AA { @Override PathIterator getNormalizingPathIterator(final DRendererContext rdrCtx, final PathIterator src) { --- 45,69 ---- * Marlin RendererEngine implementation (derived from Pisces) */ public final class DMarlinRenderingEngine extends RenderingEngine implements MarlinConst { ! // slightly slower ~2% if enabled stroker clipping (lines) but skipping cap / join handling is few percents faster in specific cases ! static final boolean DISABLE_2ND_STROKER_CLIPPING = true; ! ! static final boolean DO_TRACE_PATH = false; ! ! static final boolean DO_CLIP = MarlinProperties.isDoClip(); ! static final boolean DO_CLIP_FILL = true; ! static final boolean DO_CLIP_RUNTIME_ENABLE = MarlinProperties.isDoClipRuntimeFlag(); ! ! private static final float MIN_PEN_SIZE = 1.0f / MIN_SUBPIXELS; ! ! static final double UPPER_BND = Float.MAX_VALUE / 2.0d; ! static final double LOWER_BND = -UPPER_BND; ! ! private enum NormMode { ON_WITH_AA { @Override PathIterator getNormalizingPathIterator(final DRendererContext rdrCtx, final PathIterator src) {
*** 77,98 **** abstract PathIterator getNormalizingPathIterator(DRendererContext rdrCtx, PathIterator src); } - private static final float MIN_PEN_SIZE = 1.0f / NORM_SUBPIXELS; - - static final double UPPER_BND = Float.MAX_VALUE / 2.0d; - static final double LOWER_BND = -UPPER_BND; - - static final boolean DO_CLIP = MarlinProperties.isDoClip(); - static final boolean DO_CLIP_FILL = true; - - static final boolean DO_TRACE_PATH = false; - - static final boolean DO_CLIP_RUNTIME_ENABLE = MarlinProperties.isDoClipRuntimeFlag(); - /** * Public constructor */ public DMarlinRenderingEngine() { super(); --- 92,101 ----
*** 184,194 **** AffineTransform at, BasicStroke bs, boolean thin, boolean normalize, boolean antialias, ! final sun.awt.geom.PathConsumer2D consumer) { final NormMode norm = (normalize) ? ((antialias) ? NormMode.ON_WITH_AA : NormMode.ON_NO_AA) : NormMode.OFF; --- 187,197 ---- AffineTransform at, BasicStroke bs, boolean thin, boolean normalize, boolean antialias, ! final PathConsumer2D consumer) { final NormMode norm = (normalize) ? ((antialias) ? NormMode.ON_WITH_AA : NormMode.ON_NO_AA) : NormMode.OFF;
*** 422,436 **** // deltaTransformConsumer may adjust the clip rectangle: pc2d = transformerPC2D.deltaTransformConsumer(pc2d, strokerat); // stroker will adjust the clip rectangle (width / miter limit): ! pc2d = rdrCtx.stroker.init(pc2d, width, caps, join, miterlimit, scale); if (dashesD != null) { pc2d = rdrCtx.dasher.init(pc2d, dashesD, dashLen, dashphase, recycleDashes); } else if (rdrCtx.doClip && (caps != Stroker.CAP_BUTT)) { if (DO_TRACE_PATH) { pc2d = transformerPC2D.traceClosedPathDetector(pc2d); } --- 425,452 ---- // deltaTransformConsumer may adjust the clip rectangle: pc2d = transformerPC2D.deltaTransformConsumer(pc2d, strokerat); // stroker will adjust the clip rectangle (width / miter limit): ! pc2d = rdrCtx.stroker.init(pc2d, width, caps, join, miterlimit, scale, ! (dashesD == null)); ! ! // Curve Monotizer: ! rdrCtx.monotonizer.init(width); if (dashesD != null) { + if (DO_TRACE_PATH) { + pc2d = transformerPC2D.traceDasher(pc2d); + } pc2d = rdrCtx.dasher.init(pc2d, dashesD, dashLen, dashphase, recycleDashes); + + if (DISABLE_2ND_STROKER_CLIPPING) { + // disable stoker clipping: + rdrCtx.stroker.disableClipping(); + } + } else if (rdrCtx.doClip && (caps != Stroker.CAP_BUTT)) { if (DO_TRACE_PATH) { pc2d = transformerPC2D.traceClosedPathDetector(pc2d); }
*** 625,634 **** --- 641,656 ---- } private static void pathTo(final DRendererContext rdrCtx, final PathIterator pi, DPathConsumer2D pc2d) { + if (USE_PATH_SIMPLIFIER) { + // Use path simplifier at the first step + // to remove useless points + pc2d = rdrCtx.pathSimplifier.init(pc2d); + } + // mark context as DIRTY: rdrCtx.dirty = true; pathToLoop(rdrCtx.double6, pi, pc2d);
*** 1000,1017 **** // Soft reference by default: final String refType = AccessController.doPrivileged( new GetPropertyAction("sun.java2d.renderer.useRef", "soft")); ! ! // Java 1.6 does not support strings in switch: ! if ("hard".equalsIgnoreCase(refType)) { ! REF_TYPE = ReentrantContextProvider.REF_HARD; ! } else if ("weak".equalsIgnoreCase(refType)) { ! REF_TYPE = ReentrantContextProvider.REF_WEAK; ! } else { ! REF_TYPE = ReentrantContextProvider.REF_SOFT; } if (USE_THREAD_LOCAL) { RDR_CTX_PROVIDER = new ReentrantContextProviderTL<DRendererContext>(REF_TYPE) { --- 1022,1042 ---- // Soft reference by default: final String refType = AccessController.doPrivileged( new GetPropertyAction("sun.java2d.renderer.useRef", "soft")); ! switch (refType) { ! default: ! case "soft": ! REF_TYPE = ReentrantContextProvider.REF_SOFT; ! break; ! case "weak": ! REF_TYPE = ReentrantContextProvider.REF_WEAK; ! break; ! case "hard": ! REF_TYPE = ReentrantContextProvider.REF_HARD; ! break; } if (USE_THREAD_LOCAL) { RDR_CTX_PROVIDER = new ReentrantContextProviderTL<DRendererContext>(REF_TYPE) {
*** 1067,1078 **** logInfo("sun.java2d.renderer.useRef = " + refType); logInfo("sun.java2d.renderer.edges = " + MarlinConst.INITIAL_EDGES_COUNT); ! logInfo("sun.java2d.renderer.pixelsize = " ! + MarlinConst.INITIAL_PIXEL_DIM); logInfo("sun.java2d.renderer.subPixel_log2_X = " + MarlinConst.SUBPIXEL_LG_POSITIONS_X); logInfo("sun.java2d.renderer.subPixel_log2_Y = " + MarlinConst.SUBPIXEL_LG_POSITIONS_Y); --- 1092,1105 ---- logInfo("sun.java2d.renderer.useRef = " + refType); logInfo("sun.java2d.renderer.edges = " + MarlinConst.INITIAL_EDGES_COUNT); ! logInfo("sun.java2d.renderer.pixelWidth = " ! + MarlinConst.INITIAL_PIXEL_WIDTH); ! logInfo("sun.java2d.renderer.pixelHeight = " ! + MarlinConst.INITIAL_PIXEL_HEIGHT); logInfo("sun.java2d.renderer.subPixel_log2_X = " + MarlinConst.SUBPIXEL_LG_POSITIONS_X); logInfo("sun.java2d.renderer.subPixel_log2_Y = " + MarlinConst.SUBPIXEL_LG_POSITIONS_Y);
*** 1098,1113 **** --- 1125,1149 ---- + MarlinCache.RLE_MIN_WIDTH); // optimisation parameters logInfo("sun.java2d.renderer.useSimplifier = " + MarlinConst.USE_SIMPLIFIER); + logInfo("sun.java2d.renderer.usePathSimplifier= " + + MarlinConst.USE_PATH_SIMPLIFIER); + logInfo("sun.java2d.renderer.pathSimplifier.pixTol = " + + MarlinProperties.getPathSimplifierPixelTolerance()); logInfo("sun.java2d.renderer.clip = " + MarlinProperties.isDoClip()); logInfo("sun.java2d.renderer.clip.runtime.enable = " + MarlinProperties.isDoClipRuntimeFlag()); + logInfo("sun.java2d.renderer.clip.subdivider = " + + MarlinProperties.isDoClipSubdivider()); + logInfo("sun.java2d.renderer.clip.subdivider.minLength = " + + MarlinProperties.getSubdividerMinLength()); + // debugging parameters logInfo("sun.java2d.renderer.doStats = " + MarlinConst.DO_STATS); logInfo("sun.java2d.renderer.doMonitors = " + MarlinConst.DO_MONITORS);
*** 1121,1130 **** --- 1157,1168 ---- + MarlinConst.LOG_CREATE_CONTEXT); logInfo("sun.java2d.renderer.logUnsafeMalloc = " + MarlinConst.LOG_UNSAFE_MALLOC); // quality settings + logInfo("sun.java2d.renderer.curve_len_err = " + + MarlinProperties.getCurveLengthError()); logInfo("sun.java2d.renderer.cubic_dec_d2 = " + MarlinProperties.getCubicDecD2()); logInfo("sun.java2d.renderer.cubic_inc_d1 = " + MarlinProperties.getCubicIncD1()); logInfo("sun.java2d.renderer.quad_dec_d2 = "
< prev index next >