/******************************************************************************* * Copyright (c) 2004,2017 Red Hat, Inc. * 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: * Keith Seitz <keiths@redhat.com> - initial API and implementation * Kent Sebastian <ksebasti@redhat.com> - *******************************************************************************/ package org.eclipse.linuxtools.internal.oprofile.launch.configuration; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.linuxtools.internal.oprofile.core.Oprofile; import org.eclipse.linuxtools.internal.oprofile.core.Oprofile.OprofileProject; import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy; import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager; /** * This class wraps OProfile's global launch options for the * Eclipse launcher facility. */ public class LaunchOptions { // The launch options for the daemon private OprofileDaemonOptions options; private String oprofileComboText; private int executionsNumber; public LaunchOptions() { options = new OprofileDaemonOptions(); oprofileComboText = OprofileProject.OPERF_BINARY; executionsNumber = 1; } /** * Determines whether the global oprofile options represented by this * object are valid * @return whether the options are valid */ public boolean isValid() { IRemoteFileProxy proxy = null; try { proxy = RemoteProxyManager.getInstance().getFileProxy(getOprofileProject()); } catch (CoreException e) { e.printStackTrace(); } // The only point of contention is whether the specified vmlinux *file* exists. String fn = options.getKernelImageFile(); if (fn != null && fn.length() > 0) { IFileStore fileStore = proxy.getResource(options.getKernelImageFile()); return (fileStore.fetchInfo().exists() && !fileStore.fetchInfo().isDirectory()); } return true; } /** * Get project to profile * @return IProject project to profile */ protected IProject getOprofileProject(){ return Oprofile.OprofileProject.getProject(); } /** * Saves the global options of this object into the specified launch * configuration * @param config the launch configuration */ public void saveConfiguration(ILaunchConfigurationWorkingCopy config) { config.setAttribute(OprofileLaunchPlugin.ATTR_KERNEL_IMAGE_FILE, options.getKernelImageFile()); config.setAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, options.getSeparateProfilesMask()); config.setAttribute(OprofileLaunchPlugin.ATTR_EXECUTIONS_NUMBER, getExecutionsNumber()); config.setAttribute(OprofileLaunchPlugin.ATTR_OPROFILE_COMBO_TEXT, getOprofileComboText()); OprofileProject.setProfilingBinary(getOprofileComboText()); } /** * Loads this object with the global options in the given launch * configuration * @param config the launch configuration */ public void loadConfiguration(ILaunchConfiguration config) { try { options.setKernelImageFile(config.getAttribute(OprofileLaunchPlugin.ATTR_KERNEL_IMAGE_FILE, "")); //$NON-NLS-1$ options.setSeparateProfilesMask(config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, OprofileDaemonOptions.SEPARATE_NONE)); setExecutionsNumber(config.getAttribute(OprofileLaunchPlugin.ATTR_EXECUTIONS_NUMBER, 1)); setOprofileComboText(config.getAttribute(OprofileLaunchPlugin.ATTR_OPROFILE_COMBO_TEXT, OprofileProject.OPERF_BINARY)); } catch (CoreException e) { } } /** * Get the daemon launch options * @return the OprofileDaemonOption */ public OprofileDaemonOptions getOprofileDaemonOptions() { return options; } /** * Method getKernelImageFile. * @return the kernel image file */ public String getKernelImageFile() { return options.getKernelImageFile(); } /** * Sets the kernel image file * @param image the kernel image file */ public void setKernelImageFile(String image) { options.setKernelImageFile(image); } /** * Method getSeparateSamples. * @return whether and how to separate samples for each distinct application */ public int getSeparateSamples() { return options.getSeparateProfilesMask(); } /** * Sets whether/how to collect separate samples for each distinct application * @param how one of SEPARATE_{NONE, LIBRARY, KERNEL, THREAD, CPU} */ public void setSeparateSamples(int how) { options.setSeparateProfilesMask(how); } /** * Returns the path of the binary to profile. * @return the full path to the binary being profile */ public String getBinaryImage() { return options.getBinaryImage(); } /** * Sets the binary to profile in this launch. * @param image string of the full path to the binary */ public void setBinaryImage(String image) { options.setBinaryImage(image); } public int getExecutionsNumber() { return executionsNumber; } public void setExecutionsNumber(int executionsNumber) { this.executionsNumber = executionsNumber; } /** * Gets OProfile combo box text regarding the binary * opcontrol or operf * @since 2.1 */ public String getOprofileComboText() { return oprofileComboText; } /** * Sets OProfile combo box text regarding the binary * opcontrol or operf * @since 2.1 */ public void setOprofileComboText(String oprofileComboText) { this.oprofileComboText = oprofileComboText; } }