Merge Kernel state system input provider
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.kernel.core / src / org / eclipse / linuxtools / internal / lttng2 / kernel / core / stateprovider / CTFKernelStateInput.java
CommitLineData
efc403bb
AM
1/*******************************************************************************
2 * Copyright (c) 2012 Ericsson
3 * Copyright (c) 2010, 2011 École Polytechnique de Montréal
4 * Copyright (c) 2010, 2011 Alexandre Montplaisir <alexandre.montplaisir@gmail.com>
5 *
6 * All rights reserved. This program and the accompanying materials are
7 * made available under the terms of the Eclipse Public License v1.0 which
8 * accompanies this distribution, and is available at
9 * http://www.eclipse.org/legal/epl-v10.html
10 *
11 *******************************************************************************/
12
13package org.eclipse.linuxtools.internal.lttng2.kernel.core.stateprovider;
14
15import java.io.IOException;
16import java.util.concurrent.ArrayBlockingQueue;
17import java.util.concurrent.BlockingQueue;
18
19import org.eclipse.linuxtools.tmf.core.ctfadaptor.CtfIterator;
20import org.eclipse.linuxtools.tmf.core.ctfadaptor.CtfTmfEvent;
21import org.eclipse.linuxtools.tmf.core.ctfadaptor.CtfTmfTrace;
22import org.eclipse.linuxtools.tmf.core.statesystem.StateSystem;
23import org.eclipse.linuxtools.tmf.core.statesystem.helpers.IStateChangeInput;
24
25/**
26 * This is the state change input plugin for TMF's state system which handles
27 * the LTTng 2.0 kernel traces in CTF format.
28 *
29 * It uses the reference handler defined in CTFKernelHandler.java.
30 *
31 * @author alexmont
32 *
33 */
34public class CTFKernelStateInput implements IStateChangeInput {
35
36 final static int EVENTS_QUEUE_SIZE = 10000;
37
38 private final BlockingQueue<CtfTmfEvent> eventsQueue;
39
40 private final CtfIterator traceReader;
41 private final CTFKernelHandler eventHandler;
42
43 private final Thread eventHandlerThread;
44
45 private boolean ssAssigned;
46
47 /**
48 * Instantiate a new state provider plugin.
49 *
50 * @param traceFile
51 * The LTTng 2.0 kernel trace directory
52 * @throws IOException
53 * If the directory was not found, or not recognized as a CTF
54 * trace.
55 */
56 public CTFKernelStateInput(CtfTmfTrace trace) {
57 eventsQueue = new ArrayBlockingQueue<CtfTmfEvent>(EVENTS_QUEUE_SIZE);
58 traceReader = new CtfIterator(trace);
59 eventHandler = new CTFKernelHandler(eventsQueue);
60 ssAssigned = false;
61
62 eventHandlerThread = new Thread(eventHandler,
63 "CTF Kernel Event Handler"); //$NON-NLS-1$
64 }
65
66 @Override
67 public void run() {
68 if (!ssAssigned) {
69 System.err.println("Cannot start Input thread without a target state system"); //$NON-NLS-1$
70 return;
71 }
72
73 CtfTmfEvent currentEvent;
74
75 eventHandlerThread.start();
76
77 try {
78 currentEvent = traceReader.getCurrentEvent();
79 while (currentEvent != null) {
80 traceReader.advance();
81 eventsQueue.put(currentEvent);
82 currentEvent = traceReader.getCurrentEvent();
83 }
84 /*
85 * We're done reading the trace, insert a null event in the queue to
86 * stop the handler
87 */
88 eventsQueue.put(CtfTmfEvent.getNullEvent());
89 eventHandlerThread.join();
90
91 } catch (InterruptedException e) {
92 e.printStackTrace();
93 }
94 }
95
96 @Override
97 public void assignTargetStateSystem(StateSystem ss) {
98 eventHandler.assignStateSystem(ss);
99 ssAssigned = true;
100 }
101
102 @Override
103 public StateSystem getStateSystem() {
104 return eventHandler.getStateSystem();
105 }
106
107 @Override
108 public long getStartTime() {
109 return traceReader.getCtfTmfTrace().getStartTime().getValue();
110 }
111}
This page took 0.028817 seconds and 5 git commands to generate.