From b720ac441a76f8ffcb704c673024875bb501e8f8 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Wed, 11 Apr 2012 14:20:32 -0400 Subject: [PATCH] Add support for LTTng 2.0 command calibrate --- .../icons/elcl16/add-context.gif | Bin 0 -> 331 bytes .../icons/elcl16/calibrate.gif | Bin 0 -> 368 bytes .../icons/elcl16/disable.gif | Bin 0 -> 148 bytes .../icons/elcl16/enable.gif | Bin 0 -> 343 bytes .../icons/obj16/domain.gif | Bin 616 -> 129 bytes .../plugin.properties | 25 ++-- org.eclipse.linuxtools.lttng2.ui/plugin.xml | 75 ++++++++-- .../lttng2/ui/views/control/Messages.java | 4 + .../control/dialogs/AddContextDialog.java | 2 +- .../control/handlers/CalibrateHandler.java | 139 ++++++++++++++++++ .../ui/views/control/messages.properties | 4 + .../model/impl/TraceDomainComponent.java | 17 +++ .../control/service/ILttngControlService.java | 9 +- .../control/service/LTTngControlService.java | 33 ++++- 14 files changed, 282 insertions(+), 26 deletions(-) create mode 100644 org.eclipse.linuxtools.lttng2.ui/icons/elcl16/add-context.gif create mode 100644 org.eclipse.linuxtools.lttng2.ui/icons/elcl16/calibrate.gif create mode 100644 org.eclipse.linuxtools.lttng2.ui/icons/elcl16/disable.gif create mode 100644 org.eclipse.linuxtools.lttng2.ui/icons/elcl16/enable.gif create mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CalibrateHandler.java diff --git a/org.eclipse.linuxtools.lttng2.ui/icons/elcl16/add-context.gif b/org.eclipse.linuxtools.lttng2.ui/icons/elcl16/add-context.gif new file mode 100644 index 0000000000000000000000000000000000000000..030eade39bd8b645f9a1ac69c8e26e6cdf25051b GIT binary patch literal 331 zcmZ?wbhEHb6krfwxT?%hP%yK-eOYt!k}X>f?Av#|wRP#=FXwknSKB&CIWVw2D{ER| z;jDju-%p*oeqERRyh^dZpU*FClG-{^`S;!C&6^J{Ym)l&d~tky|I8BMh=}gc(9V#M z&Si~KQ>LtojO@$my)_aD7; z`{si?`|t0+boKPZSG!)m*}s4P{7-L={d#x$|GRVl|Nm#8HcRzyGg({{Q;t|Bt`_zxnn5-S7XO|NQ^<_y4c||Ns04 z0R|+X_>+Z^fq|Pr2P6hEgMr1d;H2m3y<#uUnzA}+^c_&=$(S`wIAV{%8LtJ2_rLFH qaC!gR>O!K23L9(3lAuZ+i}~l1lf0J7iQdRDyYVt<-ve(J25SJ2Iz)f~ literal 0 HcmV?d00001 diff --git a/org.eclipse.linuxtools.lttng2.ui/icons/elcl16/enable.gif b/org.eclipse.linuxtools.lttng2.ui/icons/elcl16/enable.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cacb96dca98b0bdcf7e7bb62e491f8760b244ce GIT binary patch literal 343 zcmZ?wbhEHb6krfwxXQq=a?`PC3wLx+TirNeg?n^`Z$foW?Q~|F3@j|LW)e*FXQi`}P0h@Bcsk{(tl9|Jz^xzx?_C z`q%$=zyH7g{r~fy|G)qJ|M=(sx4-{?{rmsx|NlS#|Ns3D0u0mxia%Kx85qF&s24FDJgfQ~uRaQAn7P!5RR$a4*mR literal 616 zcmZ?wbhEHb6krfwc*elcHf3GM)HOZRS6zSnrGM6n@ZJ-%cHf^eXQ^f7-tT|@|NQ&^ z>gWIOe*K>@f6>R^|G)nE|MKVmH^2UW`2GLOpZ~9a{eSoS|NGznKmYmv{qO&`zyE*x z`~U0T|G)nI|M~C#yhZaCEuFn$#q|H*rvCr2YVGPN8`n+Tx}k6H*3O-qdbY1A-MGAB z|F({b;>dmL3$N`>zP2yr;;!^F+p{{Vy^n3qYb^7fQ17v^-)_?c`&HeJi#nWVHM@OT z$M5-p^)ve<1ViWX3nW46iyEdLq>qgh|a0mYx?NJ;zsej + name="%commands.control.assign.event"> + name="%commands.control.enable.eventOnChannel"> + + @@ -600,7 +606,7 @@ @@ -660,7 +666,7 @@ + + + + + + + + + + + + + + + + @@ -1058,6 +1089,22 @@ + + + + + + + + + + + diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java index 00cadc68c1..b885828846 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java @@ -70,9 +70,13 @@ final public class Messages extends NLS { public static String TraceControl_GetContextJob; public static String TraceControl_GetContextFailure; + public static String TraceControl_AddContextJob; public static String TraceControl_AddContextFailure; + public static String TraceControl_AddCalibrateJob; + public static String TraceControl_AddCalibrateFailure; + // Dialogs public static String TraceControl_NewDialogTitle; public static String TraceControl_NewNodeExistingConnectionGroupName; diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/AddContextDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/AddContextDialog.java index 18ec7287a9..a8b00d44fb 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/AddContextDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/AddContextDialog.java @@ -49,7 +49,7 @@ public class AddContextDialog extends Dialog implements IAddContextDialog { /** * The icon file for this dialog box. */ - public static final String ADD_CONTEXT_ICON_FILE = "icons/elcl16/edit.gif"; //$NON-NLS-1$ + public static final String ADD_CONTEXT_ICON_FILE = "icons/elcl16/add-context.gif"; //$NON-NLS-1$ // ------------------------------------------------------------------------ // Attributes diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CalibrateHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CalibrateHandler.java new file mode 100644 index 0000000000..552b6a2d01 --- /dev/null +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CalibrateHandler.java @@ -0,0 +1,139 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; + +import java.util.Iterator; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.linuxtools.internal.lttng2.ui.Activator; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.ControlView; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * CalibrateHandler + *

