Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 258352 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/internal/progress/ProgressViewUpdater.java (-2 / +10 lines)
Lines 217-229 Link Here
217
		}
217
		}
218
    }
218
    }
219
219
220
    /** keep track of how often we schedule the job to avoid overloading the JobManager */
221
    private long lastUpdateJobScheduleRequest = 0;
222
    
220
    /**
223
    /**
221
     * Schedule an update.
224
     * Schedule an update.
222
     */
225
     */
223
    void scheduleUpdate() {
226
    void scheduleUpdate() {
224
        if (PlatformUI.isWorkbenchRunning()) {
227
        if (PlatformUI.isWorkbenchRunning()) {
225
            //Add in a 100ms delay so as to keep priority low
228
            // make sure we don't schedule too often
226
            updateJob.schedule(100);
229
        	long now = System.currentTimeMillis();
230
        	if (now - lastUpdateJobScheduleRequest >= 100) {
231
        		//Add in a 100ms delay so as to keep priority low
232
        		updateJob.schedule(100);
233
        		lastUpdateJobScheduleRequest = now;
234
        	}
227
        }
235
        }
228
    }
236
    }
229
237
(-)Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java (-85 / +52 lines)
Lines 31-36 Link Here
31
import org.eclipse.core.runtime.IProgressMonitor;
31
import org.eclipse.core.runtime.IProgressMonitor;
32
import org.eclipse.core.runtime.IProgressMonitorWithBlocking;
32
import org.eclipse.core.runtime.IProgressMonitorWithBlocking;
33
import org.eclipse.core.runtime.IStatus;
33
import org.eclipse.core.runtime.IStatus;
34
import org.eclipse.core.runtime.ListenerList;
34
import org.eclipse.core.runtime.NullProgressMonitor;
35
import org.eclipse.core.runtime.NullProgressMonitor;
35
import org.eclipse.core.runtime.OperationCanceledException;
36
import org.eclipse.core.runtime.OperationCanceledException;
36
import org.eclipse.core.runtime.QualifiedName;
37
import org.eclipse.core.runtime.QualifiedName;
Lines 98-107 Link Here
98
99
99
	final Object familyKey = new Object();
100
	final Object familyKey = new Object();
100
101
101
	private IJobProgressManagerListener[] listeners = new IJobProgressManagerListener[0];
102
	//	list of IJobProgressManagerListener
102
103
	private ListenerList listeners = new ListenerList();
103
	final Object listenersKey = new Object();
104
	
104
105
	IJobChangeListener changeListener;
105
	IJobChangeListener changeListener;
106
106
107
	static final String PROGRESS_VIEW_NAME = "org.eclipse.ui.views.ProgressView"; //$NON-NLS-1$
107
	static final String PROGRESS_VIEW_NAME = "org.eclipse.ui.views.ProgressView"; //$NON-NLS-1$
Lines 556-575 Link Here
556
			sleepGroup(group,info);
556
			sleepGroup(group,info);
557
		}
557
		}
558
558
559
		synchronized (listenersKey) {
559
		Object[] listenersArray = listeners.getListeners();
560
			for (int i = 0; i < listeners.length; i++) {
560
		for (int i = 0; i < listenersArray.length; i++) {
561
				IJobProgressManagerListener listener = listeners[i];
561
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
562
				// Is this one the user never sees?
562
			// Is this one the user never sees?
563
				if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
563
			if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
564
					continue;
564
				continue;
565
				if (listener.showsDebug())
565
			if (listener.showsDebug())
566
					listener.refreshJobInfo(info);
566
				listener.refreshJobInfo(info);
567
				else
567
			else
568
					listener.removeJob(info);
568
				listener.removeJob(info);
569
569
570
			}
571
		}
570
		}
572
573
	}
571
	}
574
572
575
	/**
573
	/**
Lines 577-596 Link Here
577
	 * @param group
575
	 * @param group
578
	 */
576
	 */
579
	private void sleepGroup(GroupInfo group, JobInfo info) {
577
	private void sleepGroup(GroupInfo group, JobInfo info) {
580
		synchronized (listenersKey) {
578
		Object[] listenersArray = listeners.getListeners();
581
			for (int i = 0; i < listeners.length; i++) {
579
		for (int i = 0; i < listenersArray.length; i++) {
582
				
580
			
583
				IJobProgressManagerListener listener = listeners[i];
581
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
584
				if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
582
			if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
585
					continue;
583
				continue;
586
		
584
	
587
				if (listener.showsDebug() || group.isActive())
585
			if (listener.showsDebug() || group.isActive())
588
					listener.refreshGroup(group);
586
				listener.refreshGroup(group);
589
				else
587
			else
590
					listener.removeGroup(group);
588
				listener.removeGroup(group);
591
			}
592
		}
589
		}
593
		
594
	}
590
	}
595
591
596
	/**
592
	/**
Lines 662-678 Link Here
662
	 * @param listener
658
	 * @param listener
663
	 */
659
	 */
664
	void addListener(IJobProgressManagerListener listener) {
660
	void addListener(IJobProgressManagerListener listener) {
665
661
		listeners.add(listener);
666
		synchronized (listenersKey) {
667
			ArrayList newListeners = new ArrayList(listeners.length + 1);
668
			for (int i = 0; i < listeners.length; i++) {
669
				newListeners.add(listeners[i]);
670
			}
671
			newListeners.add(listener);
672
			listeners = new IJobProgressManagerListener[newListeners.size()];
673
			newListeners.toArray(listeners);
674
		}
675
676
	}
662
	}
