Compare commits

..

No commits in common. "master" and "Release_7" have entirely different histories.

274 changed files with 4679 additions and 14380 deletions

6
.gitignore vendored
View File

@ -6,8 +6,4 @@
*/genbin/*
asm3.2_*
asm_patch*
libsrc*
*private*
*genfile*
classes/
appengine-generated/
libsrc*

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
<!-- for some information on what you could do (e.g. targets to override). -->
<!-- If you delete this file and reopen the project it will be recreated. -->
<project name="org.intrace.visualvm" default="netbeans" basedir=".">
<description>Builds, tests, and runs the project org.intrace.visualvm.</description>
<import file="nbproject/build-impl.xml"/>
</project>

View File

@ -1,7 +0,0 @@
Manifest-Version: 1.0
OpenIDE-Module: org.intrace.visualvm
OpenIDE-Module-Install: org/intrace/visualvm/Installer.class
OpenIDE-Module-Layer: org/intrace/visualvm/layer.xml
OpenIDE-Module-Localizing-Bundle: org/intrace/visualvm/Bundle.properties
OpenIDE-Module-Specification-Version: 1.0
OpenIDE-Module-Name: InTrace: VisualVM Plugin

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
*** GENERATED FROM project.xml - DO NOT EDIT ***
*** EDIT ../build.xml INSTEAD ***
-->
<project name="org.intrace.visualvm-impl" basedir="..">
<fail message="Please build using Ant 1.7.1 or higher.">
<condition>
<not>
<antversion atleast="1.7.1"/>
</not>
</condition>
</fail>
<property file="nbproject/private/platform-private.properties"/>
<property file="nbproject/platform.properties"/>
<macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
<attribute name="name"/>
<attribute name="value"/>
<sequential>
<property name="@{name}" value="${@{value}}"/>
</sequential>
</macrodef>
<macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
<attribute name="property"/>
<attribute name="value"/>
<sequential>
<property name="@{property}" value="@{value}"/>
</sequential>
</macrodef>
<property file="${user.properties.file}"/>
<nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
<nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
<nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
<fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
<condition>
<not>
<contains string="${cluster.path.evaluated}" substring="platform"/>
</not>
</condition>
</fail>
<import file="${harness.dir}/build.xml"/>
</project>

View File

@ -1,5 +0,0 @@
cluster.path=\
${nbplatform.active.dir}/platform:\
${nbplatform.active.dir}/profiler:\
${nbplatform.active.dir}/visualvm
nbplatform.active=VisualVM_1.2.2

View File

@ -1,3 +0,0 @@
cp.extra=${tools.jar}
javac.source=1.6
javac.compilerargs=-Xlint -Xlint:-serial

View File

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
<code-name-base>org.intrace.visualvm</code-name-base>
<standalone/>
<module-dependencies>
<dependency>
<code-name-base>com.sun.tools.visualvm.application</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>0-1</release-version>
<specification-version>1.2</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>com.sun.tools.visualvm.attach</code-name-base>
<run-dependency>
<release-version>0-1</release-version>
<specification-version>1.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>com.sun.tools.visualvm.core</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>0-1</release-version>
<specification-version>1.3</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>com.sun.tools.visualvm.host</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>0-1</release-version>
<specification-version>1.0</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>com.sun.tools.visualvm.tools</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>0-1</release-version>
<specification-version>1.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.openide.modules</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>7.13.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.openide.util</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>7.31.1.1</specification-version>
</run-dependency>
</dependency>
</module-dependencies>
<public-packages/>
</data>
</configuration>
</project>

View File

@ -1 +0,0 @@
OpenIDE-Module-Name=InTrace: Visual VM Plugin

View File

@ -1,20 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm;
import org.intrace.visualvm.view.InTraceViewProvider;
import org.openide.modules.ModuleInstall;
/**
* Manages a module's lifecycle. Remember that an installer is optional and
* often not needed at all.
*/
public class Installer extends ModuleInstall {
@Override
public void restored() {
InTraceViewProvider.initialize();
}
}

View File

@ -1,50 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.openide.modules.InstalledFileLocator;
/**
*
* @author mch50
*/
public class Locator {
public static final String agentPath;
public static final String clientPath;
static {
File locatedFile = InstalledFileLocator.getDefault().locate("modules/ext/intrace-agent.jar", null, false); // NOI18N
if (locatedFile != null) {
agentPath = locatedFile.getAbsolutePath();
} else {
agentPath = null;
}
String osName = System.getProperty("os.name", "unknown");
if (osName.contains("Windows")) {
locatedFile = InstalledFileLocator.getDefault().locate("modules/ext/intrace-client-gui-win.jar", null, false); // NOI18N
if (locatedFile != null) {
clientPath = locatedFile.getAbsolutePath();
} else {
clientPath = null;
}
}
else if (osName.contains("Linux")) {
locatedFile = InstalledFileLocator.getDefault().locate("modules/ext/intrace-client-gui-linux.jar", null, false); // NOI18N
if (locatedFile != null) {
clientPath = locatedFile.getAbsolutePath();
} else {
clientPath = null;
}
}
else {
clientPath = null;
}
}
}