+ * Command handler implementation to execute command calibrate to quantify LTTng overhead. + *

+ */ +public class CalibrateHandler extends BaseControlViewHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The command execution parameter. + */ + protected DomainCommandParameter fParam = null; + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + + if (window == null) { + return false; + } + fLock.lock(); + try { + // Make a copy for thread safety + final DomainCommandParameter param = fParam.clone(); + + Job addJob = new Job(Messages.TraceControl_AddCalibrateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + param.getDomain().calibrate(monitor); + } catch (ExecutionException e) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.TraceControl_AddCalibrateFailure, e); + } + + return Status.OK_STATUS; + } + }; + addJob.setUser(true); + addJob.schedule(); + + } finally { + fLock.unlock(); + } + return Status.OK_STATUS; + } + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#isEnabled() + */ + @Override + public boolean isEnabled() { + + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); + if (page == null) { + return false; + } + + TraceDomainComponent domain = null; + TraceSessionComponent session = null; + + // Check if one domain is selected + ISelection selection = page.getSelection(ControlView.ID); + if (selection instanceof StructuredSelection) { + StructuredSelection structered = ((StructuredSelection) selection); + for (Iterator iterator = structered.iterator(); iterator.hasNext();) { + Object element = (Object) iterator.next(); + if (element instanceof TraceDomainComponent) { + TraceDomainComponent tmpDomain = (TraceDomainComponent) element; + session = (TraceSessionComponent) tmpDomain.getParent(); + + // Add only TraceDomainComponent whose TraceSessionComponent parent is not destroyed + if ((!session.isDestroyed())) { + domain = tmpDomain; + } + } + } + } + + boolean isEnabled = domain != null; + + fLock.lock(); + try { + fParam = null; + if (isEnabled) { + fParam = new DomainCommandParameter(session, domain); + } + } finally { + fLock.unlock(); + } + + return isEnabled; + } +} diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties index d37aebef38..e433e95227 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties @@ -43,9 +43,13 @@ TraceControl_DisableEventsJob=Disabling Events... TraceControl_GetContextJob=Getting Available Contexts... TraceControl_GetContextFailure=Command to get available contexts failed + TraceControl_AddContextJob=Adding Contexts... TraceControl_AddContextFailure=Command to add contexts failed +TraceControl_AddCalibrateJob=Calibrating... +TraceControl_AddCalibrateFailure=Command to calibrate failed + # Dialogs TraceControl_NewDialogTitle=New Connection TraceControl_NewNodeExistingConnectionGroupName=Existing Connections diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceDomainComponent.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceDomainComponent.java index c8373395d2..3970e21aaf 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceDomainComponent.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceDomainComponent.java @@ -289,4 +289,21 @@ public class TraceDomainComponent extends TraceControlComponent { public void addContexts(List contexts, IProgressMonitor monitor) throws ExecutionException { getControlService().addContexts(getSessionName(), null, null, isKernel(), contexts, monitor); } + + /** + * Executes calibrate command to quantify LTTng overhead. + * @throws ExecutionException + */ + public void calibrate() throws ExecutionException { + calibrate(new NullProgressMonitor()); + } + + /** + * Executes calibrate command to quantify LTTng overhead. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void calibrate(IProgressMonitor monitor) throws ExecutionException { + getControlService().calibrate(isKernel(), monitor); + } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/ILttngControlService.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/ILttngControlService.java index 14a6410a32..86bf8d22c4 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/ILttngControlService.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/ILttngControlService.java @@ -197,5 +197,12 @@ public interface ILttngControlService { * @throws ExecutionException */ public void addContexts(String sessionName, String channelName, String eventName, boolean isKernel, List contexts, IProgressMonitor monitor) throws ExecutionException; - + + /** + * Executes calibrate command to quantify LTTng overhead. + * @param isKernel - a flag for indicating kernel or UST. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void calibrate(boolean isKernel, IProgressMonitor monitor) throws ExecutionException; } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java index c471d2f03b..83c44a081c 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java @@ -102,7 +102,11 @@ public class LTTngControlService implements ILttngControlService { * Command to add a context to channels and/or events */ private final static String COMMAND_ADD_CONTEXT = CONTROL_COMMAND + " add-context "; //$NON-NLS-1$ - + /** + * Command to execute calibrate command to quantify LTTng overhead + */ + private final static String COMMAND_CALIBRATE = CONTROL_COMMAND + " calibrate "; //$NON-NLS-1$ + // Command options constants /** * Command line option for output path. @@ -1059,6 +1063,33 @@ public class LTTngControlService implements ILttngControlService { } } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#calibrate(boolean, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void calibrate(boolean isKernel, IProgressMonitor monitor) throws ExecutionException { +// String newSessionName = formatParameter(sessionName); + StringBuffer command = new StringBuffer(COMMAND_CALIBRATE); +// +// command.append(OPTION_SESSION); +// command.append(newSessionName); + + if (isKernel) { + command.append(OPTION_KERNEL); + } else { + command.append(OPTION_UST); + } + + command.append(OPTION_FUNCTION_PROBE); + + ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor); + + if (isError(result)) { + throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + // ------------------------------------------------------------------------ // Helper methods // ------------------------------------------------------------------------ -- 2.34.1