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

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: rebase for review Created 5 years, 6 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: gin/v8_initializer.cc
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc
index 1e1bd8dc6e865d10b73a4c68d064e271a5bdcfc0..2146c3fcbb65074e8d60df3f1abc6bdabebae090 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
@@ -35,25 +38,24 @@ base::File* g_snapshot_file = nullptr;
base::MemoryMappedFile::Region g_natives_region;
base::MemoryMappedFile::Region g_snapshot_region;
-#if !defined(OS_MACOSX)
+#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
const int kV8SnapshotBasePathKey =
-#if defined(OS_ANDROID)
- base::DIR_ANDROID_APP_DATA;
-#elif defined(OS_POSIX)
+#if defined(OS_POSIX)
base::DIR_EXE;
#elif defined(OS_WIN)
base::DIR_MODULE;
-#endif // OS_ANDROID
-#endif // !OS_MACOSX
+#endif // defined(OS_POSIX)
+#endif // !defined(OS_MACOSX) && !defined(OS_ANDROID)
+#if defined(OS_ANDROID)
+const char kNativesFileName[] = "assets/natives_blob.bin";
+const char kSnapshotFileName[] = "assets/snapshot_blob.bin";
rmcilroy 2015/06/15 10:21:02 this is effective the file path (within the APK) n
agrieve 2015/06/15 14:22:04 Done.
+#else
const char kNativesFileName[] = "natives_blob.bin";
const char kSnapshotFileName[] = "snapshot_blob.bin";
+#endif // defined(OS_ANDROID)
-// Constants for snapshot loading retries taken from:
-// https://support.microsoft.com/en-us/kb/316609.
-const int kMaxOpenAttempts = 5;
-const int kOpenRetryDelayMillis = 250;
-
+#if !defined(OS_ANDROID)
void GetV8FilePath(const char* file_name, base::FilePath* path_out) {
#if !defined(OS_MACOSX)
base::FilePath data_path;
@@ -68,6 +70,7 @@ void GetV8FilePath(const char* file_name, base::FilePath* path_out) {
#endif // !defined(OS_MACOSX)
DCHECK(!path_out->empty());
}
+#endif // !defined(OS_ANDROID)
static bool MapV8File(base::File file,
base::MemoryMappedFile::Region region,
@@ -86,9 +89,6 @@ static bool MapV8File(base::File file,
base::File OpenV8File(const char* file_name,
base::MemoryMappedFile::Region* region_out) {
- // Re-try logic here is motivated by http://crbug.com/479537
- // for A/V on Windows (https://support.microsoft.com/en-us/kb/316609).
-
// These match tools/metrics/histograms.xml
enum OpenV8FileResult {
OPENED = 0,
@@ -97,6 +97,15 @@ base::File OpenV8File(const char* file_name,
FAILED_OTHER,
MAX_VALUE
};
+#if defined(OS_ANDROID)
+ base::File file(base::android::OpenApkAsset(file_name, region_out));
+ OpenV8FileResult result = file.IsValid() ? OpenV8FileResult::OPENED
+ : OpenV8FileResult::FAILED_OTHER;
+#else
+ // Re-try logic here is motivated by http://crbug.com/479537
+ // for A/V on Windows (https://support.microsoft.com/en-us/kb/316609).
+ const int kMaxOpenAttempts = 5;
+ const int kOpenRetryDelayMillis = 250;
base::FilePath path;
GetV8FilePath(file_name, &path);
@@ -123,6 +132,7 @@ base::File OpenV8File(const char* file_name,
base::TimeDelta::FromMilliseconds(kOpenRetryDelayMillis));
}
}
+#endif // defined(OS_ANDROID)
UMA_HISTOGRAM_ENUMERATION("V8.Initializer.OpenV8File.Result",
result,

Powered by Google App Engine
This is Rietveld 408576698