diff options
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui')
2 files changed, 88 insertions, 154 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/model/VisualizerModel.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/model/VisualizerModel.java index 820f9c102b8..2f59259e81a 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/model/VisualizerModel.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/model/VisualizerModel.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Tilera Corporation and others. + * Copyright (c) 2012, 2015 Tilera Corporation 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 @@ -20,8 +20,6 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; -import org.eclipse.cdt.visualizer.ui.util.Todo; - /** * Class representing the state of the data to display in the MulticoreVisualizer. */ @@ -38,12 +36,6 @@ public class VisualizerModel /** List of threads */ protected ArrayList<VisualizerThread> m_threads; - /** Completion state tracker. */ - protected Todo m_todo; - - /** Completion state tracker for load meters. */ - protected Todo m_loadTodo; - // Setting to remove exited threads, or keep them shown. // If we are to support this, we should have a preference // and a way to for the user to clean up old threads, @@ -63,8 +55,6 @@ public class VisualizerModel m_cpus = new ArrayList<VisualizerCPU>(); m_cpuMap = new Hashtable<Integer, VisualizerCPU>(); m_threads = new ArrayList<VisualizerThread>(); - m_todo = new Todo(); - m_loadTodo = new Todo(); } /** Dispose method */ @@ -85,30 +75,12 @@ public class VisualizerModel m_threads.clear(); m_threads = null; } - if (m_todo != null) { - m_todo.dispose(); - m_todo = null; - } - if (m_loadTodo != null) { - m_loadTodo.dispose(); - m_loadTodo = null; - } m_sessionId = null; } // --- accessors --- - - /** Gets completion state tracker. */ - public Todo getTodo() { - return m_todo; - } - - /** Gets completion state tracker. */ - public Todo getLoadTodo() { - return m_loadTodo; - } - + public void setLoadMetersEnabled (boolean enable) { m_loadMetersEnabled = enable; } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java index 142cf168c2c..05aaeebf6f0 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java @@ -26,6 +26,7 @@ * Marc Dumais (Ericsson) - Bug 460737 * Marc Dumais (Ericsson) - Bug 460837 * Marc Dumais (Ericsson) - Bug 460476 + * Marc Khouzam (Ericsson) - Use DSF usual async pattern (Bug 459114) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; @@ -37,10 +38,13 @@ import java.util.List; import java.util.Set; import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; -import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DsfExecutor; import org.eclipse.cdt.dsf.concurrent.DsfRunnable; +import org.eclipse.cdt.dsf.concurrent.ImmediateCountingRequestMonitor; import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.cdt.dsf.datamodel.DMContexts; import org.eclipse.cdt.dsf.datamodel.IDMContext; import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMData; @@ -1137,11 +1141,8 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin // clear CPU/core cache m_cpuCoreContextsCache.clear(); - m_sessionState.execute(new DsfRunnable() { @Override public void run() { - // get model asynchronously, and update canvas - // in getVisualizerModelDone(). - getVisualizerModel(); - }}); + fDataModel = new VisualizerModel(m_sessionState.getSessionID()); + getVisualizerModel(fDataModel); } /** Sets canvas model. (Also updates canvas selection.) */ @@ -1199,54 +1200,44 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin // --- Visualizer model update methods --- - /** Starts visualizer model request. - * Calls getVisualizerModelDone() with the constructed model. + /** + * Starts visualizer model request. */ - @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getVisualizerModel() { - String sessionId = m_sessionState.getSessionID(); - DsfSession session = DsfSession.getSession(sessionId); - - if (session != null) { - final VisualizerModel model = new VisualizerModel(sessionId); - fDataModel = model; - fTargetData.getCPUs(m_sessionState, new DataRequestMonitor<ICPUDMContext[]>(session.getExecutor(), null) { + protected void getVisualizerModel(final VisualizerModel model) { + m_sessionState.execute(new DsfRunnable() { @Override public void run() { + // get model asynchronously starting at the top of the hierarchy + getCPUs(model, new ImmediateRequestMonitor() { @Override protected void handleCompleted() { - ICPUDMContext[] cpuContexts = isSuccess() ? getData() : null; - getCPUsDone(cpuContexts, model); + model.setLoadMetersEnabled(getLoadMetersEnabled()); + updateLoads(model); + model.sort(); + setCanvasModel(model); } }); - } + }}); } - /** Invoked when getModel() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getVisualizerModelDone(VisualizerModel model) { - model.setLoadMetersEnabled(getLoadMetersEnabled()); - updateLoads(model); - model.sort(); - setCanvasModel(model); + protected void getCPUs(final VisualizerModel model, final RequestMonitor rm) { + fTargetData.getCPUs(m_sessionState, new ImmediateDataRequestMonitor<ICPUDMContext[]>() { + @Override + protected void handleCompleted() { + ICPUDMContext[] cpuContexts = isSuccess() ? getData() : null; + getCores(cpuContexts, model, rm); + } + }); } - - // --- DSFDebugModelListener implementation --- - - /** Invoked when DSFDebugModel.getCPUs() completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getCPUsDone(ICPUDMContext[] cpuContexts, final Object arg) + protected void getCores(ICPUDMContext[] cpuContexts, final VisualizerModel model, final RequestMonitor rm) { - VisualizerModel model = (VisualizerModel) arg; - if (cpuContexts == null || cpuContexts.length == 0) { // Whoops, no CPU data. // We'll fake a CPU and use it to contain any cores we find. model.addCPU(new VisualizerCPU(0)); - // keep track of CPUs left to visit - model.getTodo().add(1); - // Collect core data. fTargetData.getCores(m_sessionState, new ImmediateDataRequestMonitor<ICoreDMContext[]>() { @Override @@ -1263,16 +1254,15 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin } // Continue - getCoresDone(cpu, coreContexts, arg); + getThreads(cpu, coreContexts, model, rm); } }); } else { // save CPU contexts m_cpuCoreContextsCache.addAll(Arrays.asList(cpuContexts)); - // keep track of CPUs left to visit - int count = cpuContexts.length; - model.getTodo().add(count); + final CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm); + crm.setDoneCount(cpuContexts.length); for (final ICPUDMContext cpuContext : cpuContexts) { int cpuID = Integer.parseInt(cpuContext.getId()); @@ -1283,22 +1273,23 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin @Override protected void handleCompleted() { ICoreDMContext[] coreContexts = isSuccess() ? getData() : null; - getCoresDone(cpuContext, coreContexts, arg); + getThreads(cpuContext, coreContexts, model, crm); } }); } } } - /** Invoked when getCores() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getCoresDone(final ICPUDMContext cpuContext, ICoreDMContext[] coreContexts, final Object arg) + protected void getThreads(final ICPUDMContext cpuContext, + ICoreDMContext[] coreContexts, + final VisualizerModel model, + RequestMonitor rm) { - VisualizerModel model = (VisualizerModel) arg; - if (coreContexts == null || coreContexts.length == 0) { // no cores for this cpu context // That's fine. + rm.done(); } else { // save core contexts m_cpuCoreContextsCache.addAll(Arrays.asList(coreContexts)); @@ -1306,10 +1297,9 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin int cpuID = Integer.parseInt(cpuContext.getId()); VisualizerCPU cpu = model.getCPU(cpuID); - // keep track of Cores left to visit - int count = coreContexts.length; - model.getTodo().add(count); - + final CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm); + crm.setDoneCount(coreContexts.length); + for (final ICoreDMContext coreContext : coreContexts) { int coreID = Integer.parseInt(coreContext.getId()); cpu.addCore(new VisualizerCore(cpu, coreID)); @@ -1319,35 +1309,27 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin @Override protected void handleCompleted() { IDMContext[] threadContexts = isSuccess() ? getData() : null; - - getThreadsDone(cpuContext, coreContext, threadContexts, arg); + getThreadData(cpuContext, coreContext, threadContexts, model, crm); } }); } } - - // keep track of CPUs visited - // note: do this _after_ incrementing for cores - done(1, model); } - - /** Invoked when getThreads() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getThreadsDone(final ICPUDMContext cpuContext, - final ICoreDMContext coreContext, - IDMContext[] threadContexts, - final Object arg) + protected void getThreadData(final ICPUDMContext cpuContext, + final ICoreDMContext coreContext, + IDMContext[] threadContexts, + final VisualizerModel model, + RequestMonitor rm) { - VisualizerModel model = (VisualizerModel) arg; - if (threadContexts == null || threadContexts.length == 0) { // no threads for this core // That's fine. + rm.done(); } else { - // keep track of threads left to visit - int count = threadContexts.length; - model.getTodo().add(count); + final CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm); + crm.setDoneCount(threadContexts.length); for (IDMContext threadContext : threadContexts) { final IMIExecutionDMContext execContext = @@ -1358,24 +1340,21 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin @Override protected void handleCompleted() { IThreadDMData threadData = isSuccess() ? getData() : null; - getThreadDataDone(cpuContext, coreContext, execContext, threadData, arg); + getThreadExecutionState(cpuContext, coreContext, execContext, threadData, model, crm); } }); } } - - // keep track of cores visited - // note: do this _after_ incrementing for threads - done(1, model); } /** Invoked when getThreads() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getThreadDataDone(final ICPUDMContext cpuContext, - final ICoreDMContext coreContext, - final IMIExecutionDMContext execContext, - final IThreadDMData threadData, - final Object arg) + protected void getThreadExecutionState(final ICPUDMContext cpuContext, + final ICoreDMContext coreContext, + final IMIExecutionDMContext execContext, + final IThreadDMData threadData, + final VisualizerModel model, + final RequestMonitor rm) { // Get the execution state fTargetData.getThreadExecutionState(m_sessionState, cpuContext, coreContext, execContext, @@ -1390,13 +1369,13 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin protected void handleCompleted() { IFrameDMData frameData = isSuccess() ? getData() : null; getThreadExecutionStateDone(cpuContext, coreContext, execContext, threadData, - frameData, state, arg); + frameData, state, model, rm); } }); } else { // frame data is not valid getThreadExecutionStateDone(cpuContext, coreContext, execContext, threadData, - null, state, arg); + null, state, model, rm); } } }); @@ -1405,15 +1384,15 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin /** Invoked when getThreadExecutionState() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getThreadExecutionStateDone(ICPUDMContext cpuContext, - ICoreDMContext coreContext, - IMIExecutionDMContext execContext, - IThreadDMData threadData, - IFrameDMData frame, - VisualizerExecutionState state, - Object arg) + protected void getThreadExecutionStateDone(ICPUDMContext cpuContext, + ICoreDMContext coreContext, + IMIExecutionDMContext execContext, + IThreadDMData threadData, + IFrameDMData frame, + VisualizerExecutionState state, + VisualizerModel model, + RequestMonitor rm) { - VisualizerModel model = (VisualizerModel) arg; int cpuID = Integer.parseInt(cpuContext.getId()); VisualizerCPU cpu = model.getCPU(cpuID); int coreID = Integer.parseInt(coreContext.getId()); @@ -1448,13 +1427,12 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin t.setLocationInfo(frame); } - // keep track of threads visited - done(1, model); + rm.done(); } /** Updates the loads for all cpus and cores */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void updateLoads(final VisualizerModel model) { + protected void updateLoads(final VisualizerModel model) { if (m_cpuCoreContextsCache.isEmpty()) { // not ready to get load info yet return; @@ -1464,9 +1442,21 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin return; } - model.getLoadTodo().dispose(); - // keep track of how many loads we expect - model.getLoadTodo().add(m_cpuCoreContextsCache.size()); + final CountingRequestMonitor crm = new ImmediateCountingRequestMonitor() { + @Override + protected void handleSuccess() { + // canvas may have been disposed since the transaction has started + if (m_canvas != null) { + m_canvas.refreshLoadMeters(); + m_canvas.requestUpdate(); + } + if (m_updateLoadMeterTimer != null) { + // re-start timer + m_updateLoadMeterTimer.start(); + } + } + }; + crm.setDoneCount(m_cpuCoreContextsCache.size()); // ask load for each CPU and core for (final IDMContext context : m_cpuCoreContextsCache) { @@ -1474,7 +1464,7 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin @Override protected void handleCompleted() { ILoadInfo loadInfo = isSuccess() ? getData() : null; - getLoadDone(context, loadInfo, model); + getLoadDone(context, loadInfo, model, crm); } }); } @@ -1482,9 +1472,8 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin /** Invoked when a getLoad() request completes. */ @ConfinedToDsfExecutor("getSession().getExecutor()") - public void getLoadDone(IDMContext context, ILoadInfo load, Object arg) + protected void getLoadDone(IDMContext context, ILoadInfo load, VisualizerModel model, RequestMonitor rm) { - VisualizerModel model = (VisualizerModel) arg; Integer l = null; if (load != null) { @@ -1504,32 +1493,7 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin core.setLoadInfo(new VisualizerLoadInfo(l)); } - loadDone(1, model); - } - - - /** Update "done" count for current visualizer model. */ - protected void done(int n, VisualizerModel model) { - model.getTodo().done(n); - if (model.getTodo().isDone()) { - getVisualizerModelDone(model); - } - } - - /** Update "done" count for current visualizer model. */ - protected void loadDone(int n, VisualizerModel model) { - model.getLoadTodo().done(n); - if (model.getLoadTodo().isDone()) { - // canvas may have been disposed since the transaction has started - if (m_canvas != null) { - m_canvas.refreshLoadMeters(); - m_canvas.requestUpdate(); - } - if (m_updateLoadMeterTimer != null) { - // re-start timer - m_updateLoadMeterTimer.start(); - } - } + rm.done(); } private Timer getLoadTimer(final DSFSessionState sessionState, final int timeout) { @@ -1544,8 +1508,7 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin executor.execute(new Runnable() { @Override public void run() { - final VisualizerModel model = fDataModel; - updateLoads(model); + updateLoads(fDataModel); } }); } @@ -1556,6 +1519,5 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin return t; } - } |