677
663
678
	/**
664
	/**
Lines 682-698 Link Here
682
	 * @param listener
668
	 * @param listener
683
	 */
669
	 */
684
	void removeListener(IJobProgressManagerListener listener) {
670
	void removeListener(IJobProgressManagerListener listener) {
685
		synchronized (listenersKey) {
671
		listeners.remove(listener);
686
			ArrayList newListeners = new ArrayList();
687
			for (int i = 0; i < listeners.length; i++) {
688
				if (listeners[i].equals(listener)) {
689
					continue;
690
				}
691
				newListeners.add(listeners[i]);
692
			}
693
			listeners = new IJobProgressManagerListener[newListeners.size()];
694
			newListeners.toArray(listeners);
695
		}
696
	}
672
	}
697
673
698
	/**
674
	/**
Lines 732-743 Link Here
732
			refreshGroup(group);
708
			refreshGroup(group);
733
		}
709
		}
734
710
735
		synchronized (listenersKey) {
711
		Object[] listenersArray = listeners.getListeners();
736
			for (int i = 0; i < listeners.length; i++) {
712
		for (int i = 0; i < listenersArray.length; i++) {
737
				IJobProgressManagerListener listener = listeners[i];
713
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
738
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
714
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
739
					listener.refreshJobInfo(info);
715
				listener.refreshJobInfo(info);
740
				}
741
			}
716
			}
742
		}
717
		}
743
	}
718
	}
Lines 749-758 Link Here
749
	 */
724
	 */
750
	public void refreshGroup(GroupInfo info) {
725
	public void refreshGroup(GroupInfo info) {
751
726
752
		synchronized (listenersKey) {
727
		Object[] listenersArray = listeners.getListeners();
753
			for (int i = 0; i < listeners.length; i++) {
728
		for (int i = 0; i < listenersArray.length; i++) {
754
				listeners[i].refreshGroup(info);
729
			((IJobProgressManagerListener)listenersArray[i]).refreshGroup(info);
755
			}
756
		}
730
		}
757
	}
731
	}
758
732
Lines 763-772 Link Here
763
	public void refreshAll() {
737
	public void refreshAll() {
764
738
765
		pruneStaleJobs();
739
		pruneStaleJobs();
766
		synchronized (listenersKey) {
740
		Object[] listenersArray = listeners.getListeners();
767
			for (int i = 0; i < listeners.length; i++) {
741
		for (int i = 0; i < listenersArray.length; i++) {
768
				listeners[i].refreshAll();
742
			((IJobProgressManagerListener)listenersArray[i]).refreshAll();
769
			}
770
		}
743
		}
771
744
772
	}
745
	}
Lines 787-801 Link Here
787
			}
760
			}
788
		}
761
		}
789
762
790
		synchronized (listenersKey) {
763
		Object[] listenersArray = listeners.getListeners();
791
			for (int i = 0; i < listeners.length; i++) {
764
		for (int i = 0; i < listenersArray.length; i++) {
792
				IJobProgressManagerListener listener = listeners[i];
765
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
793
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
766
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
794
					listener.removeJob(info);
767
				listener.removeJob(info);
795
				}
796
			}
768
			}
797
		}
769
		}
798
799
	}
770
	}
800
771
801
	/**
772
	/**
Lines 806-815 Link Here
806
	 */
777
	 */
807
	public void removeGroup(GroupInfo group) {
778
	public void removeGroup(GroupInfo group) {
808
779
809
		synchronized (listenersKey) {
780
		Object[] listenersArray = listeners.getListeners();
810
			for (int i = 0; i < listeners.length; i++) {
781
		for (int i = 0; i < listenersArray.length; i++) {
811
				listeners[i].removeGroup(group);
782
			((IJobProgressManagerListener)listenersArray[i]).removeGroup(group);
812
			}
813
		}
783
		}
814
	}
784
	}
815
785
Lines 825-836 Link Here
825
		}
795
		}
826
796
827
		jobs.put(info.getJob(), info);
797
		jobs.put(info.getJob(), info);
828
		synchronized (listenersKey) {
798
		Object[] listenersArray = listeners.getListeners();
829
			for (int i = 0; i < listeners.length; i++) {
799
		for (int i = 0; i < listenersArray.length; i++) {
830
				IJobProgressManagerListener listener = listeners[i];
800
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
831
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
801
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
832
					listener.addJob(info);
802
				listener.addJob(info);
833
				}
834
			}
803
			}
835
		}
804
		}
836
	}
805
	}
Lines 1066-1074 Link Here
1066
	 * Shutdown the receiver.
1035
	 * Shutdown the receiver.
1067
	 */
1036
	 */
1068
	private void shutdown() {
1037
	private void shutdown() {
1069
		synchronized (listenersKey) {
1038
		listeners.clear();
1070
			this.listeners = new IJobProgressManagerListener[0];
1071
		}
1072
		Job.getJobManager().setProgressProvider(null);
1039
		Job.getJobManager().setProgressProvider(null);
1073
		Job.getJobManager().removeJobChangeListener(this.changeListener);
1040
		Job.getJobManager().removeJobChangeListener(this.changeListener);
1074
	}
1041
	}

Return to bug 258352