diff options
Diffstat (limited to 'org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/FreezeMonitor.java')
-rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/FreezeMonitor.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/FreezeMonitor.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/FreezeMonitor.java new file mode 100644 index 000000000..19fd7a728 --- /dev/null +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/FreezeMonitor.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2016 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: + * Stefan Xenos (Google) - Initial implementation + *******************************************************************************/ +package org.eclipse.jdt.core.tests.model; + +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.ICoreRunnable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.jobs.Job; + +public class FreezeMonitor { + + private static /* @Nullable */ Job monitorJob; + + public static void expectCompletionIn(final long millis) { + done(); + monitorJob = Job.create("", new ICoreRunnable() { + @Override + public void run(IProgressMonitor monitor) throws CoreException { + if (monitor.isCanceled()) { + throw new OperationCanceledException(); + } + StringBuilder result = new StringBuilder(); + result.append("Possible frozen test case\n"); + ThreadMXBean threadStuff = ManagementFactory.getThreadMXBean(); + ThreadInfo[] allThreads = threadStuff.getThreadInfo(threadStuff.getAllThreadIds(), 200); + for (ThreadInfo threadInfo : allThreads) { + result.append("\""); + result.append(threadInfo.getThreadName()); + result.append("\": "); + result.append(threadInfo.getThreadState()); + result.append("\n"); + final StackTraceElement[] elements = threadInfo.getStackTrace(); + for (StackTraceElement element : elements) { + result.append(" "); + result.append(element); + result.append("\n"); + } + result.append("\n"); + } + System.out.println(result.toString()); + } + }); + monitorJob.schedule(millis); + } + + public static void done() { + if (monitorJob != null) { + monitorJob.cancel(); + monitorJob = null; + } + } +} |