Skip to content

Commit 1b48f56

Browse files
SougandhSiloveeclipse
authored andcommitted
Optimize BreakpointEnablement
- Implement IBreakpointsListener instead of IBreakpointListener to enable batch processing of breakpoint changes. - Avoid unnecessary category change events for breakpoint enablement. Fixes : #2062
1 parent 07f86ab commit 1b48f56

File tree

1 file changed

+40
-6
lines changed

1 file changed

+40
-6
lines changed

debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointEnablement.java

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,15 @@
1313
*******************************************************************************/
1414
package org.eclipse.debug.internal.ui.views.breakpoints;
1515

16+
import java.util.Collections;
17+
import java.util.Map;
18+
import java.util.WeakHashMap;
19+
1620
import org.eclipse.core.resources.IMarkerDelta;
1721
import org.eclipse.core.runtime.CoreException;
1822
import org.eclipse.core.runtime.IAdaptable;
1923
import org.eclipse.debug.core.DebugPlugin;
20-
import org.eclipse.debug.core.IBreakpointListener;
24+
import org.eclipse.debug.core.IBreakpointsListener;
2125
import org.eclipse.debug.core.model.IBreakpoint;
2226
import org.eclipse.debug.ui.AbstractBreakpointOrganizerDelegate;
2327
import org.eclipse.debug.ui.BreakpointTypeCategory;
@@ -26,18 +30,22 @@
2630
* Breakpoint organizers for breakpoint types based on breakpoint enablement
2731
* state.
2832
*/
29-
public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointListener {
33+
public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointsListener {
3034

3135
private final BreakpointTypeCategory ENABLED = new BreakpointTypeCategory("Enabled", 0); //$NON-NLS-1$
3236
private final BreakpointTypeCategory DISABLED = new BreakpointTypeCategory("Disabled", 1); //$NON-NLS-1$
3337

38+
private final Map<IBreakpoint, Boolean> breakpointCache;
39+
3440
public BreakpointEnablement() {
3541
DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener(this);
42+
breakpointCache = Collections.synchronizedMap(new WeakHashMap<>());
3643
}
3744

3845
@Override
3946
public void dispose() {
4047
DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener(this);
48+
breakpointCache.clear();
4149
}
4250

4351
@Override
@@ -49,6 +57,7 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
4957
} else {
5058
categories = new IAdaptable[] { DISABLED };
5159
}
60+
breakpointCache.put(breakpoint, breakpoint.isEnabled());
5261
return categories;
5362
} catch (CoreException e) {
5463
DebugPlugin.log(e);
@@ -57,15 +66,40 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
5766
}
5867

5968
@Override
60-
public void breakpointAdded(IBreakpoint breakpoint) {
69+
public void breakpointsAdded(IBreakpoint[] breakpoints) {
70+
for (IBreakpoint breakpoint : breakpoints) {
71+
try {
72+
breakpointCache.put(breakpoint, breakpoint.isEnabled());
73+
} catch (CoreException e) {
74+
DebugPlugin.log(e);
75+
}
76+
}
6177
}
6278

6379
@Override
64-
public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
80+
public void breakpointsRemoved(IBreakpoint[] breakpoints, IMarkerDelta[] deltas) {
81+
for (IBreakpoint breakpoint : breakpoints) {
82+
breakpointCache.remove(breakpoint);
83+
}
6584
}
6685

6786
@Override
68-
public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) {
69-
fireCategoryChanged(ENABLED);
87+
public void breakpointsChanged(IBreakpoint[] breakpoints, IMarkerDelta[] deltas) {
88+
boolean updateCategories = false;
89+
for (IBreakpoint breakpoint : breakpoints) {
90+
try {
91+
boolean isEnabled = breakpoint.isEnabled();
92+
Boolean wasEnabled = breakpointCache.get(breakpoint);
93+
if (wasEnabled == null || wasEnabled != isEnabled) {
94+
breakpointCache.put(breakpoint, isEnabled);
95+
updateCategories = true;
96+
}
97+
} catch (CoreException e) {
98+
DebugPlugin.log(e);
99+
}
100+
}
101+
if (updateCategories) {
102+
fireCategoryChanged(ENABLED);
103+
}
70104
}
71105
}

0 commit comments

Comments
 (0)