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

Unified Diff: content/browser/android/child_process_launcher_android.cc

Issue 1156183003: Pass file Regions along with FDs to child processes on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add operator!= for Region Created 5 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/android/child_process_launcher_android.cc
diff --git a/content/browser/android/child_process_launcher_android.cc b/content/browser/android/child_process_launcher_android.cc
index 161493b503dde819b598a99cec879387bd5c307e..3b0473a9294ece42c21c18f4cfdcee3122bf8ce8 100644
--- a/content/browser/android/child_process_launcher_android.cc
+++ b/content/browser/android/child_process_launcher_android.cc
@@ -103,6 +103,7 @@ void StartChildProcess(
const base::CommandLine::StringVector& argv,
int child_process_id,
scoped_ptr<content::FileDescriptorInfo> files_to_register,
+ const std::map<int, base::MemoryMappedFile::Region>& regions,
const StartChildProcessCallback& callback) {
JNIEnv* env = AttachCurrentThread();
DCHECK(env);
@@ -113,39 +114,37 @@ void StartChildProcess(
size_t file_count = files_to_register->GetMappingSize();
DCHECK(file_count > 0);
- ScopedJavaLocalRef<jintArray> j_file_ids(env, env->NewIntArray(file_count));
- base::android::CheckException(env);
- jint* file_ids = env->GetIntArrayElements(j_file_ids.obj(), NULL);
- base::android::CheckException(env);
- ScopedJavaLocalRef<jintArray> j_file_fds(env, env->NewIntArray(file_count));
- base::android::CheckException(env);
- jint* file_fds = env->GetIntArrayElements(j_file_fds.obj(), NULL);
- base::android::CheckException(env);
- ScopedJavaLocalRef<jbooleanArray> j_file_auto_close(
- env, env->NewBooleanArray(file_count));
- base::android::CheckException(env);
- jboolean* file_auto_close =
- env->GetBooleanArrayElements(j_file_auto_close.obj(), NULL);
+ ScopedJavaLocalRef<jclass> j_file_info_class = base::android::GetClass(
+ env, "org/chromium/content/browser/FileDescriptorInfo");
+ ScopedJavaLocalRef<jobjectArray> j_file_infos(
+ env, env->NewObjectArray(file_count, j_file_info_class.obj(), NULL));
base::android::CheckException(env);
+
for (size_t i = 0; i < file_count; ++i) {
- file_ids[i] = files_to_register->GetIDAt(i);
- file_fds[i] = files_to_register->GetFDAt(i);
- PCHECK(0 <= file_fds[i]);
- file_auto_close[i] = files_to_register->OwnsFD(file_fds[i]);
- if (file_auto_close[i])
- ignore_result(files_to_register->ReleaseFD(file_fds[i]).release());
+ int fd = files_to_register->GetFDAt(i);
+ PCHECK(0 <= fd);
+ int id = files_to_register->GetIDAt(i);
+ bool auto_close = files_to_register->OwnsFD(fd);
+ int64 offset = 0L;
+ int64 size = 0L;
+ auto found_region_iter = regions.find(id);
+ if (found_region_iter != regions.end()) {
+ offset = found_region_iter->second.offset;
+ size = found_region_iter->second.size;
+ }
+ ScopedJavaLocalRef<jobject> j_file_info =
+ Java_ChildProcessLauncher_makeFdInfo(env, id, fd, auto_close, offset,
+ size);
+ PCHECK(j_file_info.obj());
+ env->SetObjectArrayElement(j_file_infos.obj(), i, j_file_info.obj());
+ if (auto_close) {
+ ignore_result(files_to_register->ReleaseFD(fd).release());
+ }
}
- env->ReleaseIntArrayElements(j_file_ids.obj(), file_ids, 0);
- env->ReleaseIntArrayElements(j_file_fds.obj(), file_fds, 0);
- env->ReleaseBooleanArrayElements(j_file_auto_close.obj(), file_auto_close, 0);
-
- Java_ChildProcessLauncher_start(env,
- base::android::GetApplicationContext(),
- j_argv.obj(),
- child_process_id,
- j_file_ids.obj(),
- j_file_fds.obj(),
- j_file_auto_close.obj(),
+
+ Java_ChildProcessLauncher_start(
+ env, base::android::GetApplicationContext(), j_argv.obj(),
+ child_process_id, j_file_infos.obj(),
reinterpret_cast<intptr_t>(new StartChildProcessCallback(callback)));
}

Powered by Google App Engine
This is Rietveld 408576698