]> gerrit.simantics Code Review - simantics/3d.git/blob - vtk/src/vtk/vtkReferenceInformation.java
Include old 64-bit versions of org.jcae.opencascade and vtk bundles
[simantics/3d.git] / vtk / src / vtk / vtkReferenceInformation.java
1 package vtk;
2
3 import java.util.HashMap;
4 import java.util.Map.Entry;
5 import java.util.concurrent.atomic.AtomicInteger;
6
7 /**
8  * Information object return by the Garbage collector. This allow the user to
9  * monitor what kind of vtkObject and how many have been removed and kept during
10  * the Garbage collection call.
11  *
12  * @author sebastien jourdain - sebastien.jourdain@kitware.com
13  */
14 public class vtkReferenceInformation {
15     private int numberOfObjectsToFree;
16     private int numberOfObjectsStillReferenced;
17     private HashMap<String, AtomicInteger> classesKept;
18     private HashMap<String, AtomicInteger> classesRemoved;
19     private boolean keepTrackOfClassNames;
20
21     public vtkReferenceInformation(int nbToFree, int nbToKeep, int totalSize) {
22         this.numberOfObjectsToFree = nbToFree;
23         this.numberOfObjectsStillReferenced = nbToKeep;
24         this.keepTrackOfClassNames = false;
25     }
26
27     public vtkReferenceInformation(boolean keepTrackOfClassNames) {
28         this.numberOfObjectsToFree = 0;
29         this.numberOfObjectsStillReferenced = 0;
30         this.keepTrackOfClassNames = keepTrackOfClassNames;
31     }
32
33     public int getTotalNumberOfObjects() {
34         return numberOfObjectsStillReferenced + numberOfObjectsToFree;
35     }
36
37     public int getNumberOfObjectsToFree() {
38         return numberOfObjectsToFree;
39     }
40
41     public int getTotalNumberOfObjectsStillReferenced() {
42         return numberOfObjectsStillReferenced;
43     }
44
45     public void setNumberOfObjectsStillReferenced(int numberOfObjectsStillReferenced) {
46         this.numberOfObjectsStillReferenced = numberOfObjectsStillReferenced;
47     }
48
49     public void setNumberOfObjectsToFree(int numberOfObjectsToFree) {
50         this.numberOfObjectsToFree = numberOfObjectsToFree;
51     }
52
53     public void addFreeObject(String className) {
54         this.numberOfObjectsToFree++;
55         if (keepTrackOfClassNames) {
56             if (classesRemoved == null && className != null) {
57                 classesRemoved = new HashMap<String, AtomicInteger>();
58             }
59             AtomicInteger counter = classesRemoved.get(className);
60             if (counter == null) {
61                 classesRemoved.put(className, new AtomicInteger(1));
62             } else {
63                 counter.incrementAndGet();
64             }
65         }
66     }
67
68     public void addKeptObject(String className) {
69         this.numberOfObjectsStillReferenced++;
70         if (keepTrackOfClassNames && className != null) {
71             if (classesKept == null) {
72                 classesKept = new HashMap<String, AtomicInteger>();
73             }
74             AtomicInteger counter = classesKept.get(className);
75             if (counter == null) {
76                 classesKept.put(className, new AtomicInteger(1));
77             } else {
78                 counter.incrementAndGet();
79             }
80         }
81     }
82
83     public String listKeptReferenceToString() {
84         if (classesKept == null) {
85             return "";
86         }
87         final StringBuilder builder = new StringBuilder(500);
88         builder.append("List of classes kept in Java layer:\n");
89         for (Entry<String, AtomicInteger> entry : classesKept.entrySet()) {
90             builder.append(" - ").append(entry.getKey()).append(": ").append(entry.getValue().toString()).append("\n");
91         }
92         return builder.toString();
93     }
94
95     public String listRemovedReferenceToString() {
96         if (classesRemoved == null) {
97             return "";
98         }
99         final StringBuilder builder = new StringBuilder(500);
100         builder.append("List of classes removed in Java layer:\n");
101         for (Entry<String, AtomicInteger> entry : classesRemoved.entrySet()) {
102             builder.append(" - ").append(entry.getKey()).append(": ").append(entry.getValue().toString()).append("\n");
103         }
104         return builder.toString();
105     }
106
107     public String toString() {
108         final StringBuilder builder = new StringBuilder(50);
109         builder.append("VTK Gabage Collection: free(");
110         builder.append(this.numberOfObjectsToFree);
111         builder.append(") - keep(");
112         builder.append(this.numberOfObjectsStillReferenced);
113         builder.append(") - total(");
114         builder.append(this.getTotalNumberOfObjects());
115         builder.append(")");
116         return builder.toString();
117     }
118 }