1 /*******************************************************************************
2 * Copyright (c) 2009 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.trace
;
15 import java
.util
.Vector
;
17 import org
.eclipse
.linuxtools
.tmf
.event
.TmfEvent
;
18 import org
.eclipse
.linuxtools
.tmf
.event
.TmfTimeRange
;
19 import org
.eclipse
.linuxtools
.tmf
.event
.TmfTimestamp
;
20 import org
.eclipse
.linuxtools
.tmf
.request
.ITmfRequestHandler
;
21 import org
.eclipse
.linuxtools
.tmf
.request
.TmfDataRequest
;
22 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfSignalManager
;
23 import org
.eclipse
.linuxtools
.tmf
.trace
.ITmfTrace
.StreamContext
;
26 * <b><u>TmfTrace</u></b>
28 * TmfTrace represents a time-ordered set of events tied to a single event
29 * stream. It keeps track of the global information about the event log:
31 * <li> the epoch, a reference timestamp for the whole log (t0)
32 * <li> the span of the log i.e. the timestamps range
33 * <li> the total number of events
35 * As an ITmfRequestHandler, it provides an implementation of processRequest()
36 * which handles event requests.
38 * TODO: Handle concurrent and possibly overlapping requests in a way that
39 * optimizes the stream access and event parsing.
41 public class TmfTrace_old
implements ITmfRequestHandler
<TmfEvent
> {
43 // ========================================================================
45 // ========================================================================
47 private final String fTraceId
;
48 private final ITmfTrace fStream
;
49 private final TmfTimestamp fEpoch
;
51 // ========================================================================
53 // ========================================================================
55 public TmfTrace_old(String id
, ITmfTrace stream
) {
56 this(id
, stream
, TmfTimestamp
.BigBang
);
59 public TmfTrace_old(String id
, ITmfTrace stream
, TmfTimestamp epoch
) {
60 assert stream
!= null;
64 TmfSignalManager
.addListener(this);
67 public void dispose() {
68 TmfSignalManager
.removeListener(this);
71 // ========================================================================
73 // ========================================================================
75 public String
getTraceId() {
79 public ITmfTrace
getStream() {
83 public TmfTimestamp
getEpoch() {
87 public TmfTimeRange
getTimeRange() {
88 return fStream
.getTimeRange();
91 public int getNbEvents() {
92 return fStream
.getNbEvents();
95 public int getIndex(TmfTimestamp ts
) {
96 return fStream
.getIndex(ts
);
99 // ========================================================================
101 // ========================================================================
103 private StreamContext fContext
;
105 public TmfEvent
getEvent(TmfTimestamp timestamp
) {
106 fContext
= fStream
.seekEvent(timestamp
);
107 return fStream
.getNextEvent(fContext
);
110 public TmfEvent
getEvent(int index
) {
111 fContext
= fStream
.seekEvent(index
);
112 return fStream
.getNextEvent(fContext
);
115 public TmfEvent
getNextEvent() {
116 if (fContext
== null) {
117 fContext
= fStream
.seekEvent(TmfTimestamp
.BigBang
);
119 return fStream
.getNextEvent(fContext
);
122 // ========================================================================
123 // ITmfRequestHandler
124 // ========================================================================
127 * @see org.eclipse.linuxtools.tmf.eventlog.ITmfRequestHandler#processRequest(org.eclipse.linuxtools.tmf.eventlog.TmfDataRequest, boolean)
129 public void processRequest(TmfDataRequest
<TmfEvent
> request
, boolean waitForCompletion
) {
130 if (request
.getRange() != null) {
131 serviceEventRequestByTimestamp(request
);
133 serviceEventRequestByIndex(request
);
135 if (waitForCompletion
) {
136 request
.waitForCompletion();
144 private void serviceEventRequestByTimestamp(final TmfDataRequest
<TmfEvent
> request
) {
145 Thread thread
= new Thread() {
148 TmfTimestamp startTime
= request
.getRange().getStartTime();
149 TmfTimestamp endTime
= request
.getRange().getEndTime();
150 int blockSize
= request
.getBlockize();
152 int nbRequestedEvents
= request
.getNbRequestedItems();
153 if (nbRequestedEvents
== -1) {
154 nbRequestedEvents
= Integer
.MAX_VALUE
;
157 Vector
<TmfEvent
> events
= new Vector
<TmfEvent
>();
160 StreamContext context
= new StreamContext(null);
161 TmfEvent event
= fStream
.getEvent(context
, startTime
);
163 while (!request
.isCancelled() && nbEvents
< nbRequestedEvents
&& event
!= null &&
164 event
.getTimestamp().compareTo(endTime
, false) <= 0 )
167 if (++nbEvents
% blockSize
== 0) {
168 TmfEvent
[] result
= new TmfEvent
[events
.size()];
169 events
.toArray(result
);
170 request
.setData(result
);
171 request
.handleData();
172 events
.removeAllElements();
174 // To avoid an unnecessary read passed the last event requested
175 if (nbEvents
< nbRequestedEvents
)
176 event
= fStream
.getNextEvent(context
);
178 TmfEvent
[] result
= new TmfEvent
[events
.size()];
179 events
.toArray(result
);
180 request
.setData(result
);
182 request
.handleData();
193 private void serviceEventRequestByIndex(final TmfDataRequest
<TmfEvent
> request
) {
194 // Thread thread = new Thread() {
196 // public void run() {
197 // int blockSize = request.getBlockize();
199 // int nbRequestedEvents = request.getNbRequestedItems();
200 // if (nbRequestedEvents == -1) {
201 // nbRequestedEvents = Integer.MAX_VALUE;
204 // Vector<TmfEvent> events = new Vector<TmfEvent>();
207 // StreamContext context = new StreamContext(null);
208 // TmfEvent event = fStream.getEvent(context, request.getIndex());
210 // while (!request.isCancelled() && nbEvents < nbRequestedEvents && event != null)
212 // events.add(event);
213 // if (++nbEvents % blockSize == 0) {
214 // TmfEvent[] result = new TmfEvent[events.size()];
215 // events.toArray(result);
216 // request.setData(result);
217 // request.handleData();
218 // events.removeAllElements();
220 // // To avoid an unnecessary read passed the last event requested
221 // if (nbEvents < nbRequestedEvents)
222 // event = fStream.getNextEvent(context);
224 // TmfEvent[] result = new TmfEvent[events.size()];
225 // events.toArray(result);
227 // request.setData(result);
228 // request.handleData();
235 // // ========================================================================
236 // // Signal handlers
237 // // ========================================================================
240 // public void streamUpdated(TmfStreamUpdatedSignal signal) {
241 // TmfSignalManager.dispatchSignal(new TmfTraceUpdatedSignal(this, this));
This page took 0.03555 seconds and 5 git commands to generate.