Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'examples/org.eclipse.swt.examples.watchdog/src/org/eclipse/swt/examples/watchdog/WatchdogPlugin.java')
-rw-r--r--examples/org.eclipse.swt.examples.watchdog/src/org/eclipse/swt/examples/watchdog/WatchdogPlugin.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/examples/org.eclipse.swt.examples.watchdog/src/org/eclipse/swt/examples/watchdog/WatchdogPlugin.java b/examples/org.eclipse.swt.examples.watchdog/src/org/eclipse/swt/examples/watchdog/WatchdogPlugin.java
new file mode 100644
index 0000000000..4712bab223
--- /dev/null
+++ b/examples/org.eclipse.swt.examples.watchdog/src/org/eclipse/swt/examples/watchdog/WatchdogPlugin.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2013, Google Inc. 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Google Inc - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.examples.watchdog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class WatchdogPlugin extends AbstractUIPlugin implements IStartup {
+ private static final int EVENT_DURATION_THRESHOLD = 1001;
+
+ private static WatchdogPlugin plugin;
+ private final Display display;
+ private final TimedEventWatchdog watchdog;
+
+ public WatchdogPlugin() {
+ super();
+ plugin = this;
+
+ IWorkbench workbench = getWorkbench();
+ display = (workbench != null) ? workbench.getDisplay() : null;
+
+ Thread displayThread = (display != null) ? display.getThread() : null;
+ this.watchdog = displayThread != null
+ ? new TimedEventWatchdog(displayThread, EVENT_DURATION_THRESHOLD)
+ : null;
+ }
+
+ @Override
+ public void earlyStartup() {
+ if (display != null) {
+ display.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ display.addListener(SWT.PreEvent, watchdog);
+ display.addListener(SWT.PostEvent, watchdog);
+ }
+ });
+ }
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ try {
+ if (display != null && !display.isDisposed()) {
+ display.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (!display.isDisposed()) {
+ display.removeListener(SWT.PreEvent, watchdog);
+ display.removeListener(SWT.PostEvent, watchdog);
+ }
+ }
+ });
+ }
+ } finally {
+ super.stop(context);
+ }
+ }
+
+ public static WatchdogPlugin getDefault() {
+ return plugin;
+ }
+}

Back to the top