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

Unified Diff: gin/v8_initializer.cc

Issue 1156873002: Load v8 snapshots directly from APK (and store them uncompressed) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v8initializer
Patch Set: Pass FDs & Regions through to child process (Still has formatting errors) 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
« no previous file with comments | « gin/v8_initializer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gin/v8_initializer.cc
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc
index 8f79d0d8693b23b01820e9906dad5da48a64bb77..6534adf20bf05e18d94e4ce667d89658b86b73d9 100644
--- a/gin/v8_initializer.cc
+++ b/gin/v8_initializer.cc
@@ -17,6 +17,9 @@
#include "crypto/sha2.h"
#if defined(V8_USE_EXTERNAL_STARTUP_DATA)
+#if defined(OS_ANDROID)
+#include "base/android/apk_assets.h"
+#endif
#if defined(OS_MACOSX)
#include "base/mac/foundation_util.h"
#endif // OS_MACOSX
@@ -50,6 +53,7 @@ const char kSnapshotFileName[] = "snapshot_blob.bin";
const int kMaxOpenAttempts = 5;
const int kOpenRetryDelayMillis = 250;
+#if !defined(OS_ANDROID)
void GetV8FilePaths(base::FilePath* natives_path_out,
base::FilePath* snapshot_path_out) {
#if !defined(OS_MACOSX)
@@ -72,13 +76,12 @@ void GetV8FilePaths(base::FilePath* natives_path_out,
DCHECK(!snapshot_path_out->empty());
#endif // !defined(OS_MACOSX)
}
+#endif // !defined(OS_ANDROID)
static bool MapV8Files(base::File natives_file,
base::File snapshot_file,
- base::MemoryMappedFile::Region natives_region =
- base::MemoryMappedFile::Region::kWholeFile,
- base::MemoryMappedFile::Region snapshot_region =
- base::MemoryMappedFile::Region::kWholeFile) {
+ base::MemoryMappedFile::Region natives_region,
+ base::MemoryMappedFile::Region snapshot_region) {
g_mapped_natives = new base::MemoryMappedFile;
if (!g_mapped_natives->IsValid()) {
if (!g_mapped_natives->Initialize(natives_file.Pass(), natives_region)) {
@@ -102,6 +105,8 @@ static bool MapV8Files(base::File natives_file,
return true;
}
+#if !defined(OS_ANDROID)
+
static bool OpenV8File(const base::FilePath& path,
int flags,
base::File& file) {
@@ -144,6 +149,7 @@ static bool OpenV8File(const base::FilePath& path,
return result == OpenV8FileResult::OPENED
|| result == OpenV8FileResult::OPENED_RETRY;
}
+#endif // !defined(OS_ANDROID)
#if defined(V8_VERIFY_EXTERNAL_STARTUP_DATA)
bool VerifyV8SnapshotFile(base::MemoryMappedFile* snapshot_file,
@@ -166,6 +172,11 @@ bool GenerateEntropy(unsigned char* buffer, size_t amount) {
} // namespace
#if defined(V8_USE_EXTERNAL_STARTUP_DATA)
+
+bool V8Initializer::V8Files::IsLoaded() const {
+ return snapshot_fd.get() != -1 && natives_fd.get() != -1;
+}
+
#if defined(V8_VERIFY_EXTERNAL_STARTUP_DATA)
// Defined in gen/gin/v8_snapshot_fingerprint.cc
extern const unsigned char g_natives_fingerprint[];
@@ -186,19 +197,14 @@ bool V8Initializer::LoadV8Snapshot() {
if (g_mapped_natives && g_mapped_snapshot)
return true;
- base::FilePath natives_data_path;
- base::FilePath snapshot_data_path;
- GetV8FilePaths(&natives_data_path, &snapshot_data_path);
-
- base::File natives_file;
- base::File snapshot_file;
- int flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
-
+ V8Files files;
+ OpenV8FilesForChildProcesses(&files);
rmcilroy 2015/05/28 12:03:29 I don't think you should be calling OpenV8FilesFor
agrieve 2015/06/13 02:21:29 I did this just because the two functions are copy
LoadV8SnapshotResult result;
- if (!OpenV8File(natives_data_path, flags, natives_file) ||
- !OpenV8File(snapshot_data_path, flags, snapshot_file)) {
+ if (!files.IsLoaded()) {
result = LoadV8SnapshotResult::FAILED_OPEN;
- } else if (!MapV8Files(natives_file.Pass(), snapshot_file.Pass())) {
+ } else if (!MapV8Files(base::File(files.natives_fd.release()),
+ base::File(files.snapshot_fd.release()),
+ files.natives_region, files.snapshot_region)) {
result = LoadV8SnapshotResult::FAILED_MAP;
#if defined(V8_VERIFY_EXTERNAL_STARTUP_DATA)
} else if (!VerifyV8SnapshotFile(g_mapped_natives, g_natives_fingerprint) ||
@@ -244,9 +250,14 @@ bool V8Initializer::LoadV8SnapshotFromFD(base::PlatformFile natives_pf,
}
// static
-bool V8Initializer::OpenV8FilesForChildProcesses(
- base::PlatformFile* natives_fd_out,
- base::PlatformFile* snapshot_fd_out) {
+void V8Initializer::OpenV8FilesForChildProcesses(
+ V8Initializer::V8Files* files_out) {
+#if defined(OS_ANDROID)
+ files_out->natives_fd.reset(base::android::OpenApkAsset(
+ kNativesFileName, &files_out->natives_region));
+ files_out->snapshot_fd.reset(base::android::OpenApkAsset(
+ kSnapshotFileName, &files_out->snapshot_region));
+#else
base::FilePath natives_data_path;
base::FilePath snapshot_data_path;
GetV8FilePaths(&natives_data_path, &snapshot_data_path);
@@ -258,12 +269,15 @@ bool V8Initializer::OpenV8FilesForChildProcesses(
bool success = OpenV8File(natives_data_path, file_flags, natives_data_file) &&
OpenV8File(snapshot_data_path, file_flags, snapshot_data_file);
if (success) {
- *natives_fd_out = natives_data_file.TakePlatformFile();
- *snapshot_fd_out = snapshot_data_file.TakePlatformFile();
+ files_out->natives_fd.reset(natives_data_file.TakePlatformFile());
+ files_out->snapshot_fd.reset(snapshot_data_file.TakePlatformFile());
+ files_out->natives_region = base::MemoryMappedFile::Region::kWholeFile;
+ files_out->snapshot_region = base::MemoryMappedFile::Region::kWholeFile;
}
- return success;
+#endif
}
+
#endif // V8_USE_EXTERNAL_STARTUP_DATA
// static
« no previous file with comments | « gin/v8_initializer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698