1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 488661 - Moving the last trace method to GdbReverseToggleCommand

This patch solves Bug 488661 by moving last trace method to
GdbReverseToggleCommand. Since it is instantiated on a per session
basis.


Change-Id: Idafa196c7af36373ca08d5fc7de63024fe824c2b
Signed-off-by: raddepal <ravitheja.addepally@intel.com>
This commit is contained in:
raddepal 2016-03-03 13:21:00 +01:00 committed by Marc Khouzam
parent 16b3fbcfd6
commit 7a73b0035f
3 changed files with 31 additions and 19 deletions

View file

@ -29,4 +29,6 @@ public interface IChangeReverseMethodHandler extends IReverseToggleHandler, IDeb
*
*/
ReverseTraceMethod getTraceMethod(Object context);
ReverseTraceMethod getLastTraceMethod(Object context);
}

View file

@ -56,8 +56,6 @@ import org.osgi.framework.Bundle;
* @since 7.0
*/
public class ReverseToggleCommandHandler extends DebugCommandHandler implements IDebugContextListener, IElementUpdater {
private ReverseTraceMethod fTraceMethod;
private ReverseTraceMethod fLastTraceMethod;
private static final ImageDescriptor REVERSE_TOGGLE_DEFAULT_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle.gif"); //$NON-NLS-1$
private static final ImageDescriptor REVERSE_TOGGLE_SOFTWARE_ON_IMAGE = getImageDescriptor("icons/obj16/reverse_toggle_sw_on.png"); //$NON-NLS-1$
@ -109,8 +107,6 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
// This can happen if we activate the action set after the launch.
refresh(fContextService.getActiveContext());
fTraceMethod = ReverseTraceMethod.STOP_TRACE;
fLastTraceMethod = ReverseTraceMethod.STOP_TRACE;
}
}
}
@ -207,9 +203,10 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
// Disable tracing
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
if (fTargetAdapter.toggleNeedsUpdating()) {
ReverseTraceMethod LastTraceMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getLastTraceMethod(fActiveContext);
ReverseTraceMethod currMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
if (currMethod == ReverseTraceMethod.STOP_TRACE) {
if (fLastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
if (LastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
traceMethod = ReverseTraceMethod.HARDWARE_TRACE;
} else {
traceMethod = ReverseTraceMethod.FULL_TRACE;
@ -273,26 +270,23 @@ public class ReverseToggleCommandHandler extends DebugCommandHandler implements
@SuppressWarnings("rawtypes") Map parameters) {
if (fTargetAdapter != null && fTargetAdapter instanceof IChangeReverseMethodHandler) {
ReverseTraceMethod reverseMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getTraceMethod(fActiveContext);
ReverseTraceMethod LastTraceMethod = ((IChangeReverseMethodHandler)fTargetAdapter).getLastTraceMethod(fActiveContext);
ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class);
if (reverseMethod != fTraceMethod) {
fLastTraceMethod = fTraceMethod;
fTraceMethod = reverseMethod;
}
try{
if (fTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
if (reverseMethod == ReverseTraceMethod.HARDWARE_TRACE) {
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseHardTrace"); //$NON-NLS-1$
element.setTooltip(Messages.ReverseDebugging_ToggleHardwareTrace);
element.setIcon(REVERSE_TOGGLE_HARDWARE_ON_IMAGE);
} else if (fTraceMethod == ReverseTraceMethod.FULL_TRACE) {
} else if (reverseMethod == ReverseTraceMethod.FULL_TRACE) {
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "UseSoftTrace"); //$NON-NLS-1$
element.setTooltip(Messages.ReverseDebugging_ToggleSoftwareTrace);
element.setIcon(REVERSE_TOGGLE_SOFTWARE_ON_IMAGE);
} else {
element.setTooltip(Messages.ReverseDebugging_ToggleReverseDebugging);
HandlerUtil.updateRadioState(commandService.getCommand(REVERSE_TOGGLE_COMMAND_ID), "TraceOff"); //$NON-NLS-1$
if (fLastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
if (LastTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
element.setIcon(REVERSE_TOGGLE_HARDWARE_OFF_IMAGE);
} else if (fLastTraceMethod == ReverseTraceMethod.FULL_TRACE) {
} else if (LastTraceMethod == ReverseTraceMethod.FULL_TRACE) {
element.setIcon(REVERSE_TOGGLE_SOFTWARE_OFF_IMAGE);
} else {
element.setIcon(REVERSE_TOGGLE_DEFAULT_IMAGE);

View file

@ -60,12 +60,17 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
private final DsfSession fSession;
private ReverseTraceMethod fTraceMethod = null;
private ReverseTraceMethod fLastTraceMethod = null;
private ReverseTraceMethod fNextTraceMethod = null;
public GdbReverseToggleCommand(DsfSession session) {
fExecutor = session.getExecutor();
fTracker = new DsfServicesTracker(GdbUIPlugin.getBundleContext(), session.getId());
fSession = session;
fTraceMethod = ReverseTraceMethod.STOP_TRACE;
fLastTraceMethod = ReverseTraceMethod.STOP_TRACE;
fNextTraceMethod = ReverseTraceMethod.STOP_TRACE;
try {
fExecutor.execute(new DsfRunnable() {
@Override
@ -108,8 +113,8 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
final IReverseRunControl2 runControl = fTracker.getService(IReverseRunControl2.class);
if (runControl != null) {
ReverseTraceMethod traceMethod = fTraceMethod;
if (fTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
ReverseTraceMethod traceMethod = fNextTraceMethod;
if (fNextTraceMethod == ReverseTraceMethod.HARDWARE_TRACE) {
String defaultValue = Platform.getPreferencesService().getString(GdbPlugin.PLUGIN_ID,
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_HARDWARE,
IGdbDebugPreferenceConstants.PREF_REVERSE_TRACE_METHOD_GDB_TRACE, null);
@ -298,7 +303,7 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
@Override
public void setTraceMethod(ReverseTraceMethod traceMethod) {
fTraceMethod = traceMethod;
fNextTraceMethod = traceMethod;
}
@Override
@ -334,12 +339,18 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
try {
fExecutor.execute(ReverseMethodQuery);
ReverseTraceMethod returnedTrace = ReverseMethodQuery.get();
ReverseTraceMethod currTrace = ReverseTraceMethod.INVALID;
if (returnedTrace == ReverseTraceMethod.INVALID)
return isReverseToggled(context) ? ReverseTraceMethod.FULL_TRACE : ReverseTraceMethod.STOP_TRACE ;
currTrace = isReverseToggled(context) ? ReverseTraceMethod.FULL_TRACE : ReverseTraceMethod.STOP_TRACE ;
else
return (returnedTrace == ReverseTraceMethod.BRANCH_TRACE ||
currTrace = (returnedTrace == ReverseTraceMethod.BRANCH_TRACE ||
returnedTrace == ReverseTraceMethod.PROCESSOR_TRACE ||
returnedTrace == ReverseTraceMethod.GDB_TRACE ) ? ReverseTraceMethod.HARDWARE_TRACE : returnedTrace;
if (currTrace != fTraceMethod) {
fLastTraceMethod = fTraceMethod;
fTraceMethod = currTrace;
}
return fTraceMethod;
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} catch (RejectedExecutionException e) {
@ -347,4 +358,9 @@ public class GdbReverseToggleCommand extends AbstractDebugCommand implements ICh
return ReverseTraceMethod.STOP_TRACE;
}
@Override
public ReverseTraceMethod getLastTraceMethod(Object context) {
return fLastTraceMethod;
}
}