mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[291346] Improve tracing for AbctractVMProvider
This commit is contained in:
parent
f0ad66391f
commit
ad94b7f3a9
1 changed files with 56 additions and 9 deletions
|
@ -23,6 +23,8 @@ import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.internal.DsfPlugin;
|
||||||
|
import org.eclipse.cdt.dsf.internal.LoggingUtils;
|
||||||
import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
|
import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
|
||||||
import org.eclipse.cdt.dsf.ui.concurrent.SimpleDisplayExecutor;
|
import org.eclipse.cdt.dsf.ui.concurrent.SimpleDisplayExecutor;
|
||||||
import org.eclipse.cdt.dsf.ui.concurrent.ViewerDataRequestMonitor;
|
import org.eclipse.cdt.dsf.ui.concurrent.ViewerDataRequestMonitor;
|
||||||
|
@ -253,6 +255,10 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
* @since 1.1
|
* @since 1.1
|
||||||
*/
|
*/
|
||||||
public void handleEvent(final Object event, RequestMonitor rm) {
|
public void handleEvent(final Object event, RequestMonitor rm) {
|
||||||
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
|
trace(event, null, null, EventHandlerAction.received);
|
||||||
|
}
|
||||||
|
|
||||||
CountingRequestMonitor crm = new CountingRequestMonitor(getExecutor(), rm);
|
CountingRequestMonitor crm = new CountingRequestMonitor(getExecutor(), rm);
|
||||||
final List<IVMModelProxy> activeModelProxies= new ArrayList<IVMModelProxy>(getActiveModelProxies());
|
final List<IVMModelProxy> activeModelProxies= new ArrayList<IVMModelProxy>(getActiveModelProxies());
|
||||||
crm.setDoneCount(activeModelProxies.size());
|
crm.setDoneCount(activeModelProxies.size());
|
||||||
|
@ -270,9 +276,6 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
// Also, process the event if it is a result of the user modifying something
|
// Also, process the event if it is a result of the user modifying something
|
||||||
// so that the cache is properly updated.
|
// so that the cache is properly updated.
|
||||||
if (proxyStrategy.isDeltaEvent(event) || event instanceof UserEditEvent) {
|
if (proxyStrategy.isDeltaEvent(event) || event instanceof UserEditEvent) {
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
|
||||||
DsfUIPlugin.debug("eventReceived(proxyRoot = " + proxyStrategy .getRootElement() + ", event = " + event + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
|
||||||
}
|
|
||||||
if (!fProxyEventQueues.containsKey(proxyStrategy)) {
|
if (!fProxyEventQueues.containsKey(proxyStrategy)) {
|
||||||
fProxyEventQueues.put(proxyStrategy, new ModelProxyEventQueue());
|
fProxyEventQueues.put(proxyStrategy, new ModelProxyEventQueue());
|
||||||
}
|
}
|
||||||
|
@ -289,7 +292,7 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
|
|
||||||
if (canSkipHandlingEvent(event, eventToSkipInfo.fEvent)) {
|
if (canSkipHandlingEvent(event, eventToSkipInfo.fEvent)) {
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
DsfUIPlugin.debug("eventSkipped(proxyRoot = " + proxyStrategy.getRootElement() + ", event = " + eventToSkipInfo + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
trace(event, eventToSkipInfo.fEvent, proxyStrategy, EventHandlerAction.skipped);
|
||||||
}
|
}
|
||||||
queue.fEventQueue.remove(queue.fEventQueue.size() - 1);
|
queue.fEventQueue.remove(queue.fEventQueue.size() - 1);
|
||||||
eventToSkipInfo.fClientRm.done();
|
eventToSkipInfo.fClientRm.done();
|
||||||
|
@ -302,13 +305,13 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
// processing
|
// processing
|
||||||
if (queue.fEventQueue.isEmpty() && canSkipHandlingEvent(event, queue.fCurrentEvent.fEvent)) {
|
if (queue.fEventQueue.isEmpty() && canSkipHandlingEvent(event, queue.fCurrentEvent.fEvent)) {
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
DsfUIPlugin.debug("eventCancelled(proxyRoot = " + proxyStrategy.getRootElement() + ", event = " + queue.fCurrentEvent + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
trace(event, queue.fCurrentEvent.fEvent, proxyStrategy, EventHandlerAction.canceled);
|
||||||
}
|
}
|
||||||
queue.fCurrentRm.cancel();
|
queue.fCurrentRm.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
DsfUIPlugin.debug("eventQueued(proxyRoot = " + proxyStrategy.getRootElement() + ", event = " + event + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
trace(event, null, proxyStrategy, EventHandlerAction.queued);
|
||||||
}
|
}
|
||||||
queue.fEventQueue.add(new EventInfo(event, crm));
|
queue.fEventQueue.add(new EventInfo(event, crm));
|
||||||
} else {
|
} else {
|
||||||
|
@ -370,7 +373,7 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
protected void handleEvent(final IVMModelProxy proxyStrategy, final Object event, final RequestMonitor rm) {
|
protected void handleEvent(final IVMModelProxy proxyStrategy, final Object event, final RequestMonitor rm) {
|
||||||
if (!proxyStrategy.isDisposed()) {
|
if (!proxyStrategy.isDisposed()) {
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
DsfUIPlugin.debug("eventProcessing(proxyRoot = " + proxyStrategy.getRootElement() + ", event = " + event + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
trace(event, null, proxyStrategy, EventHandlerAction.processing);
|
||||||
}
|
}
|
||||||
proxyStrategy.createDelta(
|
proxyStrategy.createDelta(
|
||||||
event,
|
event,
|
||||||
|
@ -379,7 +382,7 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
public void handleSuccess() {
|
public void handleSuccess() {
|
||||||
proxyStrategy.fireModelChanged(getData());
|
proxyStrategy.fireModelChanged(getData());
|
||||||
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
if (DEBUG_DELTA && (DEBUG_PRESENTATION_ID == null || getPresentationContext().getId().equals(DEBUG_PRESENTATION_ID))) {
|
||||||
DsfUIPlugin.debug("eventDeltaFired(proxyRoot = " + proxyStrategy.getRootElement() + ", event = " + event + ")" ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
trace(event, null, proxyStrategy, EventHandlerAction.firedDeltaFor);
|
||||||
}
|
}
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
|
@ -749,5 +752,49 @@ abstract public class AbstractVMProvider implements IVMProvider, IVMEventListene
|
||||||
public void update(IViewerInputUpdate update) {
|
public void update(IViewerInputUpdate update) {
|
||||||
update.setInputElement(update.getElement());
|
update.setInputElement(update.getElement());
|
||||||
update.done();
|
update.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for tracing event handling
|
||||||
|
*/
|
||||||
|
private enum EventHandlerAction {
|
||||||
|
received,
|
||||||
|
queued,
|
||||||
|
processing,
|
||||||
|
firedDeltaFor,
|
||||||
|
skipped,
|
||||||
|
canceled
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trace that we've reached a particular phase of the handling of an event
|
||||||
|
* for a particular proxy.
|
||||||
|
*
|
||||||
|
* @param event
|
||||||
|
* the event being handled
|
||||||
|
* @param skippedOrCanceledEvent
|
||||||
|
* for a 'skip' or 'cancel' action, this is the event that is
|
||||||
|
* being dismissed. Otherwise null
|
||||||
|
* @param proxy
|
||||||
|
* the target proxy; n/a (null) for a 'received' action.
|
||||||
|
* @param action
|
||||||
|
* what phased of the event handling has beeb reached
|
||||||
|
*/
|
||||||
|
private void trace(Object event, Object skippedOrCanceledEvent, IVMModelProxy proxy, EventHandlerAction action) {
|
||||||
|
assert DEBUG_DELTA;
|
||||||
|
StringBuilder str = new StringBuilder();
|
||||||
|
str.append(DsfPlugin.getDebugTime());
|
||||||
|
str.append(' ');
|
||||||
|
if (action == EventHandlerAction.skipped || action == EventHandlerAction.canceled) {
|
||||||
|
str.append(LoggingUtils.toString(this) + " " + action.toString() + " event " + LoggingUtils.toString(skippedOrCanceledEvent) + " because of event " + LoggingUtils.toString(event)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
str.append(LoggingUtils.toString(this) + " " + action.toString() + " event " + LoggingUtils.toString(event)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action != EventHandlerAction.received) {
|
||||||
|
str.append(" for proxy " + LoggingUtils.toString(proxy) + ", whose root is " + LoggingUtils.toString(proxy.getRootElement())); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
}
|
||||||
|
DsfUIPlugin.debug(str.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue