Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/SandboxedProcessConnection.java

Issue 11503013: android: Pass CPU properties from browser to renderer process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.content.ComponentName; 7 import android.content.ComponentName;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.ServiceConnection; 10 import android.content.ServiceConnection;
11 import android.os.AsyncTask; 11 import android.os.AsyncTask;
12 import android.os.Bundle; 12 import android.os.Bundle;
13 import android.os.Handler; 13 import android.os.Handler;
14 import android.os.IBinder; 14 import android.os.IBinder;
15 import android.os.Looper; 15 import android.os.Looper;
16 import android.os.ParcelFileDescriptor; 16 import android.os.ParcelFileDescriptor;
17 import android.util.Log; 17 import android.util.Log;
18 18
19 import java.io.IOException; 19 import java.io.IOException;
20 import java.util.concurrent.atomic.AtomicBoolean; 20 import java.util.concurrent.atomic.AtomicBoolean;
21 21
22 import org.chromium.base.CalledByNative; 22 import org.chromium.base.CalledByNative;
23 import org.chromium.base.CpuFeatures;
23 import org.chromium.base.ThreadUtils; 24 import org.chromium.base.ThreadUtils;
24 import org.chromium.content.common.CommandLine; 25 import org.chromium.content.common.CommandLine;
25 import org.chromium.content.common.ISandboxedProcessCallback; 26 import org.chromium.content.common.ISandboxedProcessCallback;
26 import org.chromium.content.common.ISandboxedProcessService; 27 import org.chromium.content.common.ISandboxedProcessService;
27 import org.chromium.content.common.TraceEvent; 28 import org.chromium.content.common.TraceEvent;
28 29
29 public class SandboxedProcessConnection implements ServiceConnection { 30 public class SandboxedProcessConnection implements ServiceConnection {
30 interface DeathCallback { 31 interface DeathCallback {
31 void onSandboxedProcessDied(int pid); 32 void onSandboxedProcessDied(int pid);
32 } 33 }
33 34
34 // Names of items placed in the bind intent or connection bundle. 35 // Names of items placed in the bind intent or connection bundle.
35 public static final String EXTRA_COMMAND_LINE = 36 public static final String EXTRA_COMMAND_LINE =
36 "com.google.android.apps.chrome.extra.sandbox_command_line"; 37 "com.google.android.apps.chrome.extra.sandbox_command_line";
37 public static final String EXTRA_NATIVE_LIBRARY_NAME = 38 public static final String EXTRA_NATIVE_LIBRARY_NAME =
38 "com.google.android.apps.chrome.extra.sandbox_native_library_name"; 39 "com.google.android.apps.chrome.extra.sandbox_native_library_name";
39 // Note the FDs may only be passed in the connection bundle. 40 // Note the FDs may only be passed in the connection bundle.
40 public static final String EXTRA_FILES_PREFIX = 41 public static final String EXTRA_FILES_PREFIX =
41 "com.google.android.apps.chrome.extra.sandbox_extraFile_"; 42 "com.google.android.apps.chrome.extra.sandbox_extraFile_";
42 public static final String EXTRA_FILES_ID_SUFFIX = "_id"; 43 public static final String EXTRA_FILES_ID_SUFFIX = "_id";
43 public static final String EXTRA_FILES_FD_SUFFIX = "_fd"; 44 public static final String EXTRA_FILES_FD_SUFFIX = "_fd";
44 45
46 // Used to pass the CPU core count to sandboxed processes.
47 public static final String EXTRA_CPU_COUNT =
48 "com.google.android.apps.chrome.extra.cpu_count";
49 // Used to pass the CPU features mask to sandboxed processes.
50 public static final String EXTRA_CPU_FEATURES =
51 "com.google.android.apps.chrome.extra.cpu_features";
52
45 private final Context mContext; 53 private final Context mContext;
46 private final int mServiceNumber; 54 private final int mServiceNumber;
47 private final SandboxedProcessConnection.DeathCallback mDeathCallback; 55 private final SandboxedProcessConnection.DeathCallback mDeathCallback;
48 56
49 // Synchronization: While most internal flow occurs on the UI thread, the pu blic API 57 // Synchronization: While most internal flow occurs on the UI thread, the pu blic API
50 // (specifically bind and unbind) may be called from any thread, hence all e ntry point methods 58 // (specifically bind and unbind) may be called from any thread, hence all e ntry point methods
51 // into the class are synchronized on the SandboxedProcessConnection instanc e to protect access 59 // into the class are synchronized on the SandboxedProcessConnection instanc e to protect access
52 // to these members. But see also the TODO where AsyncBoundServiceConnection is created. 60 // to these members. But see also the TODO where AsyncBoundServiceConnection is created.
53 private ISandboxedProcessService mService = null; 61 private ISandboxedProcessService mService = null;
54 private boolean mServiceConnectComplete = false; 62 private boolean mServiceConnectComplete = false;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 Log.e(TAG, 238 Log.e(TAG,
231 "Invalid FD provided for process connection, abort ing connection.", 239 "Invalid FD provided for process connection, abort ing connection.",
232 e); 240 e);
233 return; 241 return;
234 } 242 }
235 243
236 } 244 }
237 bundle.putParcelable(fdName, parcelFiles[i]); 245 bundle.putParcelable(fdName, parcelFiles[i]);
238 bundle.putInt(idName, fileInfos[i].mId); 246 bundle.putInt(idName, fileInfos[i].mId);
239 } 247 }
248 // Add the CPU properties now.
249 bundle.putInt(EXTRA_CPU_COUNT, CpuFeatures.getCount());
250 bundle.putLong(EXTRA_CPU_FEATURES, CpuFeatures.getMask());
251 Log.i(TAG, "Sending CPU features: count=" + CpuFeatures.getCount() + " features=" + CpuFeatures.getMask());
bulach 2012/12/10 14:03:07 nit: >100cols
digit1 2012/12/10 14:44:56 Actually, this was a debug message that should hav
252
240 try { 253 try {
241 mPID = mService.setupConnection(bundle, mConnectionParams.mCallb ack); 254 mPID = mService.setupConnection(bundle, mConnectionParams.mCallb ack);
242 } catch (android.os.RemoteException re) { 255 } catch (android.os.RemoteException re) {
243 Log.e(TAG, "Failed to setup connection.", re); 256 Log.e(TAG, "Failed to setup connection.", re);
244 } 257 }
245 // We proactivley close the FDs rather than wait for GC & finalizer. 258 // We proactivley close the FDs rather than wait for GC & finalizer.
246 try { 259 try {
247 for (ParcelFileDescriptor parcelFile : parcelFiles) { 260 for (ParcelFileDescriptor parcelFile : parcelFiles) {
248 if (parcelFile != null) parcelFile.close(); 261 if (parcelFile != null) parcelFile.close();
249 } 262 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 } 345 }
333 } 346 }
334 347
335 /** 348 /**
336 * @return The connection PID, or 0 if not yet connected. 349 * @return The connection PID, or 0 if not yet connected.
337 */ 350 */
338 synchronized public int getPid() { 351 synchronized public int getPid() {
339 return mPID; 352 return mPID;
340 } 353 }
341 } 354 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698