/* * @see Action#run() */ @Override public void run() { IActiveJvm jvm = section.getJvm(); if (jvm == null) { return; } // get file name for remote host final String fileName[] = new String[1]; final boolean transfer[] = new boolean[] {false}; try { if (jvm.isRemote()) { final FileNameInputDialog dialog = new FileNameInputDialog( section.getPart().getSite().getShell(), getInitialFileName(jvm), isAgentLoaded(jvm)); Display.getDefault() .syncExec( new Runnable() { @Override public void run() { if (dialog.open() == Window.OK) { fileName[0] = dialog.getFileName(); transfer[0] = dialog.isFileTransfered(); } } }); if (fileName[0] == null) { return; } } } catch (JvmCoreException e) { Activator.log(Messages.dumpHeapDataFailedMsg, e); return; } dumpHprof(fileName[0], transfer[0]); }
/** * Gets the initial file name. * * @param jvm The active JVM * @return The file name, or <tt>null</tt> if file name is specified * @throws JvmCoreException */ String getInitialFileName(IActiveJvm jvm) throws JvmCoreException { ObjectName objectName; try { objectName = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); } catch (MalformedObjectNameException e) { throw new JvmCoreException(IStatus.ERROR, e.getMessage(), e); } catch (NullPointerException e) { throw new JvmCoreException(IStatus.ERROR, e.getMessage(), e); } TabularData initialName = (TabularData) jvm.getMBeanServer().getAttribute(objectName, "SystemProperties"); // $NON-NLS-1$ CompositeData compisiteData = initialName.get(new Object[] {"user.home"}); // $NON-NLS-1$ String home = compisiteData.values().toArray(new String[0])[1]; StringBuffer initialFileName = new StringBuffer(home); initialFileName .append(File.separator) .append(new Date().getTime()) .append('.') .append(SnapshotType.Hprof.getExtension()); return initialFileName.toString(); }
/** * Gets the state indicating if agent is loaded. * * @param jvm The JVM * @return <tt>true</tt> if agent is loaded */ boolean isAgentLoaded(IActiveJvm jvm) { ProfilerState state = jvm.getCpuProfiler().getState(ProfilerType.BCI); return state == ProfilerState.READY || state == ProfilerState.RUNNING; }