Skip to content

Commit 7f18609

Browse files
theibhirMatthewKhouzam
authored andcommitted
tmf:refresh open state system analysis
refresh open state system on fetchTree remove deleted modules from the maps use Amazon Q for understanding the code Signed-off-by: Yassine Ibhir <[email protected]>
1 parent 7951df7 commit 7f18609

File tree

1 file changed

+52
-22
lines changed

1 file changed

+52
-22
lines changed

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/statesystem/provider/StateSystemDataProvider.java

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public class StateSystemDataProvider extends AbstractTmfTraceDataProvider implem
102102
private final Map<Long, ITmfStateSystem> fIdToSs = new HashMap<>();
103103
private final Map<Long, ModuleEntryModel> fIdToModuleEntryModel = new HashMap<>();
104104

105-
private final Map<ITmfAnalysisModuleWithStateSystems, Boolean> fModulesToStatus = new HashMap<>();
105+
private final Map<ITmfAnalysisModuleWithStateSystems, Boolean> fModulesToStatus = new ConcurrentHashMap<>();
106106

107107
/*
108108
* Entry Builder is a table to stash the entries so it won't duplicate the
@@ -148,16 +148,16 @@ public class StateSystemDataProvider extends AbstractTmfTraceDataProvider implem
148148
}
149149

150150
private static final Comparator<ITimeGraphEntryModel> NAME_COMPARATOR = (a, b) -> {
151-
if (a instanceof TraceEntryModel && b instanceof TraceEntryModel) {
152-
ITmfTrace ta = ((TraceEntryModel) a).getTrace();
153-
ITmfTrace tb = ((TraceEntryModel) b).getTrace();
154-
// Puts the experiment entries at the top of the list
155-
if (ta instanceof TmfExperiment && !(tb instanceof TmfExperiment)) {
156-
return -1;
157-
} else if (!(ta instanceof TmfExperiment) && (tb instanceof TmfExperiment)) {
158-
return 1;
159-
}
151+
if (a instanceof TraceEntryModel && b instanceof TraceEntryModel) {
152+
ITmfTrace ta = ((TraceEntryModel) a).getTrace();
153+
ITmfTrace tb = ((TraceEntryModel) b).getTrace();
154+
// Puts the experiment entries at the top of the list
155+
if (ta instanceof TmfExperiment && !(tb instanceof TmfExperiment)) {
156+
return -1;
157+
} else if (!(ta instanceof TmfExperiment) && (tb instanceof TmfExperiment)) {
158+
return 1;
160159
}
160+
}
161161

162162
try {
163163
return Long.compare(Long.parseLong(a.getName()), Long.parseLong(b.getName()));
@@ -176,8 +176,34 @@ public class StateSystemDataProvider extends AbstractTmfTraceDataProvider implem
176176
*/
177177
public StateSystemDataProvider(ITmfTrace trace) {
178178
super(trace);
179+
updateRegisteredAnalysisModules(trace);
180+
}
181+
182+
private void updateRegisteredAnalysisModules(ITmfTrace trace) {
183+
Set<ITmfAnalysisModuleWithStateSystems> traceAnalyses = new HashSet<>(fModulesToStatus.keySet());
179184
for (ITmfAnalysisModuleWithStateSystems module : Objects.requireNonNull(Iterables.filter(trace.getAnalysisModules(), ITmfAnalysisModuleWithStateSystems.class))) {
180-
fModulesToStatus.put(module, false);
185+
traceAnalyses.remove(module);
186+
fModulesToStatus.putIfAbsent(module, false);
187+
}
188+
189+
// Remove any deleted state system modules
190+
synchronized (fEntryBuilder) {
191+
for (ITmfAnalysisModuleWithStateSystems module : traceAnalyses) {
192+
// Remove module
193+
fModulesToStatus.remove(module);
194+
// Remove corresponding entries
195+
String traceName = Objects.requireNonNull(trace.getName());
196+
EntryModelBuilder entry = fEntryBuilder.get(-1L, traceName);
197+
if (entry != null) {
198+
long parentId = entry.getId();
199+
entry = fEntryBuilder.get(parentId, module.getName());
200+
if (entry != null) {
201+
// Delete module entry and its children
202+
removeEntryAndChildren(entry.getId());
203+
fEntryBuilder.remove(parentId, module.getName());
204+
}
205+
}
206+
}
181207
}
182208
}
183209