View File

@ -1 +0,0 @@
InTraceApplicationAction.title=InTrace Application...

View File

@ -1,43 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm.actions;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.application.jvm.Jvm;
import com.sun.tools.visualvm.application.jvm.JvmFactory;
import com.sun.tools.visualvm.core.ui.DataSourceWindowManager;
import com.sun.tools.visualvm.core.ui.actions.SingleDataSourceAction;
import java.awt.event.ActionEvent;
import org.intrace.visualvm.impl.InTraceDataSource;
import org.openide.util.NbBundle;
/**
*
* @author mch50
*/
public class InTraceApplicationAction extends SingleDataSourceAction<Application> {
@Override
protected void actionPerformed(Application app, ActionEvent actionEvent) {
InTraceDataSource dataSource = new InTraceDataSource(app);
DataSourceWindowManager.sharedInstance().openDataSource(dataSource);
}
@Override
protected boolean isEnabled(Application app) {
Jvm jvm = JvmFactory.getJVMFor(app);
return app.isLocalApplication() && jvm.isAttachable() && jvm.isGetSystemPropertiesSupported();
}
public static synchronized InTraceApplicationAction newInstance() {
return new InTraceApplicationAction();
}
private InTraceApplicationAction() {
super(Application.class);
putValue(NAME, NbBundle.getMessage(InTraceApplicationAction.class, "InTraceApplicationAction.title")); // NOI18N
}
}

View File

@ -1,23 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm.impl;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.core.datasource.DataSource;
/**
*
* @author mch50
*/
public class InTraceDataSource extends DataSource {
public final Application app;
public InTraceDataSource(Application app) {
super(app);
this.app = app;
}
}

View File

@ -1,89 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm.impl;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.application.jvm.Jvm;
import com.sun.tools.visualvm.application.jvm.JvmFactory;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.intrace.visualvm.Locator;
import org.openide.util.Exceptions;
/**
*
* @author mch50
*/
public class InTraceLoader {
public static interface StatusHandler {
public void handleStatus(String statusLine);
}
public static void loadAgent(Application app, StatusHandler handler) {
Jvm jvm = JvmFactory.getJVMFor(app);
if (app.isLocalApplication() && jvm.isAttachable() && jvm.isGetSystemPropertiesSupported()) {
try {
VirtualMachine vm = VirtualMachine.attach(String.valueOf(app.getPid()));
handler.handleStatus("Attached to JVM (PID: " + app.getPid() + ")");
vm.loadAgent(Locator.agentPath, "");
handler.handleStatus("InTrace Agent loaded");
} catch (Exception ex) {
handler.handleStatus("Exception thrown:\n" + throwableToString(ex));
Exceptions.printStackTrace(ex);
}
}
}
public static void launchClient(final StatusHandler handler) {
Runnable launchClientThread = new Runnable() {
@Override
public void run() {
try {
List<String> command = new ArrayList<String>();
command.add("java");
command.add("-jar");
command.add(Locator.clientPath);
ProcessBuilder builder = new ProcessBuilder(command);
System.out.println("Directory : " + System.getenv("temp"));
builder.start();
handler.handleStatus("InTrace Client launched");
} catch (Exception ex) {
handler.handleStatus("Exception thrown:\n" + throwableToString(ex));
Exceptions.printStackTrace(ex);
}
}
};
new Thread(launchClientThread).start();
}
private static String throwableToString(Throwable throwable) {
StringBuilder throwToStr = new StringBuilder();
if (throwable == null) {
throwToStr.append("null");
} else {
StringWriter strWriter = new StringWriter();
PrintWriter writer = new PrintWriter(strWriter);
throwable.printStackTrace(writer);
throwToStr.append(strWriter.toString());
}
return throwToStr.toString();
}
}

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
<filesystem>
<folder name="VisualVM">
<folder name="ExplorerPopupSelection">
<file name="ExplorerPopupSelection-Separator-2000_1.instance" url="ExplorerPopupSelection-Separator-2000_1.instance">
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
<attr name="position" intvalue="2350"/>
</file>
<file name="org-intrace-visualvm-actions-InTraceApplicationAction.instance">
<attr name="instanceCreate" methodvalue="org.intrace.visualvm.actions.InTraceApplicationAction.newInstance"/>
<attr name="position" intvalue="2400"/>
</file>
</folder>
</folder>
</filesystem>

View File

