1 package org
.eclipse
.linuxtools
.internal
.lttng
.core
.event
;
3 import org
.eclipse
.linuxtools
.lttng
.jni
.JniEvent
;
4 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEvent
;
5 import org
.eclipse
.linuxtools
.tmf
.core
.event
.TmfEvent
;
6 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfTrace
;
9 * <b><u>LttngEvent</u></b>
11 * Lttng specific TmfEvent implementation.
13 * The main difference from the basic Tmf implementation is that we keep an
14 * internal reference to the JniEvent
16 * The conversion from this LttngEvent to the JniEvent is then possible.
18 public class LttngEvent
extends TmfEvent
{
20 // Reference to the JNI JniEvent. Should only be used INTERNALLY
21 private JniEvent jniEventReference
= null;
23 // Parameter-less constructor
26 super.setType(LttngEventType
.DEFAULT_EVENT_TYPE
);
30 * Constructor with parameters.
33 * @param timestamp The timestamp of this event
34 * @param source The source of this event
35 * @param type The type of this event
36 * @param content The content of this event
37 * @param reference The reference of this event
38 * @param lttEvent A reference to a valid JniEvent object
40 * @see org.eclipse.linuxtools.tmf.core.event.TmfTimestamp
41 * @see org.eclipse.linuxtools.tmf.core.event.TmfEventSource
42 * @see org.eclipse.linuxtools.internal.lttng.core.event.LttngEventType
43 * @see org.eclipse.linuxtools.internal.lttng.core.event.LttngEventContent
44 * @see org.eclipse.linuxtools.lttng.core.event.LttngEventReference
45 * @see org.eclipse.linuxtools.org.eclipse.linuxtools.lttng.jni.JniEvent
47 public LttngEvent(TmfTrace parent
, LttngTimestamp timestamp
, String source
, LttngEventType type
, LttngEventContent content
,
48 String reference
, JniEvent lttEvent
)
50 super(parent
, timestamp
, source
, type
, content
, reference
);
51 jniEventReference
= lttEvent
;
52 super.setTrace(parent
);
59 * @param oldEvent Event we want to copy from.
61 public LttngEvent(ITmfEvent oldEvent
) {
63 (TmfTrace
) oldEvent
.getTrace(),
64 (LttngTimestamp
)oldEvent
.getTimestamp(),
66 (LttngEventType
)oldEvent
.getType(),
67 (LttngEventContent
)oldEvent
.getContent(),
68 oldEvent
.getReference(),
69 ((LttngEvent
) oldEvent
).jniEventReference
73 * Set a new parent trace for this event
75 * @param parentTrace The new parent
77 public void setParentTrace(TmfTrace parentTrace
) {
78 super.setTrace(parentTrace
);
83 * Return the channel name of this event.<p>
85 * @return Channel (tracefile) for this event
87 public String
getChannelName() {
88 return this.getType().getTracefileName();
92 * Cpu id number of this event.
97 public long getCpuId() {
98 return this.getType().getCpuId();
102 * Marker name of this event.
105 * @return Marker name
107 public String
getMarkerName() {
108 return this.getType().getMarkerName();
112 * Marker id of this event.
117 public int getMarkerId() {
118 return this.getType().getMarkerId();
122 public LttngEventContent
getContent() {
123 return (LttngEventContent
) super.getContent();
126 public void setContent(LttngEventContent newContent
) {
127 super.setContent(newContent
);
131 public void setReference(String reference
) {
132 super.setReference(reference
);
136 public LttngEventType
getType() {
137 return (LttngEventType
) super.getType();
140 public void setType(LttngEventType newType
) {
141 super.setType(newType
);
145 * Set a new JniReference for this event.
148 * Note : Reference is used to get back to the Jni during event parsing and
149 * need to be consistent.
151 * @param newJniEventReference New reference
153 * @see org.eclipse.linuxtools.org.eclipse.linuxtools.lttng.jni.JniEvent
155 public synchronized void updateJniEventReference(JniEvent newJniEventReference
) {
156 this.jniEventReference
= newJniEventReference
;
160 * Convert this event into a Jni JniEvent.
163 * Note : Some verifications are done to make sure the event is still valid
164 * on the Jni side before conversion.<br>
165 * If it is not the case, null will be returned.
167 * @return The converted JniEvent
169 * @see org.eclipse.linuxtools.org.eclipse.linuxtools.lttng.jni.JniEvent
171 public synchronized JniEvent
convertEventTmfToJni() {
172 JniEvent tmpEvent
= null;
175 // Should we remove the check to save some time??
177 // We don't want to send away events that are outdated as their
178 // informations could be invalid
179 // If the timestamp between the event and the trace are not coherent we
180 // will not perform the conversion
181 if (jniEventReference
.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime() == getTimestamp().getValue()) {
182 tmpEvent
= jniEventReference
;
185 .println("convertEventTmfToJni() failed: Unsynced Timestamp > TMF:" + getTimestamp().getValue() + " <--> JNI:" + jniEventReference
.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime()); //$NON-NLS-1$//$NON-NLS-2$
191 @SuppressWarnings("nls")
192 public String
toString() {
193 StringBuffer result
= new StringBuffer("[LttngEvent(");
194 result
.append("Timestamp:" + getTimestamp().getValue());
195 result
.append(",Channel:" + getChannelName());
196 result
.append(",CPU:" + getCpuId());
197 result
.append(",Marker:" + getMarkerName());
198 result
.append(",Content:" + getContent() + ")]");
200 return result
.toString();
204 public LttngEvent
clone() {
205 LttngEvent clone
= (LttngEvent
) super.clone();
206 clone
.getContent().setEvent(clone
);
207 clone
.jniEventReference
= jniEventReference
;
212 * @see java.lang.Object#hashCode()
215 public synchronized int hashCode() {
216 final int prime
= 31;
217 int result
= super.hashCode();
218 result
= prime
* result
+ ((jniEventReference
== null) ?
0 : jniEventReference
.hashCode());
223 * @see java.lang.Object#equals(java.lang.Object)
226 public synchronized boolean equals(Object obj
) {
230 if (!super.equals(obj
)) {
233 if (!(obj
instanceof LttngEvent
)) {
236 LttngEvent other
= (LttngEvent
) obj
;
237 if (jniEventReference
== null) {
238 if (other
.jniEventReference
!= null) {
241 } else if (!jniEventReference
.equals(other
.jniEventReference
)) {