Chromium Code Reviews

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java

Issue 195583003: Add initial GpuMemoryBufferSurfaceTexture implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use base::ProcessHandle explicitly in a few places Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
index d44163fa12cadfae7b9d276501a2452fb8b0e145..c4c5b9865c8e3cb5e308060a7d04f0e752924cef 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -85,7 +85,8 @@ public class ChildProcessLauncher {
}
public ChildProcessConnection allocate(
- Context context, ChildProcessConnection.DeathCallback deathCallback,
+ Context context, int childProcessId,
+ ChildProcessConnection.DeathCallback deathCallback,
ChromiumLinkerParams chromiumLinkerParams) {
synchronized (mConnectionLock) {
if (mFreeConnectionIndices.isEmpty()) {
@@ -95,7 +96,8 @@ public class ChildProcessLauncher {
int slot = mFreeConnectionIndices.remove(0);
assert mChildProcessConnections[slot] == null;
mChildProcessConnections[slot] = new ChildProcessConnectionImpl(context, slot,
- mInSandbox, deathCallback, mChildClass, chromiumLinkerParams);
+ mInSandbox, childProcessId, deathCallback, mChildClass,
+ chromiumLinkerParams);
return mChildProcessConnections[slot];
}
}
@@ -145,7 +147,7 @@ public class ChildProcessLauncher {
}
private static ChildProcessConnection allocateConnection(Context context,
- boolean inSandbox, ChromiumLinkerParams chromiumLinkerParams) {
+ boolean inSandbox, int childProcessId, ChromiumLinkerParams chromiumLinkerParams) {
ChildProcessConnection.DeathCallback deathCallback =
new ChildProcessConnection.DeathCallback() {
@Override
@@ -154,7 +156,7 @@ public class ChildProcessLauncher {
}
};
sConnectionAllocated = true;
- return getConnectionAllocator(inSandbox).allocate(context, deathCallback,
+ return getConnectionAllocator(inSandbox).allocate(context, childProcessId, deathCallback,
chromiumLinkerParams);
}
@@ -183,10 +185,10 @@ public class ChildProcessLauncher {
}
private static ChildProcessConnection allocateBoundConnection(Context context,
- String[] commandLine, boolean inSandbox) {
+ String[] commandLine, boolean inSandbox, int childProcessId) {
ChromiumLinkerParams chromiumLinkerParams = getLinkerParamsForNewConnection();
ChildProcessConnection connection =
- allocateConnection(context, inSandbox, chromiumLinkerParams);
+ allocateConnection(context, inSandbox, childProcessId, chromiumLinkerParams);
if (connection != null) {
connection.start(commandLine);
}
@@ -268,7 +270,7 @@ public class ChildProcessLauncher {
synchronized (ChildProcessLauncher.class) {
assert !ThreadUtils.runningOnUiThread();
if (sSpareSandboxedConnection == null) {
- sSpareSandboxedConnection = allocateBoundConnection(context, null, true);
+ sSpareSandboxedConnection = allocateBoundConnection(context, null, true, 0);
}
}
}
@@ -305,6 +307,7 @@ public class ChildProcessLauncher {
static void start(
Context context,
final String[] commandLine,
+ int childProcessId,
int[] fileIds,
int[] fileFds,
boolean[] fileAutoClose,
@@ -336,7 +339,8 @@ public class ChildProcessLauncher {
}
}
if (allocatedConnection == null) {
- allocatedConnection = allocateBoundConnection(context, commandLine, inSandbox);
+ allocatedConnection = allocateBoundConnection(context, commandLine, inSandbox,
+ childProcessId);
if (allocatedConnection == null) {
// Notify the native code so it can free the heap allocated callback.
nativeOnChildProcessStarted(clientContext, 0);
@@ -366,7 +370,7 @@ public class ChildProcessLauncher {
connection.setupConnection(commandLine,
filesToBeMapped,
- createCallback(callbackType),
+ createCallback(childProcessId, callbackType),
connectionCallback,
Linker.getSharedRelros());
}
@@ -392,7 +396,8 @@ public class ChildProcessLauncher {
/**
* This implementation is used to receive callbacks from the remote service.
*/
- private static IChildProcessCallback createCallback(final int callbackType) {
+ private static IChildProcessCallback createCallback(
+ final int childProcessId, final int callbackType) {
return new IChildProcessCallback.Stub() {
/**
* This is called by the remote service regularly to tell us about new values. Note that
@@ -423,6 +428,22 @@ public class ChildProcessLauncher {
return nativeGetViewSurface(surfaceId);
}
+
+ @Override
+ public Surface getSurfaceTextureSurface(int primaryId, int secondaryId) {
+ if (callbackType != CALLBACK_FOR_RENDERER_PROCESS) {
+ Log.e(TAG, "Illegal callback for non-renderer process.");
+ return null;
+ }
+
+ ChildProcessConnection connection = sServiceMap.get(secondaryId);
+ if (connection == null || connection.getChildProcessId() != childProcessId) {
+ Log.e(TAG, "Illegal secondaryId for renderer process.");
+ return null;
+ }
+
+ return nativeGetSurfaceTextureSurface(primaryId, secondaryId);
+ }
};
}
@@ -435,6 +456,7 @@ public class ChildProcessLauncher {
private static native void nativeOnChildProcessStarted(long clientContext, int pid);
private static native Surface nativeGetViewSurface(int surfaceId);
+ private static native Surface nativeGetSurfaceTextureSurface(int surfaceTextureId, int pid);
private static native void nativeEstablishSurfacePeer(
int pid, Surface surface, int primaryID, int secondaryID);
private static native boolean nativeIsSingleProcess();

Powered by Google App Engine