Fix #1 for Bug287488
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / eventlog / TmfTrace.java
CommitLineData
4ab33d2b
AO
1/*******************************************************************************
2 * Copyright (c) 2009 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Francois Chouinard (fchouinard@gmail.com) - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.linuxtools.tmf.eventlog;
14
15import java.io.IOException;
16import java.util.Vector;
17
18import org.eclipse.linuxtools.tmf.event.TmfEvent;
19import org.eclipse.linuxtools.tmf.event.TmfTimeWindow;
20import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
21
22/**
23 * <b><u>TmfEventLog</u></b>
24 * <p>
25 * TmfEventLog represents a time-ordered set of events tied to a single event
26 * stream. It keeps track of the global information about the event log:
27 * <ul>
28 * <li> the epoch, a reference timestamp for the whole log (t0)
29 * <li> the span of the log i.e. the timestamps range
30 * <li> the total number of events
31 * </ul>
32 * As an ITmfRequestHandler, it provides an implementation of process()
33 * which handles event requests.
34 * <p>
35 * TODO: Handle concurrent and possibly overlapping requests in a way that
36 * optimizes the stream access and event parsing.
37 */
78acf24d 38public class TmfTrace implements ITmfRequestHandler {
4ab33d2b
AO
39
40 // ========================================================================
41 // Attributes
42 // ========================================================================
43
44 private final String fId;
45 private final TmfEventStream fStream;
46 private final TmfTimestamp fEpoch;
47
48 // ========================================================================
49 // Constructors
50 // ========================================================================
51
78acf24d 52 public TmfTrace(String id, TmfEventStream stream) {
4ab33d2b
AO
53 assert stream != null;
54 fId = id;
55 fStream = stream;
56 fEpoch = TmfTimestamp.BigBang;
57 }
58
78acf24d 59 public TmfTrace(String id, TmfEventStream stream, TmfTimestamp epoch) {
4ab33d2b
AO
60 assert stream != null;
61 fId = id;
62 fStream = stream;
63 fEpoch = epoch;
64 }
65
66 // ========================================================================
67 // Accessors
68 // ========================================================================
69
70 public String getId() {
71 return fId;
72 }
73
74 public TmfEventStream getStream() {
75 return fStream;
76 }
77
78 public TmfTimestamp getEpoch() {
79 return fEpoch;
80 }
81
82 public TmfTimeWindow getTimeRange() {
83 return fStream.getTimeRange();
84 }
85
86 public int getNbEvents() {
87 return fStream.getNbEvents();
88 }
89
90 // ========================================================================
91 // Operators
92 // ========================================================================
93
94 /* (non-Javadoc)
95 * @see org.eclipse.linuxtools.tmf.eventlog.ITmfRequestExecutor#execute(org.eclipse.linuxtools.tmf.eventlog.TmfEventRequest, boolean)
96 */
4ab33d2b
AO
97 public void process(final TmfEventRequest request, boolean waitForCompletion) {
98 serviceEventRequest(request);
99 if (waitForCompletion) {
100 request.waitForCompletion();
101 }
102 }
103
104 // ========================================================================
105 // Helper functions
106 // ========================================================================
107
108 /* (non-Javadoc)
109 *
110 * @param request
111 */
112 private void serviceEventRequest(final TmfEventRequest request) {
113 Thread thread = new Thread() {
114 @Override
115 public void run() {
116 TmfTimestamp startTime = request.getRange().getStartTime();
117 TmfTimestamp endTime = request.getRange().getEndTime();
118 int blockSize = request.getBlockize();
119
120 int nbRequestedEvents = request.getNbRequestedEvents();
121 if (nbRequestedEvents == -1) {
122 nbRequestedEvents = Integer.MAX_VALUE;
123 }
124
125 Vector<TmfEvent> events = new Vector<TmfEvent>();
126 int nbEvents = 0;
127 try {
128 TmfEvent event = fStream.seek(startTime);
129 while (!request.isCancelled() && nbEvents < nbRequestedEvents && event != null &&
130 event.getTimestamp().compareTo(endTime, false) <= 0 )
131 {
132 events.add(event);
133 if (++nbEvents % blockSize == 0) {
134 request.newEvents(events);
135 events.removeAllElements();
136 }
137 event = fStream.getNextEvent();
138 }
139 request.newEvents(events);
140 request.done();
141 } catch (IOException e) {
142 // TODO Auto-generated catch block
143 e.printStackTrace();
144 }
145 }
146 };
147 thread.start();
148 }
149
150}
This page took 0.029284 seconds and 5 git commands to generate.