Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into agent-path-expres…
Browse files Browse the repository at this point in the history
…sion

# Conflicts:
#	core/org.openjdk.jmc.agent/src/main/java/org/openjdk/jmc/agent/Transformer.java
  • Loading branch information
tabjy committed Jan 10, 2020
2 parents c78ce94 + 67bc866 commit 0418566
Show file tree
Hide file tree
Showing 22 changed files with 187 additions and 558 deletions.
Expand Up @@ -56,6 +56,8 @@
import org.eclipse.swt.browser.ProgressAdapter;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.ISelectionListener;
Expand Down Expand Up @@ -162,6 +164,12 @@ public void createPartControl(Composite parent) {
container = new SashForm(parent, SWT.HORIZONTAL);
browser = new Browser(container, SWT.NONE);
container.setMaximizedControl(browser);
browser.addMenuDetectListener(new MenuDetectListener() {
@Override
public void menuDetected(MenuDetectEvent e) {
e.doit = false;
}
});
}

@Override
Expand Down
Expand Up @@ -1113,6 +1113,7 @@ public static ItemList createSimpleItemList(
ItemList list = listBuilder.build(parent, tableSettings);
ColumnViewer viewer = list.getManager().getViewer();
MCContextMenuManager mm = MCContextMenuManager.create(viewer.getControl());
list.setMenuManager(mm);
ColumnMenusFactory.addDefaultMenus(list.getManager(), mm);
viewer.addSelectionChangedListener(
e -> pageContainer.showSelection(ItemCollectionToolkit.build(list.getSelection().get())));
Expand Down
Expand Up @@ -65,6 +65,7 @@
import org.openjdk.jmc.ui.column.ColumnBuilder;
import org.openjdk.jmc.ui.column.ColumnManager;
import org.openjdk.jmc.ui.column.ColumnManager.ColumnComparator;
import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
import org.openjdk.jmc.ui.column.IColumn;
import org.openjdk.jmc.ui.column.TableSettings;

Expand Down Expand Up @@ -105,6 +106,7 @@ public ItemList build(Composite container, TableSettings tableSettings) {
private final SimpleArray<IItem> tail = new SimpleArray<>(new IItem[1000]);

private ExtraRowTableViewer tableViewer;
private MCContextMenuManager menuManager;

private ItemList(Composite container, List<IColumn> columns, TableSettings tableSettings, int style) {
tableViewer = new ExtraRowTableViewer(container,
Expand Down Expand Up @@ -138,6 +140,14 @@ public ColumnManager getManager() {
return columnManager;
}

public void setMenuManager(MCContextMenuManager mm) {
menuManager = mm;
}

public MCContextMenuManager getMenuManager() {
return menuManager;
}

@SuppressWarnings("unchecked")
public Supplier<Stream<? extends IItem>> getSelection() {
List<? extends IItem> list = ((IStructuredSelection) columnManager.getViewer().getSelection()).toList();
Expand Down
Expand Up @@ -82,6 +82,7 @@
import org.openjdk.jmc.flightrecorder.ui.StreamModel;
import org.openjdk.jmc.flightrecorder.ui.common.AbstractDataPage;
import org.openjdk.jmc.flightrecorder.ui.common.DataPageToolkit;
import org.openjdk.jmc.flightrecorder.ui.common.FilterComponent;
import org.openjdk.jmc.flightrecorder.ui.common.FlavorSelector;
import org.openjdk.jmc.flightrecorder.ui.common.FlavorSelector.FlavorSelectorState;
import org.openjdk.jmc.flightrecorder.ui.common.ImageConstants;
Expand Down Expand Up @@ -146,6 +147,7 @@ public IPageUI display(Composite parent, FormToolkit toolkit, IPageContainer edi
private ISelection treeSelection;
public TreePath[] treeExpansion;
public FlavorSelectorState flavorSelectorState;
private IItemFilter flagsFilter;
// public int topIndex;

public EventBrowserPage(IPageDefinition definition, StreamModel items, IPageContainer editor) {
Expand All @@ -162,6 +164,7 @@ class EventBrowserUI implements IPageUI {
private static final String TREE_SASH = "treeSash"; //$NON-NLS-1$
private static final String ITEM_LIST = "itemList"; //$NON-NLS-1$
private static final String SHOW_TYPES_WITHOUT_EVENTS = "showTypesWithoutEvents"; //$NON-NLS-1$
private static final String LIST_FILTER = "listFilter"; //$NON-NLS-1$
private ItemList list;
private final SashForm treeSash;
private final IPageContainer container;
Expand All @@ -171,7 +174,10 @@ class EventBrowserUI implements IPageUI {
private final TypeFilterBuilder typeFilterTree;
private IItemCollection selectionItems;
private FlavorSelector flavorSelector;
private FilterComponent listFilter;
private Boolean showTypesWithoutEvents;
private Boolean showFilterAction;
private Boolean showSearchAction;

EventBrowserUI(Composite parent, FormToolkit toolkit, IState state, IPageContainer container) {
this.container = container;
Expand Down Expand Up @@ -227,6 +233,11 @@ class EventBrowserUI implements IPageUI {
list.getManager().setSelectionState(tableSelection);
}

private void onFilterChange(IItemFilter filter) {
listFilter.filterChangeHelper(filter, list, getFilteredItems());
flagsFilter = filter;
}

private void setTypesWithoutEvents(boolean checked) {
showTypesWithoutEvents = checked;
refreshTree();
Expand Down Expand Up @@ -323,12 +334,28 @@ private void rebuildItemList() {
});
listColumns.addAll(0, newColumns);

saveFilterActionStates();
Control oldListControl = list.getManager().getViewer().getControl();
Composite parent = oldListControl.getParent();
oldListControl.dispose();
Composite parent = listFilter != null ? listFilter.getComponent().getParent() : oldListControl.getParent();
for (Control c : parent.getChildren()) {
c.dispose();
}
list = DataPageToolkit.createSimpleItemList(parent, itemListBuilder, container,
DataPageToolkit.createTableSettingsByOrderByAndColumnsWithDefaultOrdering(orderBy, listColumns),
Messages.EventBrowserPage_EVENT_BROWSER_SELECTION);
listFilter = FilterComponent.createFilterComponent(list, flagsFilter, filteredItems,
container.getSelectionStore()::getSelections, this::onFilterChange);
if (showFilterAction == null) {
listFilter.loadState(getState().getChild(LIST_FILTER));
} else {
loadFilterActionStates();
}
onFilterChange(flagsFilter);

MCContextMenuManager mm = list.getMenuManager();
mm.add(listFilter.getShowFilterAction());
mm.add(listFilter.getShowSearchAction());

parent.layout();
list.show(filteredItems);
}
Expand All @@ -352,12 +379,27 @@ private void mergeListSettings() {
}
}

private void saveFilterActionStates() {
if (listFilter != null) {
showFilterAction = listFilter.getShowFilterAction().isChecked();
showSearchAction = listFilter.getShowSearchAction().isChecked();
}
}

private void loadFilterActionStates() {
listFilter.getShowFilterAction().setChecked(showFilterAction);
listFilter.getShowSearchAction().setChecked(showSearchAction);
listFilter.getShowFilterAction().run();
listFilter.getShowSearchAction().run();
}

@Override
public void saveTo(IWritableState state) {
PersistableSashForm.saveState(treeSash, state.createChild(TREE_SASH));
mergeListSettings();
new TableSettings(listOrderBy, listColumns).saveState(state.createChild(ITEM_LIST));
StateToolkit.writeBoolean(state, SHOW_TYPES_WITHOUT_EVENTS, showTypesWithoutEvents);
listFilter.saveState(state.createChild(LIST_FILTER));
saveToLocal();
}

Expand Down
Expand Up @@ -70,23 +70,6 @@ public interface TransformRegistry {
*/
List<String> clearAllTransformData();

/**
* Stores the pre instrumentation byte array of a class.
* @param className
* the class for which to store the pre instrumentation data.
* @param classPreInstrumentation
* the pre instrumentation byte array of the class to store.
*/
void storeClassPreInstrumentation(String className, byte[] classPreInstrumentation);

/**
* Returns a byte array associated with a class pre instrumentation.
* @param className
* the name of the class to get pre instrumentation data for.
* @return a byte array of a class pre instrumentation.
*/
byte[] getClassPreInstrumentation(String className);

/**
* Signify classes are or are not being reverted to their pre instrumentation versions.
* @param shouldRevert
Expand Down
Expand Up @@ -51,7 +51,6 @@
import org.openjdk.jmc.agent.util.TypeUtils;

public class Transformer implements ClassFileTransformer {

private TransformRegistry registry;

public Transformer(TransformRegistry registry) {
Expand All @@ -63,11 +62,10 @@ public byte[] transform(
ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
byte[] classfileBuffer) throws IllegalClassFormatException {
if (!registry.hasPendingTransforms(className)) {
return registry.isRevertIntrumentation() ? registry.getClassPreInstrumentation(className) : null;
return registry.isRevertIntrumentation() ? classfileBuffer : null;
}
registry.storeClassPreInstrumentation(className, classfileBuffer);
byte[] instrumentedClassfileBuffer = registry.isRevertIntrumentation() ?
registry.getClassPreInstrumentation(className) : classfileBuffer;

// load the class for reflective inspection if not loaded already
if (classBeingRedefined == null) {
try {
// Don't reuse this class loader instance. We want the loader and its class to unload after we're done.
Expand All @@ -77,7 +75,8 @@ public byte[] transform(
throw new IllegalStateException(e); // This should not happen
}
}
return doTransforms(registry.getTransformData(className), instrumentedClassfileBuffer, loader, classBeingRedefined, protectionDomain);

return doTransforms(registry.getTransformData(className), classfileBuffer, loader, classBeingRedefined, protectionDomain);
}

private byte[] doTransforms(
Expand Down
Expand Up @@ -75,8 +75,6 @@ public class DefaultTransformRegistry implements TransformRegistry {
// First step in update should be to check if we even have transformations for the given class
private final HashMap<String, List<TransformDescriptor>> transformData = new HashMap<>();

// Maps class name -> pre instrumentation version of a class
private final HashMap<String, byte[]> preInstrumentedClasses = new HashMap<>();
private volatile boolean revertInstrumentation = false;

@Override
Expand Down Expand Up @@ -458,16 +456,6 @@ public List<String> clearAllTransformData() {
return classNames;
}

public void storeClassPreInstrumentation(String className, byte[] classPreInstrumentation) {
if(!preInstrumentedClasses.containsKey(className)) {
preInstrumentedClasses.put(className, classPreInstrumentation.clone());
}
}

public byte[] getClassPreInstrumentation(String className) {
return preInstrumentedClasses.get(className);
}

public void setRevertInstrumentation(boolean shouldRevert) {
this.revertInstrumentation = shouldRevert;
}
Expand Down

0 comments on commit 0418566

Please sign in to comment.