Merge "Removes GCRoots pane" into studio-1.3-dev
automerge: 79614aa
* commit '79614aa436dd1cc3a829476bec1250ad3b18041c':
Removes GCRoots pane
diff --git a/android/src/com/android/tools/idea/editors/hprof/ComputeDominatorAction.java b/android/src/com/android/tools/idea/editors/hprof/ComputeDominatorAction.java
new file mode 100644
index 0000000..df6b794
--- /dev/null
+++ b/android/src/com/android/tools/idea/editors/hprof/ComputeDominatorAction.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.tools.idea.editors.hprof;
+
+import com.android.tools.idea.editors.hprof.tables.heaptable.HeapTableManager;
+import com.android.tools.perflib.heap.Snapshot;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.progress.Task;
+import com.intellij.openapi.project.Project;
+import icons.AndroidIcons;
+import org.jetbrains.annotations.NotNull;
+
+public class ComputeDominatorAction extends AnAction {
+ private Snapshot mySnapshot;
+ private HeapTableManager myHeapTableManager;
+ @NotNull Project myProject;
+
+ public ComputeDominatorAction(@NotNull Snapshot snapshot, @NotNull HeapTableManager heapTableManager, @NotNull Project project) {
+ super(null, "Compute Dominators", AndroidIcons.Ddms.AllocationTracker);
+ mySnapshot = snapshot;
+ myHeapTableManager = heapTableManager;
+ myProject = project;
+ }
+
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ ProgressManager.getInstance().run(new ComputeDominatorIndicator(myProject));
+ }
+
+ private class ComputeDominatorIndicator extends Task.Modal {
+ public ComputeDominatorIndicator(@NotNull Project project) {
+ super(project, "Computing dominators...", true);
+ }
+
+ @Override
+ public void onSuccess() {
+ super.onSuccess();
+ myHeapTableManager.notifyDominatorsComputed();
+ }
+
+ @Override
+ public void run(@NotNull ProgressIndicator indicator) {
+ indicator.setIndeterminate(true);
+ // TODO do this in a separate thread.
+ mySnapshot.computeDominators();
+ }
+ }
+}
diff --git a/android/src/com/android/tools/idea/editors/hprof/HprofViewPanel.java b/android/src/com/android/tools/idea/editors/hprof/HprofViewPanel.java
index 6e15199..dbc2f5d 100644
--- a/android/src/com/android/tools/idea/editors/hprof/HprofViewPanel.java
+++ b/android/src/com/android/tools/idea/editors/hprof/HprofViewPanel.java
@@ -15,17 +15,12 @@
*/
package com.android.tools.idea.editors.hprof;
-import com.android.tools.idea.editors.hprof.tables.gcroottable.GcRootTable;
import com.android.tools.idea.editors.hprof.tables.heaptable.HeapTableManager;
import com.android.tools.idea.editors.hprof.tables.instancestable.InstanceDetailView;
import com.android.tools.perflib.heap.Snapshot;
import com.intellij.execution.ui.layout.impl.JBRunnerTabs;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.progress.Task;
+import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.JBColor;
@@ -35,7 +30,6 @@
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.ui.tabs.TabInfo;
import com.intellij.util.ui.UIUtil;
-import icons.AndroidIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -44,27 +38,19 @@
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
public class HprofViewPanel implements Disposable {
private static final int DIVIDER_WIDTH = 4;
- @NotNull private Project myProject;
@NotNull private JPanel myContainer;
- @NotNull private JBRunnerTabs myNavigationTabs;
@NotNull private JBRunnerTabs myDetailTabs;
@NotNull private HeapTableManager myHeapTableManager;
- private GcRootTable myGcRootTable;
- private Snapshot mySnapshot;
public HprofViewPanel(@NotNull final Project project) {
- myProject = project;
+ JBRunnerTabs navigationTabs = new JBRunnerTabs(project, ActionManager.getInstance(), IdeFocusManager.findInstance(), this);
+ navigationTabs.setBorder(new EmptyBorder(0, 2, 0, 0));
+ navigationTabs.setPaintBorder(0, 0, 0, 0);
- myNavigationTabs = new JBRunnerTabs(myProject, ActionManager.getInstance(), IdeFocusManager.findInstance(), this);
- myNavigationTabs.setBorder(new EmptyBorder(0, 2, 0, 0));
- myNavigationTabs.setPaintBorder(0, 0, 0, 0);
-
- myDetailTabs = new JBRunnerTabs(myProject, ActionManager.getInstance(), IdeFocusManager.findInstance(), this);
+ myDetailTabs = new JBRunnerTabs(project, ActionManager.getInstance(), IdeFocusManager.findInstance(), this);
myDetailTabs.setBorder(new EmptyBorder(0, 2, 0, 0));
myDetailTabs.setPaintBorder(0, 0, 0, 0);
myDetailTabs.addTabMouseListener(new MouseAdapter() {
@@ -79,7 +65,7 @@
}
});
- myHeapTableManager = new HeapTableManager(myProject, this, myNavigationTabs);
+ myHeapTableManager = new HeapTableManager(project, this, navigationTabs);
JBPanel treePanel = new JBPanel(new BorderLayout());
treePanel.setBorder(BorderFactory.createLineBorder(JBColor.border()));
@@ -90,7 +76,7 @@
treePanelWrapper.setBorder(new EmptyBorder(0, 1, 0, 0));
JBSplitter mainSplitter = new JBSplitter(true);
- mainSplitter.setFirstComponent(myNavigationTabs);
+ mainSplitter.setFirstComponent(navigationTabs);
mainSplitter.setSecondComponent(treePanelWrapper);
mainSplitter.setDividerWidth(DIVIDER_WIDTH);
@@ -99,12 +85,6 @@
}
public void setSnapshot(@NotNull Snapshot snapshot) {
- mySnapshot = snapshot;
-
- myGcRootTable = new GcRootTable(mySnapshot);
- myNavigationTabs.addTab(new TabInfo(HeapTableManager.createNavigationSplitter(myGcRootTable, null)).setText("GC Roots")
- .setActions(new DefaultActionGroup(new ComputeDominatorAction(myProject)), ActionPlaces.UNKNOWN));
-
myHeapTableManager.setSnapshot(snapshot);
}
@@ -133,78 +113,4 @@
public void dispose() {
}
-
- private static class ComputeDominatorIndicator extends Task.Backgroundable {
- @NotNull private final CountDownLatch myLatch;
-
- public ComputeDominatorIndicator(@NotNull Project project) {
- super(project, "Computing dominators...", true);
- myLatch = new CountDownLatch(1);
- }
-
- public void exit() {
- myLatch.countDown();
- }
-
- @Override
- public void run(@NotNull ProgressIndicator indicator) {
- indicator.setIndeterminate(true);
-
- while (myLatch.getCount() > 0) {
- try {
- myLatch.await(200, TimeUnit.MILLISECONDS);
- }
- catch (InterruptedException e) {
- exit();
- break;
- }
- }
- }
- }
-
- private class ComputeDominatorAction extends ToggleAction {
- @NotNull Project myProject;
- private boolean myDominatorsComputed;
-
- private ComputeDominatorAction(@NotNull Project project) {
- super(null, "Compute Dominators", AndroidIcons.Ddms.AllocationTracker);
- myProject = project;
- }
-
- @Override
- public void update(@NotNull AnActionEvent e) {
- super.update(e);
- if (!myDominatorsComputed && e.getInputEvent() != null) {
- myDominatorsComputed = true;
- final ComputeDominatorIndicator indicator = new ComputeDominatorIndicator(myProject);
- ProgressManager.getInstance().run(indicator);
-
- ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
- @Override
- public void run() {
- mySnapshot.computeDominators();
-
- ApplicationManager.getApplication().invokeLater(new Runnable() {
- @Override
- public void run() {
- myHeapTableManager.notifyDominatorsComputed();
- myGcRootTable.notifyDominatorsComputed();
- indicator.exit();
- }
- });
- }
- });
- }
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return myDominatorsComputed;
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- myDominatorsComputed |= state;
- }
- }
}
diff --git a/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTable.java b/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTable.java
deleted file mode 100644
index 92e8365..0000000
--- a/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.editors.hprof.tables.gcroottable;
-
-import com.android.tools.idea.editors.hprof.tables.HprofTable;
-import com.android.tools.perflib.heap.Snapshot;
-import org.jetbrains.annotations.NotNull;
-
-public class GcRootTable extends HprofTable {
- public GcRootTable(@NotNull Snapshot snapshot) {
- super(new GcRootTableModel(snapshot));
- }
-}
diff --git a/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTableModel.java b/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTableModel.java
deleted file mode 100644
index 65f6420..0000000
--- a/android/src/com/android/tools/idea/editors/hprof/tables/gcroottable/GcRootTableModel.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.idea.editors.hprof.tables.gcroottable;
-
-import com.android.tools.idea.editors.hprof.tables.HprofTableModel;
-import com.android.tools.idea.editors.hprof.tables.TableColumn;
-import com.android.tools.perflib.heap.RootObj;
-import com.android.tools.perflib.heap.RootType;
-import com.android.tools.perflib.heap.Snapshot;
-import org.jetbrains.annotations.NotNull;
-
-import javax.swing.*;
-import java.util.ArrayList;
-import java.util.List;
-
-public class GcRootTableModel extends HprofTableModel {
- private static final boolean HIDE_UNDEFINED_NAMES = false;
- @NotNull private Snapshot mySnapshot;
- private List<RootObj> myRoots;
- @NotNull private List<TableColumn<GcRootTableModel, ?>> myColumns;
-
- public GcRootTableModel(@NotNull Snapshot snapshot) {
- super();
- mySnapshot = snapshot;
- myColumns = createGcRootTableColumns();
- myRoots = new ArrayList<RootObj>();
- if (HIDE_UNDEFINED_NAMES) {
- for (RootObj root : mySnapshot.getGCRoots()) {
- if (root.getClassName(mySnapshot) != RootObj.UNDEFINED_CLASS_NAME) {
- myRoots.add(root);
- }
- }
- }
- else {
- myRoots.addAll(mySnapshot.getGCRoots());
- }
- }
-
- @Override
- public int getRowCount() {
- return myRoots.size();
- }
-
- @Override
- public int getColumnCount() {
- return myColumns.size();
- }
-
- @NotNull
- @Override
- protected TableColumn getColumn(int index) {
- return myColumns.get(index);
- }
-
- @NotNull
- private List<TableColumn<GcRootTableModel, ?>> createGcRootTableColumns() {
- List<TableColumn<GcRootTableModel, ?>> columns = new ArrayList<TableColumn<GcRootTableModel, ?>>();
- columns.add(new TableColumn<GcRootTableModel, String>("Root Instance", String.class, SwingConstants.LEFT, 600, true) {
- @Override
- public String getValue(@NotNull GcRootTableModel modelType, int row) {
- return modelType.myRoots.get(row).getClassName(mySnapshot);
- }
- });
- columns.add(new TableColumn<GcRootTableModel, RootType>("Root Type", RootType.class, SwingConstants.LEFT, 150, true) {
- @Override
- public RootType getValue(@NotNull GcRootTableModel modelType, int row) {
- return modelType.myRoots.get(row).getRootType();
- }
- });
- columns.add(new TableColumn<GcRootTableModel, Long>("Total Retention", Long.class, SwingConstants.RIGHT, 100, false) {
- @Override
- public Long getValue(@NotNull GcRootTableModel modelType, int row) {
- return modelType.myRoots.get(row).getTotalRetainedSize();
- }
- });
-
- return columns;
- }
-}
diff --git a/android/src/com/android/tools/idea/editors/hprof/tables/heaptable/HeapTableManager.java b/android/src/com/android/tools/idea/editors/hprof/tables/heaptable/HeapTableManager.java
index b6c89f8..eaecde0 100644
--- a/android/src/com/android/tools/idea/editors/hprof/tables/heaptable/HeapTableManager.java
+++ b/android/src/com/android/tools/idea/editors/hprof/tables/heaptable/HeapTableManager.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.editors.hprof.tables.heaptable;
import com.android.tools.idea.editors.hprof.HprofViewPanel;
+import com.android.tools.idea.editors.hprof.ComputeDominatorAction;
import com.android.tools.idea.editors.hprof.tables.instancestable.InstanceDetailModel;
import com.android.tools.idea.editors.hprof.tables.instancestable.InstanceDetailView;
import com.android.tools.idea.editors.hprof.tables.instancestable.InstancesTreeTable;
@@ -25,6 +26,8 @@
import com.android.tools.perflib.heap.Instance;
import com.android.tools.perflib.heap.Snapshot;
import com.intellij.execution.ui.layout.impl.JBRunnerTabs;
+import com.intellij.openapi.actionSystem.ActionPlaces;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.project.Project;
import com.intellij.ui.JBColor;
import com.intellij.ui.JBSplitter;
@@ -158,7 +161,8 @@
});
JBSplitter splitter = createNavigationSplitter(heapTable, instancesTreeTable);
- myParentContainer.addTab(new TabInfo(splitter).setText(model.getHeapName()).setSideComponent(new JPanel()));
+ DefaultActionGroup group = new DefaultActionGroup(new ComputeDominatorAction(mySnapshot, this, myProject));
+ myParentContainer.addTab(new TabInfo(splitter).setText(model.getHeapName()).setActions(group, ActionPlaces.UNKNOWN));
}
}
}