Draft of a HistogramView, in process of merging into the TimeFrameView
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / histogram / HistogramRequest.java
1 package org.eclipse.linuxtools.lttng.ui.views.histogram;
2
3 import org.eclipse.linuxtools.lttng.event.LttngEvent;
4 import org.eclipse.linuxtools.tmf.event.TmfEvent;
5 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
6 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
7 import org.eclipse.swt.widgets.Display;
8
9 public class HistogramRequest extends TmfEventRequest<LttngEvent> {
10
11 final static int MAX_EVENTS_PER_REQUEST = 1;
12 final static int REDRAW_EVERY_NB_EVENTS = 10000;
13
14 private HistogramContent histogramContent = null;
15
16 private int lastPos = 0;
17 private long lastRangeTime = 0L;
18 private long nbEventsInRange = 1;
19
20 private int nbPosNotEmpty = 1;
21 private int nbEventRead = 0;
22
23 private TraceCanvas parentCanvas = null;
24
25 @SuppressWarnings("unchecked")
26 public HistogramRequest(Class<? extends TmfEvent> dataType, TmfTimeRange range, int nbRequested, HistogramContent newContent, TraceCanvas newParentCanvas) {
27 super((Class<LttngEvent>)dataType, range, nbRequested, MAX_EVENTS_PER_REQUEST);
28
29 histogramContent = newContent;
30 parentCanvas = newParentCanvas;
31
32 lastRangeTime = histogramContent.getStartTime();
33
34 histogramContent.resetContentData();
35 }
36
37 @Override
38 public void handleData() {
39 TmfEvent[] result = getData();
40 TmfEvent[] evt = new TmfEvent[1];
41
42 evt[0] = (result.length > 0) ? result[0] : null;
43
44 if ( evt[0] != null ) {
45 LttngEvent tmpEvent = (LttngEvent)evt[0];
46
47 long distance = ( tmpEvent.getTimestamp().getValue() - lastRangeTime );
48
49 if ( distance > histogramContent.getIntervalTime() ) {
50
51 histogramContent.getElementByIndex(lastPos).intervalNbEvents = nbEventsInRange;
52 lastRangeTime = tmpEvent.getTimestamp().getValue();
53
54 lastPos = (int)((lastRangeTime - histogramContent.getStartTime()) / histogramContent.getIntervalTime() );
55 histogramContent.getElementByIndex(lastPos).firstIntervalTimestamp = lastRangeTime;
56
57 histogramContent.setReadyUpToPosition(lastPos);
58
59 nbPosNotEmpty++;
60 nbEventsInRange = 1;
61 }
62 else {
63 nbEventsInRange++;
64 if ( nbEventsInRange > histogramContent.getHeighestEventCount() ) {
65 histogramContent.setHeighestEventCount(nbEventsInRange);
66 }
67 }
68
69 nbEventRead++;
70
71 if ( nbEventRead % REDRAW_EVERY_NB_EVENTS == 0 ) {
72 redrawAsyncronously();
73 }
74
75 }
76 }
77
78 @Override
79 public void handleCompleted() {
80 redrawAsyncronously();
81 }
82
83 @Override
84 public void handleSuccess() {
85 }
86
87 @Override
88 public void handleFailure() {
89 }
90
91 @Override
92 public void handleCancel() {
93 }
94
95
96 public void updateEventsInfo() {
97 int averageNumberOfEvents = nbEventRead / nbPosNotEmpty;
98 histogramContent.setAverageNumberOfEvents(averageNumberOfEvents);
99 histogramContent.recalculateEventHeight();
100 }
101
102 public void redrawAsyncronously() {
103 updateEventsInfo();
104
105 Display display = parentCanvas.getDisplay();
106 display.asyncExec(new Runnable() {
107 public void run() {
108 parentCanvas.redraw();
109 }
110 });
111 }
112
113 }
This page took 0.046745 seconds and 6 git commands to generate.