Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Khouzam2011-04-25 13:54:42 +0000
committerMarc Khouzam2011-04-25 13:54:42 +0000
commitec884917647eda18d85c88c75a5904ca81afd6a3 (patch)
treee5edd7f6374778f7f1a85da604aecc3c7040f425 /dsf-gdb
parent82ffa32f82ff664795362bf799efa0230cbf4877 (diff)
downloadorg.eclipse.cdt-ec884917647eda18d85c88c75a5904ca81afd6a3.tar.gz
org.eclipse.cdt-ec884917647eda18d85c88c75a5904ca81afd6a3.tar.xz
org.eclipse.cdt-ec884917647eda18d85c88c75a5904ca81afd6a3.zip
Bug 336961: selectTraceRecord() should not update the UI because it can be used for background activities.
Diffstat (limited to 'dsf-gdb')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java19
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java19
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java14
3 files changed, 41 insertions, 11 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
index 168aa3c437b..b2a8f7ef1da 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Ericsson and others.
+ * Copyright (c) 2010, 2011 Ericsson and others.
* 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
@@ -10,15 +10,19 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.commands;
+import java.util.Hashtable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RejectedExecutionException;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
import org.eclipse.cdt.dsf.concurrent.Query;
+import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.gdb.internal.commands.ISelectNextTraceRecordHandler;
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
+import org.eclipse.cdt.dsf.gdb.service.GDBTraceControl_7_2.TraceRecordSelectedChangedEvent;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceRecordDMContext;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceStatusDMData;
@@ -38,13 +42,16 @@ import org.eclipse.debug.core.commands.IEnabledStateRequest;
*
* @since 2.1
*/
+@SuppressWarnings("restriction")
public class GdbSelectNextTraceRecordCommand extends AbstractDebugCommand implements ISelectNextTraceRecordHandler {
private final DsfExecutor fExecutor;
private final DsfServicesTracker fTracker;
+ private final DsfSession fSession;
public GdbSelectNextTraceRecordCommand(DsfSession session) {
fExecutor = session.getExecutor();
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
+ fSession = session;
}
public void dispose() {
@@ -73,8 +80,14 @@ public class GdbSelectNextTraceRecordCommand extends AbstractDebugCommand implem
new DataRequestMonitor<ITraceRecordDMContext>(fExecutor, rm) {
@Override
protected void handleSuccess() {
- ITraceRecordDMContext nextDmc = traceControl.createNextRecordContext(getData());
- traceControl.selectTraceRecord(nextDmc, rm);
+ final ITraceRecordDMContext nextDmc = traceControl.createNextRecordContext(getData());
+ traceControl.selectTraceRecord(nextDmc, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+ @Override
+ protected void handleSuccess() {
+ fSession.dispatchEvent(new TraceRecordSelectedChangedEvent(nextDmc), new Hashtable<String, String>());
+ rm.done();
+ }
+ });
};
});
} else {
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
index e5c5df5fc37..ca98c4fac31 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Ericsson and others.
+ * Copyright (c) 2010, 2011 Ericsson and others.
* 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
@@ -10,16 +10,20 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.commands;
+import java.util.Hashtable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RejectedExecutionException;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
import org.eclipse.cdt.dsf.concurrent.Query;
+import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.gdb.internal.commands.ISelectPrevTraceRecordHandler;
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
+import org.eclipse.cdt.dsf.gdb.service.GDBTraceControl_7_2.TraceRecordSelectedChangedEvent;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceRecordDMContext;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceStatusDMData;
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceTargetDMContext;
@@ -38,13 +42,16 @@ import org.eclipse.debug.core.commands.IEnabledStateRequest;
*
* @since 2.1
*/
+@SuppressWarnings("restriction")
public class GdbSelectPrevTraceRecordCommand extends AbstractDebugCommand implements ISelectPrevTraceRecordHandler {
private final DsfExecutor fExecutor;
private final DsfServicesTracker fTracker;
+ private final DsfSession fSession;
public GdbSelectPrevTraceRecordCommand(DsfSession session) {
fExecutor = session.getExecutor();
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
+ fSession = session;
}
public void dispose() {
@@ -73,8 +80,14 @@ public class GdbSelectPrevTraceRecordCommand extends AbstractDebugCommand implem
new DataRequestMonitor<ITraceRecordDMContext>(fExecutor, rm) {
@Override
protected void handleSuccess() {
- ITraceRecordDMContext prevDmc = traceControl.createPrevRecordContext(getData());
- traceControl.selectTraceRecord(prevDmc, rm);
+ final ITraceRecordDMContext prevDmc = traceControl.createPrevRecordContext(getData());
+ traceControl.selectTraceRecord(prevDmc, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+ @Override
+ protected void handleSuccess() {
+ fSession.dispatchEvent(new TraceRecordSelectedChangedEvent(prevDmc), new Hashtable<String, String>());
+ rm.done();
+ }
+ });
};
});
} else {
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
index e6f8265e0b7..13f51dd5684 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
@@ -684,8 +684,15 @@ public class GDBTraceControl_7_2 extends AbstractDsfService implements IGDBTrace
// Workaround for GDB pre-release where we don't get the details
// of the frame when we load a trace file.
// To get around this, we can force a select of record 0
- ITraceRecordDMContext initialRecord = createTraceRecordContext(context, "0"); //$NON-NLS-1$
- selectTraceRecord(initialRecord, rm);
+ final ITraceRecordDMContext initialRecord = createTraceRecordContext(context, "0"); //$NON-NLS-1$
+ selectTraceRecord(initialRecord, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+ @Override
+ protected void handleSuccess() {
+ // This event will indicate to the other services that we are visualizing trace data.
+ getSession().dispatchEvent(new TraceRecordSelectedChangedEvent(initialRecord), getProperties());
+ rm.done();
+ }
+ });
}
});
}
@@ -911,9 +918,6 @@ public class GDBTraceControl_7_2 extends AbstractDsfService implements IGDBTrace
fCurrentRecordDmc = context;
fTracepointIndexForTraceRecord = getData().getTraceRecord().getTracepointId();
- // This event will indicate to the other services that we are visualizing trace data.
- getSession().dispatchEvent(new TraceRecordSelectedChangedEvent(context), getProperties());
-
// We could rely on the TraceRecordSelectedChangedEvent to update all the views, but this
// would require a lot of changes.
// Notice that looking at a new trace record should behave in the same manner

Back to the top