package com.google.dart.tools.ui.watchdog;
import com.google.dart.tools.core.DartCore;
import com.google.dart.tools.deploy.ApplicationWorkbenchAdvisor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.ui.IWindowListener;
//import org.eclipse.ui.IWorkbench;
//import org.eclipse.ui.IWorkbenchWindow;
//import org.eclipse.ui.PlatformUI;
public class MonitoringUtil {
/**
* The time when the current event started to be processed or zero if no current event.
*/
private static volatile long currentEventTime = 0;
/** The event listener used to cache the current event */
private static Listener eventListener = new Listener() {
@Override
public void handleEvent(Event event) {
currentEventTime = System.currentTimeMillis();
}
};
public static BlockedTaskInfo getBlockedTaskInfo() {
return null;
}
/** Answer the current event start time or zero if no event is being processed */
public static long getCurrentUIEventStartTimeInMilliseconds() {
return currentEventTime;
}
/** Called by {@link ApplicationWorkbenchAdvisor} when no events are being processed */
public static void idle() {
currentEventTime = 0;
}
/**
* Called on the UI thread after the display has been created to track the current event and
* monitor the responsiveness of the UI thread.
*/
public static void start() {
DartCore.logInformation("UI Monitoring started");
hookDisplayEvents();
new WatchdogThread().start();
}
private static void hookDisplayEvents() {
// Listen for all types of events
// See org.eclipse.swt.SWT for event types
for (int eventType = 1; eventType < 50; eventType++) {
Display.getDefault().addFilter(eventType, eventListener);
}
}
}