Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 120665 Details for
Bug 258352
[Progress] synchronization in ProgressManager too expensive
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch using ListenerList
Progress Manager Sync 01.txt (text/plain), 7.59 KB, created by
Prakash Rangaraj
on 2008-12-17 03:46:07 EST
(
hide
)
Description:
Patch using ListenerList
Filename:
MIME Type:
Creator:
Prakash Rangaraj
Created:
2008-12-17 03:46:07 EST
Size:
7.59 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java,v >retrieving revision 1.139 >diff -u -r1.139 ProgressManager.java >--- Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 29 Apr 2008 07:09:16 -0000 1.139 >+++ Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 17 Dec 2008 08:39:21 -0000 >@@ -31,6 +31,7 @@ > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.IProgressMonitorWithBlocking; > import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.ListenerList; > import org.eclipse.core.runtime.NullProgressMonitor; > import org.eclipse.core.runtime.OperationCanceledException; > import org.eclipse.core.runtime.QualifiedName; >@@ -96,10 +97,9 @@ > > final Object familyKey = new Object(); > >- private IJobProgressManagerListener[] listeners = new IJobProgressManagerListener[0]; >- >- final Object listenersKey = new Object(); >- >+ // list of IJobProgressManagerListener >+ private ListenerList listeners = new ListenerList(); >+ > IJobChangeListener changeListener; > > static final String PROGRESS_VIEW_NAME = "org.eclipse.ui.views.ProgressView"; //$NON-NLS-1$ >@@ -535,20 +535,18 @@ > sleepGroup(group,info); > } > >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- IJobProgressManagerListener listener = listeners[i]; >- // Is this one the user never sees? >- if (isNeverDisplaying(info.getJob(), listener.showsDebug())) >- continue; >- if (listener.showsDebug()) >- listener.refreshJobInfo(info); >- else >- listener.removeJob(info); >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i]; >+ // Is this one the user never sees? >+ if (isNeverDisplaying(info.getJob(), listener.showsDebug())) >+ continue; >+ if (listener.showsDebug()) >+ listener.refreshJobInfo(info); >+ else >+ listener.removeJob(info); > >- } > } >- > } > > /** >@@ -556,20 +554,18 @@ > * @param group > */ > private void sleepGroup(GroupInfo group, JobInfo info) { >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- >- IJobProgressManagerListener listener = listeners[i]; >- if (isNeverDisplaying(info.getJob(), listener.showsDebug())) >- continue; >- >- if (listener.showsDebug() || group.isActive()) >- listener.refreshGroup(group); >- else >- listener.removeGroup(group); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ >+ IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i]; >+ if (isNeverDisplaying(info.getJob(), listener.showsDebug())) >+ continue; >+ >+ if (listener.showsDebug() || group.isActive()) >+ listener.refreshGroup(group); >+ else >+ listener.removeGroup(group); > } >- > } > > /** >@@ -641,17 +637,7 @@ > * @param listener > */ > void addListener(IJobProgressManagerListener listener) { >- >- synchronized (listenersKey) { >- ArrayList newListeners = new ArrayList(listeners.length + 1); >- for (int i = 0; i < listeners.length; i++) { >- newListeners.add(listeners[i]); >- } >- newListeners.add(listener); >- listeners = new IJobProgressManagerListener[newListeners.size()]; >- newListeners.toArray(listeners); >- } >- >+ listeners.add(listener); > } > > /** >@@ -661,17 +647,7 @@ > * @param listener > */ > void removeListener(IJobProgressManagerListener listener) { >- synchronized (listenersKey) { >- ArrayList newListeners = new ArrayList(); >- for (int i = 0; i < listeners.length; i++) { >- if (listeners[i].equals(listener)) { >- continue; >- } >- newListeners.add(listeners[i]); >- } >- listeners = new IJobProgressManagerListener[newListeners.size()]; >- newListeners.toArray(listeners); >- } >+ listeners.remove(listener); > } > > /** >@@ -711,12 +687,11 @@ > refreshGroup(group); > } > >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- IJobProgressManagerListener listener = listeners[i]; >- if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >- listener.refreshJobInfo(info); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i]; >+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >+ listener.refreshJobInfo(info); > } > } > } >@@ -728,10 +703,9 @@ > */ > public void refreshGroup(GroupInfo info) { > >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- listeners[i].refreshGroup(info); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ ((IJobProgressManagerListener)listenersArray[i]).refreshGroup(info); > } > } > >@@ -742,10 +716,9 @@ > public void refreshAll() { > > pruneStaleJobs(); >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- listeners[i].refreshAll(); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ ((IJobProgressManagerListener)listenersArray[i]).refreshAll(); > } > > } >@@ -766,15 +739,13 @@ > } > } > >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- IJobProgressManagerListener listener = listeners[i]; >- if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >- listener.removeJob(info); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i]; >+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >+ listener.removeJob(info); > } > } >- > } > > /** >@@ -785,10 +756,9 @@ > */ > public void removeGroup(GroupInfo group) { > >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- listeners[i].removeGroup(group); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ ((IJobProgressManagerListener)listenersArray[i]).removeGroup(group); > } > } > >@@ -804,12 +774,11 @@ > } > > jobs.put(info.getJob(), info); >- synchronized (listenersKey) { >- for (int i = 0; i < listeners.length; i++) { >- IJobProgressManagerListener listener = listeners[i]; >- if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >- listener.addJob(info); >- } >+ Object[] listenersArray = listeners.getListeners(); >+ for (int i = 0; i < listenersArray.length; i++) { >+ IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i]; >+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) { >+ listener.addJob(info); > } > } > } >@@ -1045,9 +1014,7 @@ > * Shutdown the receiver. > */ > private void shutdown() { >- synchronized (listenersKey) { >- this.listeners = new IJobProgressManagerListener[0]; >- } >+ listeners.clear(); > Job.getJobManager().setProgressProvider(null); > Job.getJobManager().removeJobChangeListener(this.changeListener); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 258352
:
120102
|
120665
|
123174