@ -1,144 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm.view;
import com.sun.tools.visualvm.core.ui.DataSourceView;
import com.sun.tools.visualvm.core.ui.components.DataViewComponent;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import org.intrace.visualvm.Locator;
import org.intrace.visualvm.impl.InTraceLoader;
import org.intrace.visualvm.impl.InTraceDataSource;
import org.openide.util.Utilities;
/**
*
* @author mch50
*/
public class InTraceView extends DataSourceView {
private final InTraceDataSource application;
private JTextArea textArea;
private DataViewComponent dvc;
//Reusing an image from the sources:
private static final String IMAGE_PATH = "com/sun/tools/visualvm/coredump/resources/coredump.png"; // NOI18N
public InTraceView(InTraceDataSource application) {
super(application, "InTrace", new ImageIcon(Utilities.loadImage(IMAGE_PATH, true)).getImage(), 60, false);
this.application = application;
}
@Override
protected DataViewComponent createComponent() {
//Data area for master view:
JPanel generalDataArea = new JPanel();
generalDataArea.setBorder(BorderFactory.createEmptyBorder(14, 8, 14, 8));
generalDataArea.setOpaque(false);
JButton loadAgentButton = new JButton("Load InTrace Agent");
loadAgentButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InTraceLoader.loadAgent(application.app, new InTraceLoader.StatusHandler() {
@Override
public void handleStatus(String statusLine) {
appendText(statusLine);
}
});
}
});
JButton launchClient = new JButton("Launch InTrace Client");
launchClient.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InTraceLoader.launchClient(new InTraceLoader.StatusHandler() {
@Override
public void handleStatus(String statusLine) {
appendText(statusLine);
}
});
}
});
JButton clearStatus = new JButton("Clear Status Text");
clearStatus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearText();
}
});
generalDataArea.add(loadAgentButton);
generalDataArea.add(launchClient);
generalDataArea.add(clearStatus);
//Master view:
DataViewComponent.MasterView masterView = new DataViewComponent.MasterView
("Control", null, generalDataArea);
//Configuration of master view:
DataViewComponent.MasterViewConfiguration masterConfiguration =
new DataViewComponent.MasterViewConfiguration(false);
//Add the master view and configuration view to the component:
dvc = new DataViewComponent(masterView, masterConfiguration);
//Add detail view to the component:
JPanel statusArea = new JPanel();
statusArea.setOpaque(false);
statusArea.setLayout(new BorderLayout());
textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setMargin(new Insets(10,10,10,10));
statusArea.add(scrollPane, BorderLayout.CENTER);
dvc.addDetailsView(new DataViewComponent.DetailsView(
"Status", null, 10, statusArea, null), DataViewComponent.BOTTOM_LEFT);
appendText("Agent Path: " + Locator.agentPath);
appendText("Client Path: " + Locator.clientPath);
if (Locator.clientPath == null) {
appendText("Warning: The Client is only supported on Windows " +
"and Linux");
}
else {
appendText("Ready");
}
return dvc;
}
private void appendText(String str) {
if (textArea != null) {
textArea.append(str + "\n");
}
}
private void clearText() {
if (textArea != null) {
textArea.setText("");
}
}
}

View File

@ -1,39 +0,0 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.intrace.visualvm.view;
import com.sun.tools.visualvm.core.ui.DataSourceView;
import com.sun.tools.visualvm.core.ui.DataSourceViewProvider;
import com.sun.tools.visualvm.core.ui.DataSourceViewsManager;
import org.intrace.visualvm.impl.InTraceDataSource;
/**
*
* @author mch50
*/
public class InTraceViewProvider extends DataSourceViewProvider<InTraceDataSource> {
private static DataSourceViewProvider<InTraceDataSource> instance = new InTraceViewProvider();
@Override
public boolean supportsViewFor(InTraceDataSource application) {
//Always shown:
return true;
}
@Override
public synchronized DataSourceView createView(final InTraceDataSource application) {
return new InTraceView(application);
}
public static void initialize() {
DataSourceViewsManager.sharedInstance().addViewProvider(instance, InTraceDataSource.class);
}
static void unregister() {
DataSourceViewsManager.sharedInstance().removeViewProvider(instance);
}
}

View File

@ -1,17 +1,10 @@
Full details available on the "InTrace Site":http://mchr3k.github.com/org.intrace/
h1. Main Projects
* org.intrace - InTrace Agent and GUI
* intrace.ecl.plugin - InTrace Eclipse Plugin
* intrace.ecl.feature - InTrace Eclipse Feature
* intrace.ecl.site - InTrace Eclipse Update Site
* intrace.appengine - InTrace AppEngine Update Site Hosting
* binaries - jars from InTrace releases
h2. Work in progress
* InTrace-VisualVM - VisualVM integration
* org.intrace.agentbug - Project containing simple Agent used to illustrate bug report to Sun
* org.intrace - InTrace Agent and CUI/GUI
* org.intrace.agentloader - Command line agent loader for loading an agent into a running JVM process
h2. Scratch Projects
* binaries - images and jars used by wiki pages
* org.intrace.agentbug - Project containing simple Agent used to illustrate bug report to Sun
* org.intrace.test - Dumping ground for toy classes used in manual testing

BIN
binaries/images/callers.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="lib/junit-4.10.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/joda-time-2.0.jar"/>
<classpathentry kind="src" path="testsrc"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>intrace.appengine</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.google.appengine.eclipse.core.enhancerbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.google.appengine.eclipse.core.projectValidator</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>com.google.appengine.eclipse.core.gaeNature</nature>
</natures>
</projectDescription>

Some files were not shown because too many files have changed in this diff Show More