mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[245297] - [non-stop][cache] Caching may not be possible in non-stop mode
This commit is contained in:
parent
4bd72a218e
commit
9384592322
9 changed files with 137 additions and 5 deletions
|
@ -13,7 +13,9 @@ package org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression;
|
|||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.FormattedValuePreferenceStore;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.IFormattedValuePreferenceStore;
|
||||
|
@ -24,7 +26,12 @@ import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.register.SyncR
|
|||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.update.BreakpointHitUpdatePolicy;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.variable.SyncVariableDataAccess;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.variable.VariableVMNode;
|
||||
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.dsf.service.DsfSession;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.DefaultVMContentProviderStrategy;
|
||||
|
@ -344,4 +351,27 @@ public class ExpressionVMProvider extends AbstractDMVMProvider
|
|||
// events.
|
||||
return newEvent instanceof ISuspendedDMEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
super.refresh();
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
DsfServicesTracker tracker = new DsfServicesTracker(DsfDebugUIPlugin.getBundleContext(), getSession().getId());
|
||||
IExpressions expressionsService = tracker.getService(IExpressions.class);
|
||||
if (expressionsService instanceof ICachingService) {
|
||||
((ICachingService)expressionsService).flushCache(null);
|
||||
}
|
||||
IRegisters registerService = tracker.getService(IRegisters.class);
|
||||
if (registerService instanceof ICachingService) {
|
||||
((ICachingService)registerService).flushCache(null);
|
||||
}
|
||||
tracker.dispose();
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
// Session disposed, ignore.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,12 +10,19 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.register;
|
||||
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.FormattedValuePreferenceStore;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.update.BreakpointHitUpdatePolicy;
|
||||
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.dsf.service.DsfSession;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMContext;
|
||||
|
@ -227,4 +234,23 @@ public class RegisterVMProvider extends AbstractDMVMProvider
|
|||
return fDMContext.hashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
super.refresh();
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
DsfServicesTracker tracker = new DsfServicesTracker(DsfDebugUIPlugin.getBundleContext(), getSession().getId());
|
||||
IRegisters registerService = tracker.getService(IRegisters.class);
|
||||
if (registerService instanceof ICachingService) {
|
||||
((ICachingService)registerService).flushCache(null);
|
||||
}
|
||||
tracker.dispose();
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
// Session disposed, ignore.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,9 +10,16 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.variable;
|
||||
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.numberformat.FormattedValuePreferenceStore;
|
||||
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.update.BreakpointHitUpdatePolicy;
|
||||
import org.eclipse.dd.dsf.debug.internal.ui.DsfDebugUIPlugin;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.dsf.service.DsfSession;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
||||
import org.eclipse.dd.dsf.ui.viewmodel.IRootVMNode;
|
||||
|
@ -93,4 +100,22 @@ public class VariableVMProvider extends AbstractDMVMProvider
|
|||
return newEvent instanceof ISuspendedDMEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
super.refresh();
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
DsfServicesTracker tracker = new DsfServicesTracker(DsfDebugUIPlugin.getBundleContext(), getSession().getId());
|
||||
IExpressions expressionsService = tracker.getService(IExpressions.class);
|
||||
if (expressionsService instanceof ICachingService) {
|
||||
((ICachingService)expressionsService).flushCache(null);
|
||||
}
|
||||
tracker.dispose();
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
// Session disposed, ignore.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2008 Wind River Systems 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Wind River Systems - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.dd.dsf.debug.service;
|
||||
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
|
||||
/**
|
||||
* Interface for services which use an internal cache for data.
|
||||
*/
|
||||
public interface ICachingService {
|
||||
|
||||
/**
|
||||
* Clears the service cache entries which have the given context in their
|
||||
* hierachy.
|
||||
* @param context Root context to flush. May be <code>null</code> to flush
|
||||
* the entire cache.
|
||||
*/
|
||||
public void flushCache(IDMContext context);
|
||||
}
|
|
@ -20,6 +20,7 @@ import org.eclipse.dd.dsf.datamodel.AbstractDMContext;
|
|||
import org.eclipse.dd.dsf.datamodel.AbstractDMEvent;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.IResumedDMEvent;
|
||||
|
@ -41,7 +42,7 @@ import org.osgi.framework.BundleContext;
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public class PDAExpressions extends AbstractDsfService implements IExpressions {
|
||||
public class PDAExpressions extends AbstractDsfService implements ICachingService, IExpressions {
|
||||
|
||||
@Immutable
|
||||
private static class ExpressionDMContext extends AbstractDMContext implements IExpressionDMContext {
|
||||
|
@ -540,4 +541,7 @@ public class PDAExpressions extends AbstractDsfService implements IExpressions {
|
|||
fCommandCache.reset(DMContexts.getAncestorOfType(e.getDMContext(), PDAThreadDMContext.class));
|
||||
}
|
||||
|
||||
public void flushCache(IDMContext context) {
|
||||
fCommandCache.reset(context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.eclipse.dd.dsf.datamodel.AbstractDMContext;
|
|||
import org.eclipse.dd.dsf.datamodel.AbstractDMEvent;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext;
|
||||
|
@ -41,7 +42,7 @@ import org.osgi.framework.BundleContext;
|
|||
*
|
||||
*/
|
||||
public class PDARegisters extends AbstractDsfService
|
||||
implements IRegisters, IEventListener
|
||||
implements IRegisters, IEventListener, ICachingService
|
||||
{
|
||||
|
||||
private static class RegisterGroupDMContext extends AbstractDMContext implements IRegisterGroupDMContext {
|
||||
|
@ -548,4 +549,8 @@ public class PDARegisters extends AbstractDsfService
|
|||
fNamesCache.reset();
|
||||
}
|
||||
}
|
||||
|
||||
public void flushCache(IDMContext context) {
|
||||
fExpressions.flushCache(context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.eclipse.dd.dsf.datamodel.AbstractDMContext;
|
|||
import org.eclipse.dd.dsf.datamodel.AbstractDMEvent;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl;
|
||||
|
@ -59,7 +60,7 @@ import org.osgi.framework.BundleContext;
|
|||
* This class implements a debugger expression evaluator as a DSF service. The
|
||||
* primary interface that clients of this class should use is IExpressions.
|
||||
*/
|
||||
public class ExpressionService extends AbstractDsfService implements IExpressions {
|
||||
public class ExpressionService extends AbstractDsfService implements IExpressions, ICachingService {
|
||||
|
||||
/**
|
||||
* This class represents the two expressions that characterize an Expression Context.
|
||||
|
@ -912,4 +913,8 @@ public class ExpressionService extends AbstractDsfService implements IExpression
|
|||
// MIVariableManager separately traps this event
|
||||
}
|
||||
|
||||
public void flushCache(IDMContext context) {
|
||||
fExpressionCache.reset();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
|||
import org.eclipse.dd.dsf.datamodel.AbstractDMEvent;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.dd.dsf.debug.service.IMemory;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl;
|
||||
|
@ -51,7 +52,7 @@ import org.osgi.framework.BundleContext;
|
|||
/**
|
||||
* Memory service implementation
|
||||
*/
|
||||
public class MIMemory extends AbstractDsfService implements IMemory {
|
||||
public class MIMemory extends AbstractDsfService implements IMemory, ICachingService {
|
||||
|
||||
public class MemoryChangedEvent extends AbstractDMEvent<IMemoryDMContext>
|
||||
implements IMemoryChangedEvent
|
||||
|
@ -906,4 +907,7 @@ public class MIMemory extends AbstractDsfService implements IMemory {
|
|||
|
||||
}
|
||||
|
||||
public void flushCache(IDMContext context) {
|
||||
fMemoryCache.reset();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
|||
import org.eclipse.dd.dsf.datamodel.AbstractDMContext;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.ICachingService;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl;
|
||||
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext;
|
||||
|
@ -53,7 +54,7 @@ import org.osgi.framework.BundleContext;
|
|||
* always be consistent with the events.
|
||||
*/
|
||||
|
||||
public class MIRegisters extends AbstractDsfService implements IRegisters {
|
||||
public class MIRegisters extends AbstractDsfService implements IRegisters, ICachingService {
|
||||
private static final String BLANK_STRING = ""; //$NON-NLS-1$
|
||||
/*
|
||||
* Support class used to construct Register Group DMCs.
|
||||
|
@ -621,4 +622,9 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
|
|||
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, NOT_SUPPORTED, "Finding a Register Group context not supported", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
|
||||
public void flushCache(IDMContext context) {
|
||||
fRegisterNameCache.reset(context);
|
||||
fRegisterValueCache.reset(context);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue