Index: content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
index 1acc282c252863e1698bf7ee4ba111cfdb4a4ac5..4de2bfa95f750c1c844af50404aa56c39a59090c 100644 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
@@ -18,6 +18,7 @@ import android.support.test.filters.MediumTest; |
import android.test.InstrumentationTestCase; |
import org.chromium.base.BaseSwitches; |
+import org.chromium.base.ThreadUtils; |
import org.chromium.base.library_loader.LibraryLoader; |
import org.chromium.base.library_loader.LibraryProcessType; |
import org.chromium.base.process_launcher.ChildProcessCreationParams; |
@@ -30,6 +31,7 @@ import org.chromium.content.common.ContentSwitches; |
import org.chromium.content_shell_apk.ChildProcessLauncherTestHelperService; |
import java.util.concurrent.Callable; |
+import java.util.concurrent.Semaphore; |
/** |
* Instrumentation tests for ChildProcessLauncher. |
@@ -448,42 +450,74 @@ public class ChildProcessLauncherTest extends InstrumentationTestCase { |
assertTrue(retryConn.getService().bindToCaller()); |
} |
+ private static void warmUpOnUiThreadBlocking(final Context context) { |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ ChildProcessLauncher.warmUp(context); |
+ } |
+ }); |
+ } |
+ |
+ private static void runOnLauncherThreadBlocking(final Runnable runnable) { |
+ final Semaphore done = new Semaphore(0); |
+ LauncherThread.post(new Runnable() { |
+ @Override |
+ public void run() { |
+ runnable.run(); |
+ done.release(); |
+ } |
+ }); |
+ done.acquireUninterruptibly(); |
+ } |
+ |
@MediumTest |
@Feature({"ProcessManagement"}) |
public void testWarmUp() { |
- Context context = getInstrumentation().getTargetContext(); |
- ChildProcessLauncher.warmUp(context); // Not on UI thread. |
- assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
+ final Context context = getInstrumentation().getTargetContext(); |
+ warmUpOnUiThreadBlocking(context); |
+ runOnLauncherThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
- final ChildProcessConnection conn = ChildProcessLauncher.startForTesting( |
- context, new String[0], new FileDescriptorInfo[0], null); |
- assertEquals(1, allocatedChromeSandboxedConnectionsCount()); // Used warmup connection. |
+ final ChildProcessConnection conn = ChildProcessLauncher.startForTesting( |
+ context, new String[0], new FileDescriptorInfo[0], null); |
+ assertEquals( |
+ 1, allocatedChromeSandboxedConnectionsCount()); // Used warmup connection. |
- ChildProcessLauncher.stop(conn.getPid()); |
+ ChildProcessLauncher.stop(conn.getPid()); |
+ } |
+ }); |
} |
@MediumTest |
@Feature({"ProcessManagement"}) |
public void testCustomCreationParamDoesNotReuseWarmupConnection() { |
// Since warmUp only uses default params. |
- Context context = getInstrumentation().getTargetContext(); |
+ final Context context = getInstrumentation().getTargetContext(); |
// Check uses object identity, having the params match exactly is fine. |
ChildProcessCreationParams.registerDefault( |
getDefaultChildProcessCreationParams(context.getPackageName())); |
- int paramId = ChildProcessCreationParams.register( |
+ final int paramId = ChildProcessCreationParams.register( |
getDefaultChildProcessCreationParams(context.getPackageName())); |
- ChildProcessLauncher.warmUp(context); // Not on UI thread. |
- assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
+ warmUpOnUiThreadBlocking(context); |
+ runOnLauncherThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
- startRendererProcess(context, paramId, new FileDescriptorInfo[0]); |
- assertEquals(2, allocatedChromeSandboxedConnectionsCount()); // Warmup not used. |
+ startRendererProcess(context, paramId, new FileDescriptorInfo[0]); |
+ assertEquals(2, allocatedChromeSandboxedConnectionsCount()); // Warmup not used. |
- startRendererProcess( |
- context, ChildProcessCreationParams.DEFAULT_ID, new FileDescriptorInfo[0]); |
- assertEquals(2, allocatedChromeSandboxedConnectionsCount()); // Warmup used. |
+ startRendererProcess( |
+ context, ChildProcessCreationParams.DEFAULT_ID, new FileDescriptorInfo[0]); |
+ assertEquals(2, allocatedChromeSandboxedConnectionsCount()); // Warmup used. |
- ChildProcessCreationParams.unregister(paramId); |
+ ChildProcessCreationParams.unregister(paramId); |
+ } |
+ }); |
} |
private ChildProcessConnectionImpl startConnection() { |