1 package org
.eclipse
.linuxtools
.lttng
.ui
.views
.histogram
;
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
;
9 public class HistogramRequest
extends TmfEventRequest
<LttngEvent
> {
11 final static int MAX_EVENTS_PER_REQUEST
= 1;
12 final static int REDRAW_EVERY_NB_EVENTS
= 10000;
14 private HistogramContent histogramContent
= null;
16 private int lastPos
= 0;
17 private long lastRangeTime
= 0L;
18 private long nbEventsInRange
= 1;
20 private int nbPosNotEmpty
= 1;
21 private int nbEventRead
= 0;
23 private TraceCanvas parentCanvas
= null;
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
);
29 histogramContent
= newContent
;
30 parentCanvas
= newParentCanvas
;
32 lastRangeTime
= histogramContent
.getStartTime();
34 histogramContent
.resetContentData();
38 public void handleData() {
39 TmfEvent
[] result
= getData();
40 TmfEvent
[] evt
= new TmfEvent
[1];
42 evt
[0] = (result
.length
> 0) ? result
[0] : null;
44 if ( evt
[0] != null ) {
45 LttngEvent tmpEvent
= (LttngEvent
)evt
[0];
47 long distance
= ( tmpEvent
.getTimestamp().getValue() - lastRangeTime
);
49 if ( distance
> histogramContent
.getIntervalTime() ) {
51 histogramContent
.getElementByIndex(lastPos
).intervalNbEvents
= nbEventsInRange
;
52 lastRangeTime
= tmpEvent
.getTimestamp().getValue();
54 lastPos
= (int)((lastRangeTime
- histogramContent
.getStartTime()) / histogramContent
.getIntervalTime() );
55 histogramContent
.getElementByIndex(lastPos
).firstIntervalTimestamp
= lastRangeTime
;
57 histogramContent
.setReadyUpToPosition(lastPos
);
64 if ( nbEventsInRange
> histogramContent
.getHeighestEventCount() ) {
65 histogramContent
.setHeighestEventCount(nbEventsInRange
);
71 if ( nbEventRead
% REDRAW_EVERY_NB_EVENTS
== 0 ) {
72 redrawAsyncronously();
79 public void handleCompleted() {
80 redrawAsyncronously();
84 public void handleSuccess() {
88 public void handleFailure() {
92 public void handleCancel() {
96 public void updateEventsInfo() {
97 int averageNumberOfEvents
= nbEventRead
/ nbPosNotEmpty
;
98 histogramContent
.setAverageNumberOfEvents(averageNumberOfEvents
);
99 histogramContent
.recalculateEventHeight();
102 public void redrawAsyncronously() {
105 Display display
= parentCanvas
.getDisplay();
106 display
.asyncExec(new Runnable() {
108 parentCanvas
.redraw();