blob: 1228f22136dbd42ed23b70d150d74dcc1b6aae43 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 Red Hat Inc., and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.jdt.text.tests.contentassist;
import org.eclipse.swt.widgets.Display;
/**
* This thread polls the display every 50milliseconds with a null UI operation
* request and computes how long it take for display to process the request.
* The time to handle request is time when display is busy doing other work, so
* it's actually a UI Freeze.
*
* This could be moved to SWT or other common place where we need to check
* UI Freezes and reused form there,
*/
public class CheckUIThreadReactivityThread extends Thread {
long pauseBetweenEachPing = 50;
final private Display fDisplay;
private long maxDuration;
public CheckUIThreadReactivityThread(Display display) {
fDisplay= display;
}
@Override
public void run() {
while (!isInterrupted()) {
long duration = System.currentTimeMillis();
fDisplay.syncExec(() -> {}); // do nothing, but in UI Thread
duration = System.currentTimeMillis() - duration;
maxDuration = Math.max(duration, maxDuration);
try {
sleep(pauseBetweenEachPing);
} catch (InterruptedException e) {
// nothing
}
}
}
public long getMaxDuration() {
return maxDuration;
}
}