]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
PR:
authorGlen Mazza <gmazza@apache.org>
Mon, 29 Nov 2004 08:45:14 +0000 (08:45 +0000)
committerGlen Mazza <gmazza@apache.org>
Mon, 29 Nov 2004 08:45:14 +0000 (08:45 +0000)
Obtained from:
Submitted by:
Reviewed by:
1.) More cleanup/commenting of AreaTreeHandler.  Removed the unused (disabled)
manual garbage collection code.

2.) Removed renderContainer from Renderer interface, not required.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198177 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/area/AreaTreeHandler.java
src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
src/java/org/apache/fop/render/AbstractRenderer.java
src/java/org/apache/fop/render/Renderer.java

index abd9f529a00bf2204148ea9c515cb2cf8cb1c2e2..881e259bb3eafae198e6532e0b7e92484cdadafe 100644 (file)
@@ -63,8 +63,6 @@ public class AreaTreeHandler extends FOEventHandler {
     // show statistics after document complete?
     private boolean outputStatistics;
 
-    private static final boolean MEM_PROFILE_WITH_GC = false;
-    
     // for statistics gathering
     private Runtime runtime;
 
@@ -80,7 +78,8 @@ public class AreaTreeHandler extends FOEventHandler {
     // AreaTreeModel in use
     private AreaTreeModel model;
 
-    // hashmap of arraylists containing pages with id area
+    // HashMap of ID's whose area is located on one or more PageViewports
+    // Each ID has an arraylist of PageViewports sharing the area with this ID
     private Map idLocations = new HashMap();
 
     // idref's whose corresponding id's have yet to be found
@@ -120,35 +119,42 @@ public class AreaTreeHandler extends FOEventHandler {
     }
 
     /**
-     * Add an id reference pointing to a page viewport.
-     * @param id the id of the reference
-     * @param pv the page viewport that contains the id reference
+     * Tie a PageViewport with an ID found on a child area of the PV.
+     * Note that an area with a given ID may be on more than one PV, hence
+     * an ID may have more than one PV associated with it.
+     * @param id the property ID of the area
+     * @param pv a page viewport that contains the area with this ID
      */
-    public void addIDRef(String id, PageViewport pv) {
-        List list = (List)idLocations.get(id);
-        if (list == null) {
-            list = new ArrayList();
-            idLocations.put(id, list);
-        }
-        list.add(pv);
-
-        Set todo = (Set) unresolvedIDRefs.get(id);
-        if (todo != null) {
-            for (Iterator iter = todo.iterator(); iter.hasNext();) {
-                Resolvable res = (Resolvable)iter.next();
-                res.resolve(id, list);
+    public void associateIDWithPageViewport(String id, PageViewport pv) {
+        List pvList = (List) idLocations.get(id);
+        if (pvList == null) { // first time ID located
+            pvList = new ArrayList();
+            idLocations.put(id, pvList);
+            pvList.add(pv);
+
+            /* See if this ID is in the unresolved idref list.  Note:
+             * unresolving occurs at first PV found for a given area. 
+             */
+            Set todo = (Set) unresolvedIDRefs.get(id);
+            if (todo != null) {
+                for (Iterator iter = todo.iterator(); iter.hasNext();) {
+                    Resolvable res = (Resolvable) iter.next();
+                    res.resolve(id, pvList);
+                }
+                unresolvedIDRefs.remove(id);
             }
-            unresolvedIDRefs.remove(id);
+        } else {
+            pvList.add(pv);
         }
     }
 
     /**
-     * Get the list of id references for an id.
+     * Get the list of page viewports that have an area with a given id.
      * @param id the id to lookup
-     * @return the list of id references.
+     * @return the list of PageViewports
      */
-    public List getIDReferences(String id) {
-        return (List)idLocations.get(id);
+    public List getPageViewportsContainingID(String id) {
+        return (List) idLocations.get(id);
     }
 
     /**
@@ -176,10 +182,6 @@ public class AreaTreeHandler extends FOEventHandler {
         //Initialize statistics
         if (outputStatistics) {
             pageCount = 0;
-            if (MEM_PROFILE_WITH_GC) {
-                System.gc(); // This takes time but gives better results
-            }
-
             initialMemory = runtime.totalMemory() - runtime.freeMemory();
             startTime = System.currentTimeMillis();
         }
@@ -206,26 +208,16 @@ public class AreaTreeHandler extends FOEventHandler {
         model.endDocument();
 
         if (outputStatistics) {
-            if (MEM_PROFILE_WITH_GC) {
-                // This takes time but gives better results
-                System.gc();
-            }
             long memoryNow = runtime.totalMemory() - runtime.freeMemory();
             long memoryUsed = (memoryNow - initialMemory) / 1024L;
             long timeUsed = System.currentTimeMillis() - startTime;
-            if (log != null && log.isDebugEnabled()) {
-                log.debug("Initial heap size: " + (initialMemory / 1024L) + "Kb");
-                log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
-                log.debug("Total memory used: " + memoryUsed + "Kb");
-                if (!MEM_PROFILE_WITH_GC) {
-                    log.debug("  Memory use is indicative; no GC was performed");
-                    log.debug("  These figures should not be used comparatively");
-                }
-                log.debug("Total time used: " + timeUsed + "ms");
-                log.debug("Pages rendered: " + pageCount);
-                if (pageCount > 0) {
-                    log.debug("Avg render time: " + (timeUsed / pageCount) + "ms/page");
-                }
+            log.debug("Initial heap size: " + (initialMemory / 1024L) + "Kb");
+            log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
+            log.debug("Total memory used: " + memoryUsed + "Kb");
+            log.debug("Total time used: " + timeUsed + "ms");
+            log.debug("Pages rendered: " + pageCount);
+            if (pageCount > 0) {
+                log.debug("Avg render time: " + (timeUsed / pageCount) + "ms/page");
             }
         }
     }
@@ -240,14 +232,8 @@ public class AreaTreeHandler extends FOEventHandler {
     public void endPageSequence(PageSequence pageSequence) {
 
         if (outputStatistics) {
-            if (MEM_PROFILE_WITH_GC) {
-                // This takes time but gives better results
-                System.gc();
-            }
             long memoryNow = runtime.totalMemory() - runtime.freeMemory();
-            if (log != null) {
-                log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
-            }
+            log.debug("Current heap size: " + (memoryNow / 1024L) + "Kb");
         }
 
         // If no main flow, nothing to layout!
@@ -305,18 +291,13 @@ public class AreaTreeHandler extends FOEventHandler {
      */
     private void addOffDocumentItem(OffDocumentItem ext) {
         if (ext instanceof Resolvable) {
-            Resolvable res = (Resolvable)ext;
+            Resolvable res = (Resolvable) ext;
             String[] ids = res.getIDs();
             for (int count = 0; count < ids.length; count++) {
                 if (idLocations.containsKey(ids[count])) {
-                    res.resolve(ids[count], (List)idLocations.get(ids[count]));
+                    res.resolve(ids[count], (List) idLocations.get(ids[count]));
                 } else {
-                    Set todo = (Set) unresolvedIDRefs.get(ids[count]);
-                    if (todo == null) {
-                        todo = new HashSet();
-                        unresolvedIDRefs.put(ids[count], todo);
-                    }
-                    todo.add(ext);
+                    addUnresolvedIDRef(ids[count], res);
                 }
             }
         } else {
index a7ff35a26b3aafb94cd7d844876e4d00f75d897e..08130fca2f51ea3ab37e351925255dbbbd20d1f5 100644 (file)
@@ -289,13 +289,13 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager implements
      * This resolves a reference ID and returns the first PageViewport
      * that contains the reference ID or null if reference not found.
      *
-     * @param ref the reference ID to lookup
+     * @param id the reference ID to lookup
      * @return the first page viewport that contains the reference
      */
-    public PageViewport resolveRefID(String ref) {
-        List list = areaTreeHandler.getIDReferences(ref);
+    public PageViewport resolveRefID(String id) {
+        List list = areaTreeHandler.getPageViewportsContainingID(id);
         if (list != null && list.size() > 0) {
-            return (PageViewport)list.get(0);
+            return (PageViewport) list.get(0);
         }
         return null;
     }
@@ -323,7 +323,7 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager implements
      * @param id the ID reference to add
      */
     public void addIDToPage(String id) {
-        areaTreeHandler.addIDRef(id, curPage);
+        areaTreeHandler.associateIDWithPageViewport(id, curPage);
     }
 
     /**
index a6542a4a84e3261c06d8feedbf23cac1bab4b92a..7fb27999b9267ac5e0c59734877a36bb69173017 100644 (file)
@@ -644,8 +644,11 @@ public abstract class AbstractRenderer
         // Some renderers (ex. Text) don't support images.
     }
 
-    /** @see org.apache.fop.render.Renderer */
-    public void renderContainer(Container cont) {
+    /**
+     * Tells the renderer to render an inline container.
+     * @param cont  The inline container area
+     */
+    protected void renderContainer(Container cont) {
         int saveIP = currentIPPosition;
         int saveBP = currentBPPosition;
 
index e45ed6560b35f6ebaf9bb55a2d92097325ca1b79..52eb2d2e31fd656610ea7ade8db212e3856d3380 100644 (file)
@@ -147,12 +147,5 @@ public interface Renderer {
     void renderPage(PageViewport page)
         throws IOException, FOPException;
 
-    /**
-     * Tells the renderer to render an inline container.
-     *
-     * @param cont  The inline container area
-     */
-    void renderContainer(Container cont);
-
 }