# HG changeset patch # User Christian Humer # Date 1409594898 -7200 # Node ID 112ab4a3de3aa51883207e80032a39945d540137 # Parent 158c9ba66e451f158af1669023f0371d5787b410 Truffle: added Graal runtime API to wait for the completion of a compilation. diff -r 158c9ba66e45 -r 112ab4a3de3a graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Mon Sep 01 20:08:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Mon Sep 01 20:08:18 2014 +0200 @@ -345,6 +345,17 @@ return false; } + public void waitForCompilation(OptimizedCallTarget optimizedCallTarget, long timeout) throws ExecutionException, TimeoutException { + Future codeTask = this.compilations.get(optimizedCallTarget); + if (codeTask != null && isCompiling(optimizedCallTarget)) { + try { + codeTask.get(timeout, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + // ignore interrupted + } + } + } + public boolean isCompiling(OptimizedCallTarget optimizedCallTarget) { Future codeTask = this.compilations.get(optimizedCallTarget); if (codeTask != null) { diff -r 158c9ba66e45 -r 112ab4a3de3a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Mon Sep 01 20:08:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Mon Sep 01 20:08:18 2014 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.truffle; +import java.util.concurrent.*; + import com.oracle.graal.nodes.spi.*; import com.oracle.truffle.api.*; @@ -33,6 +35,8 @@ boolean cancelInstalledTask(OptimizedCallTarget optimizedCallTarget); + void waitForCompilation(OptimizedCallTarget optimizedCallTarget, long timeout) throws ExecutionException, TimeoutException; + boolean isCompiling(OptimizedCallTarget optimizedCallTarget); void invalidateInstalledCode(OptimizedCallTarget optimizedCallTarget);