summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authormkosiba <mkosiba@chromium.org>2015-01-09 05:10:22 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-09 13:11:05 +0000
commit3c766cc321a77febd8cf726436e22ab385f8ac1b (patch)
tree69f80a3088b48f0cd108a179f30adcc315b862b2 /android_webview
parentc5feb0407d876d63c4db686e0b7c8b8f2b73bf6e (diff)
downloadchromium_src-3c766cc321a77febd8cf726436e22ab385f8ac1b.zip
chromium_src-3c766cc321a77febd8cf726436e22ab385f8ac1b.tar.gz
chromium_src-3c766cc321a77febd8cf726436e22ab385f8ac1b.tar.bz2
mmap V8 snapshot and ICU data file in the android_webview
This makes it possible to mmap the V8 snapshot and ICU data file directly from the WebView APK. Doing so makes it possible to remove the android_webview_telemetry_build flag which in turns means we can build the WebView with the same set of flags that Chrome on Android uses. BUG=442338 Review URL: https://codereview.chromium.org/812393002 Cr-Commit-Position: refs/heads/master@{#310765}
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/android_webview.gyp20
-rw-r--r--android_webview/android_webview_tests.gypi8
-rw-r--r--android_webview/apk/system_webview_apk_common.gypi36
-rw-r--r--android_webview/lib/DEPS1
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc21
-rw-r--r--android_webview/native/aw_assets.cc14
-rw-r--r--android_webview/native/aw_assets.h4
7 files changed, 74 insertions, 30 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp
index 3f91264..a14ba0c 100644
--- a/android_webview/android_webview.gyp
+++ b/android_webview/android_webview.gyp
@@ -108,6 +108,7 @@
'../components/components.gyp:web_contents_delegate_android',
'../content/content.gyp:content_app_both',
'../content/content.gyp:content_browser',
+ '../gin/gin.gyp:gin',
'../gpu/blink/gpu_blink.gyp:gpu_blink',
'../gpu/command_buffer/command_buffer.gyp:gles2_utils',
'../gpu/gpu.gyp:command_buffer_service',
@@ -300,25 +301,6 @@
'shared_resources': 1,
},
'includes': [ 'apk/system_webview_apk_common.gypi' ],
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/android_webview_assets',
- 'files': [],
- 'conditions': [
- ['icu_use_data_file_flag==1', {
- 'files': [
- '<(PRODUCT_DIR)/icudtl.dat',
- ],
- }],
- ['v8_use_external_startup_data==1', {
- 'files': [
- '<(PRODUCT_DIR)/natives_blob.bin',
- '<(PRODUCT_DIR)/snapshot_blob.bin',
- ],
- }],
- ],
- },
- ],
},
],
}, { # android_webview_build==1
diff --git a/android_webview/android_webview_tests.gypi b/android_webview/android_webview_tests.gypi
index 2e1ba0e..10ee545 100644
--- a/android_webview/android_webview_tests.gypi
+++ b/android_webview/android_webview_tests.gypi
@@ -17,11 +17,11 @@
'java_in_dir': 'test/shell',
'native_lib_target': 'libstandalonelibwebviewchromium',
'resource_dir': 'test/shell/res',
- 'extensions_to_not_compress': 'pak',
+ 'extensions_to_not_compress': 'pak,dat,bin',
'extra_native_libs': ['<(SHARED_LIB_DIR)/libdrawgl.>(android_product_extension)'],
'additional_input_paths': [
- '<(PRODUCT_DIR)/android_webview_assets/webviewchromium.pak',
- '<(PRODUCT_DIR)/android_webview_assets/en-US.pak',
+ '<(PRODUCT_DIR)/android_webview_apk/assets/webviewchromium.pak',
+ '<(PRODUCT_DIR)/android_webview_apk/assets/en-US.pak',
'<(PRODUCT_DIR)/android_webview_apk/assets/asset_file.html',
'<(PRODUCT_DIR)/android_webview_apk/assets/cookie_test.html',
'<(PRODUCT_DIR)/android_webview_apk/assets/asset_icon.png',
@@ -58,7 +58,7 @@
'<(java_in_dir)/assets/full_screen_video_inside_div_test.html',
'<(java_in_dir)/assets/video.mp4',
],
- 'conditions': [
+ 'conditions': [
['icu_use_data_file_flag==1', {
'files': [
'<(PRODUCT_DIR)/icudtl.dat',
diff --git a/android_webview/apk/system_webview_apk_common.gypi b/android_webview/apk/system_webview_apk_common.gypi
index 0d19dac..2b24785 100644
--- a/android_webview/apk/system_webview_apk_common.gypi
+++ b/android_webview/apk/system_webview_apk_common.gypi
@@ -16,29 +16,51 @@
'never_lint': 1,
'R_package': 'com.android.webview.chromium',
'R_package_relpath': 'com/android/webview/chromium',
- 'extensions_to_not_compress': 'pak',
- 'asset_location': '<(PRODUCT_DIR)/android_webview_assets',
+ 'extensions_to_not_compress': 'pak,bin,dat',
+ 'asset_location': '<(INTERMEDIATE_DIR)/assets/',
# TODO: crbug.com/442348 Update proguard.flags and re-enable.
'proguard_enabled': 'false',
'proguard_flags_paths': ['<(DEPTH)/android_webview/apk/java/proguard.flags'],
# TODO: crbug.com/405035 Find a better solution for WebView .pak files.
'additional_input_paths': [
- '<(PRODUCT_DIR)/android_webview_assets/webviewchromium.pak',
- '<(PRODUCT_DIR)/android_webview_assets/en-US.pak',
+ '<(asset_location)/webviewchromium.pak',
+ '<(asset_location)/en-US.pak',
],
'conditions': [
['icu_use_data_file_flag==1', {
'additional_input_paths': [
- '<(PRODUCT_DIR)/icudtl.dat',
+ '<(asset_location)/icudtl.dat',
],
}],
['v8_use_external_startup_data==1', {
'additional_input_paths': [
- '<(PRODUCT_DIR)/natives_blob.bin',
- '<(PRODUCT_DIR)/snapshot_blob.bin',
+ '<(asset_location)/natives_blob.bin',
+ '<(asset_location)/snapshot_blob.bin',
],
}],
],
},
+ 'copies': [
+ {
+ 'destination': '<(asset_location)',
+ 'files': [
+ '<(PRODUCT_DIR)/android_webview_assets/webviewchromium.pak',
+ '<(PRODUCT_DIR)/android_webview_assets/en-US.pak',
+ ],
+ 'conditions': [
+ ['icu_use_data_file_flag==1', {
+ 'files': [
+ '<(PRODUCT_DIR)/icudtl.dat',
+ ],
+ }],
+ ['v8_use_external_startup_data==1', {
+ 'files': [
+ '<(PRODUCT_DIR)/natives_blob.bin',
+ '<(PRODUCT_DIR)/snapshot_blob.bin',
+ ],
+ }],
+ ],
+ },
+ ],
'includes': [ '../../build/java_apk.gypi' ],
}
diff --git a/android_webview/lib/DEPS b/android_webview/lib/DEPS
index ab83088..17b7ba6 100644
--- a/android_webview/lib/DEPS
+++ b/android_webview/lib/DEPS
@@ -2,6 +2,7 @@ include_rules = [
"+cc/base/switches.h",
"+components", # For jni registers.
"+content/public",
+ "+gin/public",
"+media/base/media_switches.h", # For media command line switches.
"+ui/gl",
]
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc
index 2164521..c996cc4 100644
--- a/android_webview/lib/main/aw_main_delegate.cc
+++ b/android_webview/lib/main/aw_main_delegate.cc
@@ -8,6 +8,7 @@
#include "android_webview/browser/browser_view_renderer.h"
#include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h"
#include "android_webview/lib/aw_browser_dependency_factory_impl.h"
+#include "android_webview/native/aw_assets.h"
#include "android_webview/native/aw_media_url_interceptor.h"
#include "android_webview/native/aw_quota_manager_bridge_impl.h"
#include "android_webview/native/aw_web_contents_view_delegate.h"
@@ -16,6 +17,7 @@
#include "android_webview/renderer/aw_content_renderer_client.h"
#include "base/command_line.h"
#include "base/cpu.h"
+#include "base/i18n/icu_util.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
@@ -24,7 +26,9 @@
#include "content/browser/media/android/browser_media_player_manager.h"
#include "content/public/browser/browser_main_runner.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/common/content_descriptors.h"
#include "content/public/common/content_switches.h"
+#include "gin/public/isolate_holder.h"
#include "gpu/command_buffer/client/gl_in_process_context.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "media/base/media_switches.h"
@@ -81,6 +85,23 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) {
// This is needed for sharing textures across the different GL threads.
cl->AppendSwitch(switches::kEnableThreadedTextureMailboxes);
+ // This is needed to be able to mmap the V8 snapshot and ICU data file
+ // directly from the WebView .apk.
+ // This needs to be here so that it gets to run before the code in
+ // content_main_runner that reads these values tries to do so.
+ // In multi-process mode this code would live in
+ // AwContentBrowserClient::GetAdditionalMappedFilesForChildProcess.
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA
+ CHECK(AwAssets::RegisterAssetWithGlobalDescriptors(
+ kV8NativesDataDescriptor, gin::IsolateHolder::kNativesFileName));
+ CHECK(AwAssets::RegisterAssetWithGlobalDescriptors(
+ kV8SnapshotDataDescriptor, gin::IsolateHolder::kSnapshotFileName));
+#endif
+ // TODO(mkosiba): make this CHECK when the android_webview_build uses an asset
+ // from the .apk too.
+ AwAssets::RegisterAssetWithGlobalDescriptors(
+ kAndroidICUDataDescriptor, base::i18n::kIcuDataFileName);
+
return false;
}
diff --git a/android_webview/native/aw_assets.cc b/android_webview/native/aw_assets.cc
index 6d5ad72..41f2270 100644
--- a/android_webview/native/aw_assets.cc
+++ b/android_webview/native/aw_assets.cc
@@ -32,6 +32,20 @@ bool OpenAsset(const std::string& filename,
return *fd != -1;
}
+bool RegisterAssetWithGlobalDescriptors(base::GlobalDescriptors::Key key,
+ const std::string& asset_filename) {
+ int asset_fd = 0;
+ int64 asset_off = 0;
+ int64 asset_len = 0;
+ bool result =
+ AwAssets::OpenAsset(asset_filename, &asset_fd, &asset_off, &asset_len);
+ if (result) {
+ base::GlobalDescriptors::GetInstance()->Set(
+ key, asset_fd, base::MemoryMappedFile::Region(asset_off, asset_len));
+ }
+ return result;
+}
+
} // namespace AwAssets
bool RegisterAwAssets(JNIEnv* env) {
diff --git a/android_webview/native/aw_assets.h b/android_webview/native/aw_assets.h
index 229392c..16fcafb 100644
--- a/android_webview/native/aw_assets.h
+++ b/android_webview/native/aw_assets.h
@@ -8,6 +8,7 @@
#include <string>
#include "base/android/jni_android.h"
+#include "base/posix/global_descriptors.h"
namespace android_webview {
namespace AwAssets {
@@ -23,6 +24,9 @@ bool OpenAsset(const std::string& filename,
int64* offset,
int64* size);
+bool RegisterAssetWithGlobalDescriptors(base::GlobalDescriptors::Key key,
+ const std::string& asset_filename);
+
} // namespace AwAssets
bool RegisterAwAssets(JNIEnv* env);