]> gerrit.simantics Code Review - simantics/3d.git/blob - vtk/src/vtk/vtkReferenceInformation.java
Perform view direction switching via vtkCameraAndSelectorAction
[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 }