@@ -506,6 +532,7 @@ public int getQuark() {
506532

507533
@Override
508534
public @NonNull TmfModelResponse<TmfTreeModel<TimeGraphEntryModel>> fetchTree(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
535+
509536
// need to create the tree
510537
boolean fetchTreeIsComplete;
511538
synchronized (fEntryBuilder) {
@@ -529,6 +556,8 @@ public int getQuark() {
529556
private boolean addTrace(@Nullable IProgressMonitor monitor) {
530557
boolean fetchTreeIsComplete = true;
531558
ITmfTrace trace = getTrace();
559+
// Add newly created analysis and remove deleted analysis
560+
updateRegisteredAnalysisModules(trace);
532561

533562
// look if the trace entry already exist
534563
String traceName = Objects.requireNonNull(trace.getName());
@@ -621,7 +650,7 @@ private boolean addModule(@Nullable IProgressMonitor monitor, ITmfAnalysisModule
621650
*/
622651
EntryModelBuilder ssEntry = fEntryBuilder.get(moduleId, ss.getSSID());
623652
if (ssEntry != null) {
624-
deleteElementFromBuildEntryList(ssEntry.getId());
653+
removeEntryAndChildren(ssEntry.getId());
625654
}
626655
}
627656
}
@@ -715,11 +744,13 @@ private List<TimeGraphEntryModel> buildEntryList(@Nullable IProgressMonitor moni
715744
return entryList;
716745
}
717746

718-
private void deleteElementFromBuildEntryList(Long rowID) {
719-
for (EntryModelBuilder entry : fEntryBuilder.row(rowID).values()) {
720-
deleteElementFromBuildEntryList(entry.getId());
747+
private void removeEntryAndChildren(Long entryID) {
748+
for (EntryModelBuilder entry : fEntryBuilder.row(entryID).values()) {
749+
removeEntryAndChildren(entry.getId());
721750
}
722-
fEntryBuilder.row(rowID).clear();
751+
fEntryBuilder.row(entryID).clear();
752+
fIDToSSQuark.remove(entryID);
753+
fIdToSs.remove(entryID);
723754
}
724755

725756
private void waitForInitialization(ITmfTrace trace, ITmfAnalysisModuleWithStateSystems module) {
@@ -794,21 +825,20 @@ private void waitForInitialization(ITmfTrace trace, ITmfAnalysisModuleWithStateS
794825
private @Nullable ITimeGraphRowModel getModuleRowModel(long id) {
795826
ModuleEntryModel module = fIdToModuleEntryModel.get(id);
796827
if (module != null) {
797-
TimeGraphRowModel moduleRow = new TimeGraphRowModel(module.getId(), new ArrayList<>());
798-
List<ITimeGraphState> states = moduleRow.getStates();
828+
List<ITimeGraphState> states = new ArrayList<>();
799829
states.add(new TimeGraphState(module.getStartTime(), module.getEndTime() - module.getStartTime(), Integer.MAX_VALUE, null, new OutputElementStyle(TRANSPARENT)));
800-
return moduleRow;
830+
return new TimeGraphRowModel(module.getId(), states);
831+
801832
}
802833
return null;
803834
}
804835

805836
private @Nullable ITimeGraphRowModel getStateSystemRowModel(long id) {
806837
ITmfStateSystem ss = fIdToSs.get(id);
807838
if (ss != null) {
808-
TimeGraphRowModel ssRow = new TimeGraphRowModel(id, new ArrayList<>());
809-
List<ITimeGraphState> states = ssRow.getStates();
839+
List<ITimeGraphState> states = new ArrayList<>();
810840
states.add(new TimeGraphState(ss.getStartTime(), ss.getCurrentEndTime() - ss.getStartTime(), Integer.MAX_VALUE, null, new OutputElementStyle(TRANSPARENT)));
811-
return ssRow;
841+
return new TimeGraphRowModel(id, states);
812842
}
813843
return null;
814844
}

0 commit comments

Comments
 (0)