modules/graphics/src/main/java/com/sun/javafx/tk/quantum/ViewPainter.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2011, 2013, 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) 2011, 2014, 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
*** 47,57 **** import com.sun.prism.ResourceFactory; import com.sun.prism.Texture; import com.sun.prism.impl.PrismSettings; import com.sun.prism.paint.Color; import com.sun.prism.paint.Paint; ! import static com.sun.javafx.logging.PulseLogger.PULSE_LOGGER; import static com.sun.javafx.logging.PulseLogger.PULSE_LOGGING_ENABLED; /** * Responsible for "painting" a scene. It invokes as appropriate API on the root NGNode * of a scene to determine dirty regions, render roots, etc. Also calls the render root --- 47,57 ---- import com.sun.prism.ResourceFactory; import com.sun.prism.Texture; import com.sun.prism.impl.PrismSettings; import com.sun.prism.paint.Color; import com.sun.prism.paint.Paint; ! import com.sun.javafx.logging.PulseLogger; import static com.sun.javafx.logging.PulseLogger.PULSE_LOGGING_ENABLED; /** * Responsible for "painting" a scene. It invokes as appropriate API on the root NGNode * of a scene to determine dirty regions, render roots, etc. Also calls the render root
*** 224,234 **** int status = -1; // If we're rendering with dirty regions, then we'll call the root node to accumulate // the dirty regions and then again to do the pre culling. if (!renderEverything) { ! long start = PULSE_LOGGING_ENABLED ? System.currentTimeMillis() : 0; clip.setBounds(0, 0, width, height); dirtyRegionTemp.makeEmpty(); dirtyRegionContainer.reset(); tx.setToIdentity(); projTx.setIdentity(); --- 224,234 ---- int status = -1; // If we're rendering with dirty regions, then we'll call the root node to accumulate // the dirty regions and then again to do the pre culling. if (!renderEverything) { ! if (PULSE_LOGGING_ENABLED) PulseLogger.newPhase("Dirty Opts Computed"); clip.setBounds(0, 0, width, height); dirtyRegionTemp.makeEmpty(); dirtyRegionContainer.reset(); tx.setToIdentity(); projTx.setIdentity();
*** 238,250 **** tx, projTx); dirtyRegionContainer.roundOut(); if (status == DirtyRegionContainer.DTR_OK) { root.doPreCulling(dirtyRegionContainer, tx, projTx); } - if (PULSE_LOGGING_ENABLED) { - PULSE_LOGGER.renderMessage(start, System.currentTimeMillis(), "Dirty Opts Computed"); - } } // We're going to need to iterate over the dirty region container a lot, so we // might as well save this reference. final int dirtyRegionSize = status == DirtyRegionContainer.DTR_OK ? dirtyRegionContainer.size() : 0; --- 238,247 ----
*** 254,280 **** // NGNode know whether they ought to be paying attention to dirty region // culling bits. g.setHasPreCullingBits(true); // Find the render roots. There is a different render root for each dirty region ! long start = PULSE_LOGGING_ENABLED ? System.currentTimeMillis() : 0; for (int i = 0; i < dirtyRegionSize; ++i) { NodePath path = getRootPath(i); path.clear(); root.getRenderRoot(getRootPath(i), dirtyRegionContainer.getDirtyRegion(i), i, tx, projTx); } - if (PULSE_LOGGING_ENABLED) { - PULSE_LOGGER.renderMessage(start, System.currentTimeMillis(), "Render Roots Discovered"); - } // For debug purposes, write out to the pulse logger the number and size of the dirty // regions that are being used to render this pulse. if (PULSE_LOGGING_ENABLED) { ! PULSE_LOGGER.renderMessage(dirtyRegionSize + " different dirty regions to render"); for (int i=0; i<dirtyRegionSize; i++) { ! PULSE_LOGGER.renderMessage("Dirty Region " + i + ": " + dirtyRegionContainer.getDirtyRegion(i)); ! PULSE_LOGGER.renderMessage("Render Root Path " + i + ": " + getRootPath(i)); } } // If -Dprism.printrendergraph=true then we want to print out the render graph to the // pulse logger, annotated with all the dirty opts. Invisible nodes are skipped. --- 251,274 ---- // NGNode know whether they ought to be paying attention to dirty region // culling bits. g.setHasPreCullingBits(true); // Find the render roots. There is a different render root for each dirty region ! if (PULSE_LOGGING_ENABLED) PulseLogger.newPhase("Render Roots Discovered"); for (int i = 0; i < dirtyRegionSize; ++i) { NodePath path = getRootPath(i); path.clear(); root.getRenderRoot(getRootPath(i), dirtyRegionContainer.getDirtyRegion(i), i, tx, projTx); } // For debug purposes, write out to the pulse logger the number and size of the dirty // regions that are being used to render this pulse. if (PULSE_LOGGING_ENABLED) { ! PulseLogger.addMessage(dirtyRegionSize + " different dirty regions to render"); for (int i=0; i<dirtyRegionSize; i++) { ! PulseLogger.addMessage("Dirty Region " + i + ": " + dirtyRegionContainer.getDirtyRegion(i)); ! PulseLogger.addMessage("Render Root Path " + i + ": " + getRootPath(i)); } } // If -Dprism.printrendergraph=true then we want to print out the render graph to the // pulse logger, annotated with all the dirty opts. Invisible nodes are skipped.
*** 290,300 **** roots.add(nodePath.last()); } } } root.printDirtyOpts(s, roots); ! PULSE_LOGGER.renderMessage(s.toString()); } // Paint each dirty region for (int i = 0; i < dirtyRegionSize; ++i) { final RectBounds dirtyRegion = dirtyRegionContainer.getDirtyRegion(i); --- 284,294 ---- roots.add(nodePath.last()); } } } root.printDirtyOpts(s, roots); ! PulseLogger.addMessage(s.toString()); } // Paint each dirty region for (int i = 0; i < dirtyRegionSize; ++i) { final RectBounds dirtyRegion = dirtyRegionContainer.getDirtyRegion(i);
*** 444,454 **** return; } // If the path is not empty, the first node must be the root node assert(renderRootPath.getCurrentNode() == root); } ! long start = PULSE_LOGGING_ENABLED ? System.currentTimeMillis() : 0; try { GlassScene scene = sceneState.getScene(); scene.clearEntireSceneDirty(); g.setLights(scene.getLights()); g.setDepthBuffer(scene.getDepthBuffer()); --- 438,448 ---- return; } // If the path is not empty, the first node must be the root node assert(renderRootPath.getCurrentNode() == root); } ! if (PULSE_LOGGING_ENABLED) PulseLogger.newPhase("Painting"); try { GlassScene scene = sceneState.getScene(); scene.clearEntireSceneDirty(); g.setLights(scene.getLights()); g.setDepthBuffer(scene.getDepthBuffer());
*** 466,476 **** } g.setCamera(sceneState.getCamera()); g.setRenderRoot(renderRootPath); root.render(g); } finally { - if (PULSE_LOGGING_ENABLED) { - PULSE_LOGGER.renderMessage(start, System.currentTimeMillis(), "Painted"); - } } } } --- 460,467 ----