Commit | Line | Data |
---|---|---|
6e512b93 ASL |
1 | package org.eclipse.linuxtools.lttng.ui.views.histogram; |
2 | ||
b59134e1 | 3 | import org.eclipse.linuxtools.tmf.event.TmfTimestamp; |
6e512b93 | 4 | |
6e512b93 ASL |
5 | public class HistogramContent { |
6 | ||
ecfd1d41 | 7 | final static double DEFAULT_DIFFERENCE_TO_AVERAGE = 100.0; |
b59134e1 WB |
8 | |
9 | private Long startTime = 0L; | |
10 | private Long endTime = 0L; | |
11 | ||
12 | private Long intervalTime = 0L; | |
13 | private Double heightFactor = 0.0; | |
14 | private Long heighestEventCount = 0L; | |
15 | private Integer maxHeight = 0; | |
6cf16d22 | 16 | private Double maxDifferenceToAverage = DEFAULT_DIFFERENCE_TO_AVERAGE; |
ecfd1d41 | 17 | |
b59134e1 WB |
18 | private Integer readyUpToPosition = 0; |
19 | private Integer fullWindowSize = 0; | |
20 | ||
21 | private Integer averageNumberOfEvents = 0; | |
6e512b93 | 22 | |
b59134e1 WB |
23 | private HistogramElement[] elementTable; |
24 | ||
25 | public HistogramContent(int tableSize, int newWindowsSize, int newMaxHeight) { | |
ecfd1d41 WB |
26 | this(tableSize, newWindowsSize, newMaxHeight, DEFAULT_DIFFERENCE_TO_AVERAGE); |
27 | } | |
28 | ||
29 | public HistogramContent(int tableSize, int newWindowsSize, int newMaxHeight, double newDiffToAverage) { | |
b59134e1 | 30 | fullWindowSize = newWindowsSize; |
6e512b93 | 31 | maxHeight = newMaxHeight; |
ecfd1d41 | 32 | maxDifferenceToAverage = newDiffToAverage; |
6e512b93 | 33 | |
6e512b93 ASL |
34 | createNewTable(tableSize); |
35 | } | |
36 | ||
6e512b93 ASL |
37 | public void createNewTable(int newTableSize) { |
38 | elementTable = new HistogramElement[newTableSize]; | |
39 | ||
40 | for ( int x=0; x<elementTable.length; x++) { | |
41 | elementTable[x] = new HistogramElement(); | |
b59134e1 | 42 | elementTable[x].position = x; |
6e512b93 ASL |
43 | } |
44 | } | |
45 | ||
b59134e1 | 46 | public void resetContentData() { |
6e512b93 ASL |
47 | startTime = 0L; |
48 | endTime = 0L; | |
49 | ||
b59134e1 WB |
50 | intervalTime = 0L; |
51 | heightFactor = 0.0; | |
6e512b93 ASL |
52 | heighestEventCount = 0L; |
53 | ||
54 | readyUpToPosition = 0; | |
55 | } | |
56 | ||
ecfd1d41 | 57 | public void resetTable() { |
6e512b93 | 58 | for ( int x=0; x<elementTable.length; x++) { |
b59134e1 | 59 | elementTable[x].position = x; |
ecfd1d41 | 60 | elementTable[x].firstIntervalTimestamp = startTime + (x*intervalTime); |
6e512b93 ASL |
61 | elementTable[x].intervalNbEvents = 0L; |
62 | elementTable[x].intervalHeight = 0; | |
63 | } | |
64 | } | |
65 | ||
ecfd1d41 WB |
66 | public void printContentInfo() { |
67 | System.out.println("startTime : " + startTime); | |
68 | System.out.println("endTime : " + endTime ); | |
69 | System.out.println(); | |
70 | System.out.println("intervalTime : " + intervalTime); | |
71 | System.out.println("heightFactor : " + heightFactor); | |
72 | System.out.println("heighestEventCount : " + heighestEventCount); | |
73 | System.out.println(); | |
74 | System.out.println("readyUpToPosition : " + readyUpToPosition); | |
75 | } | |
76 | ||
b59134e1 | 77 | public void printTable() { |
6e512b93 | 78 | for ( int x=0; x<elementTable.length; x++) { |
b59134e1 | 79 | System.out.println("X:" + x + " -> " + elementTable[x].intervalNbEvents + ":" + elementTable[x].intervalHeight); |
6e512b93 ASL |
80 | } |
81 | } | |
82 | ||
b59134e1 WB |
83 | public void recalculateEventHeight() { |
84 | ||
ecfd1d41 WB |
85 | if ( getHeighestEventCount() > (maxDifferenceToAverage * averageNumberOfEvents) ) { |
86 | heightFactor = (double)maxHeight/( maxDifferenceToAverage * (double)averageNumberOfEvents); | |
6e512b93 | 87 | } |
b59134e1 WB |
88 | else { |
89 | heightFactor = (double)maxHeight/(double)getHeighestEventCount(); | |
90 | } | |
91 | ||
6e512b93 | 92 | for ( int x=0; x<elementTable.length; x++) { |
b59134e1 | 93 | elementTable[x].intervalHeight = (int)(elementTable[x].intervalNbEvents * heightFactor); |
6e512b93 ASL |
94 | } |
95 | } | |
96 | ||
b59134e1 WB |
97 | /* |
98 | // *** VERIFY *** | |
99 | // We don't need to expose the table, do we ? | |
100 | public HistogramElement[] getElementTable() { | |
101 | return elementTable; | |
6e512b93 | 102 | } |
b59134e1 | 103 | */ |
6e512b93 | 104 | |
b59134e1 WB |
105 | public int getNbElement() { |
106 | return elementTable.length; | |
6e512b93 ASL |
107 | } |
108 | ||
6e512b93 | 109 | public HistogramElement getElementByIndex(int index) { |
b59134e1 | 110 | |
6e512b93 ASL |
111 | HistogramElement returnedElement = null; |
112 | ||
113 | if ( (index >= 0) && (index < elementTable.length) ) { | |
114 | returnedElement = elementTable[index]; | |
115 | } | |
116 | ||
117 | return returnedElement; | |
118 | } | |
119 | ||
b59134e1 WB |
120 | |
121 | public HistogramElement getElementFromXPosition(int position) { | |
122 | ||
123 | HistogramElement returnedElement = null; | |
6e512b93 | 124 | |
b59134e1 | 125 | int index = (int)( ((double)elementTable.length)*((double)position/(double)fullWindowSize) ); |
6e512b93 | 126 | |
6e512b93 ASL |
127 | if ( index < 0) { |
128 | index = 0; | |
129 | } | |
ecfd1d41 WB |
130 | else if ( index >= elementTable.length ) { |
131 | index = (elementTable.length -1); | |
132 | } | |
b59134e1 WB |
133 | |
134 | returnedElement = elementTable[index]; | |
135 | ||
136 | return returnedElement; | |
6e512b93 ASL |
137 | } |
138 | ||
b59134e1 WB |
139 | public HistogramElement getElementFromTimestamp(TmfTimestamp timestamp) { |
140 | ||
141 | HistogramElement returnedElement = null; | |
142 | ||
143 | int index = (int)( (timestamp.getValue() - startTime)/intervalTime ); | |
6e512b93 | 144 | |
6e512b93 ASL |
145 | if ( index < 0) { |
146 | index = 0; | |
147 | } | |
6e512b93 | 148 | |
b59134e1 WB |
149 | returnedElement = elementTable[index]; |
150 | ||
151 | return returnedElement; | |
6e512b93 ASL |
152 | } |
153 | ||
6e512b93 | 154 | |
ecfd1d41 | 155 | public HistogramElement getClosestElementByElementAndTimeInterval(HistogramElement targetElement, Long intervalToElement) { |
6e512b93 | 156 | |
b59134e1 | 157 | HistogramElement returnedElement = null; |
6e512b93 | 158 | |
ecfd1d41 | 159 | if ( (targetElement != null) && (intervalTime > 0) ) { |
b59134e1 WB |
160 | Long elementTime = targetElement.position * intervalTime; |
161 | ||
162 | elementTime = elementTime + intervalToElement; | |
163 | ||
164 | int newPos = (int)(elementTime / intervalTime ); | |
165 | ||
166 | if ( newPos < 0 ) { | |
167 | newPos = 0; | |
168 | } | |
169 | ||
170 | if ( newPos >= elementTable.length ) { | |
171 | newPos = elementTable.length - 1; | |
172 | } | |
173 | ||
b59134e1 WB |
174 | returnedElement = elementTable[newPos]; |
175 | } | |
6e512b93 | 176 | |
b59134e1 | 177 | return returnedElement; |
6e512b93 ASL |
178 | } |
179 | ||
ecfd1d41 WB |
180 | public int getXPositionByPositionAndTimeInterval(int targetPosition, Long intervalToElement) { |
181 | int returnedValue = 0; | |
182 | ||
183 | HistogramElement targetElement = getElementFromXPosition(targetPosition); | |
184 | ||
185 | if ( targetElement != null ) { | |
186 | HistogramElement newElement = getClosestElementByElementAndTimeInterval(targetElement, intervalToElement); | |
187 | ||
188 | if ( newElement != null ) { | |
189 | returnedValue = getXPositionFromElement(newElement); | |
190 | } | |
191 | } | |
192 | ||
193 | return returnedValue; | |
194 | } | |
195 | ||
196 | ||
b59134e1 WB |
197 | public int getXPositionFromElement(HistogramElement targetElement) { |
198 | ||
199 | int returnedPosition = (int)( ((double)targetElement.position / (double)elementTable.length)*(double)fullWindowSize ); | |
6e512b93 | 200 | |
b59134e1 | 201 | return returnedPosition; |
6e512b93 ASL |
202 | } |
203 | ||
6e512b93 | 204 | |
6e512b93 ASL |
205 | public int getAverageNumberOfEvents() { |
206 | return averageNumberOfEvents; | |
207 | } | |
208 | ||
6e512b93 ASL |
209 | public void setAverageNumberOfEvents(int newAverageNumberOfEvents) { |
210 | this.averageNumberOfEvents = newAverageNumberOfEvents; | |
211 | } | |
212 | ||
b59134e1 | 213 | public Long getStartTime() { |
6e512b93 ASL |
214 | return startTime; |
215 | } | |
216 | ||
b59134e1 | 217 | public void setStartTime(Long newStartTime) { |
6e512b93 ASL |
218 | this.startTime = newStartTime; |
219 | } | |
220 | ||
221 | ||
b59134e1 | 222 | public Long getEndTime() { |
6e512b93 ASL |
223 | return endTime; |
224 | } | |
b59134e1 WB |
225 | |
226 | public void setEndTime(Long newEndTime) { | |
6e512b93 ASL |
227 | this.endTime = newEndTime; |
228 | } | |
229 | ||
6cf16d22 WB |
230 | public Long getFullTraceInterval() { |
231 | return ( endTime - startTime ); | |
232 | } | |
6e512b93 | 233 | |
b59134e1 | 234 | public Double getHeightFactor() { |
6e512b93 ASL |
235 | return heightFactor; |
236 | } | |
237 | ||
b59134e1 WB |
238 | public void setHeightFactor(Double newheightFactor) { |
239 | this.heightFactor = newheightFactor; | |
6e512b93 ASL |
240 | } |
241 | ||
6e512b93 | 242 | |
b59134e1 | 243 | public Long getHeighestEventCount() { |
6e512b93 ASL |
244 | return heighestEventCount; |
245 | } | |
246 | ||
b59134e1 WB |
247 | public void setHeighestEventCount(Long newheighestEventCount) { |
248 | this.heighestEventCount = newheighestEventCount; | |
6e512b93 ASL |
249 | } |
250 | ||
b59134e1 | 251 | public Integer getMaxHeight() { |
6e512b93 ASL |
252 | return maxHeight; |
253 | } | |
b59134e1 WB |
254 | |
255 | public void setMaxHeight(Integer maxHeight) { | |
6e512b93 ASL |
256 | this.maxHeight = maxHeight; |
257 | } | |
258 | ||
ecfd1d41 WB |
259 | |
260 | public Double getMaxDifferenceToAverage() { | |
261 | return maxDifferenceToAverage; | |
262 | } | |
263 | ||
264 | public void setMaxDifferenceToAverage(Double newDiffToAverage) { | |
265 | maxDifferenceToAverage = newDiffToAverage; | |
266 | } | |
267 | ||
268 | ||
6e512b93 ASL |
269 | public int getReadyUpToPosition() { |
270 | return readyUpToPosition; | |
271 | } | |
b59134e1 | 272 | |
6e512b93 ASL |
273 | public void setReadyUpToPosition(int newReadyUpToPosition) { |
274 | this.readyUpToPosition = newReadyUpToPosition; | |
275 | } | |
276 | ||
b59134e1 WB |
277 | |
278 | public Long getIntervalTime() { | |
279 | return intervalTime; | |
6e512b93 ASL |
280 | } |
281 | ||
b59134e1 WB |
282 | public void setIntervalTime(Long newInterval) { |
283 | this.intervalTime = newInterval; | |
6e512b93 ASL |
284 | } |
285 | ||
286 | } |