diff options
author | mkosiba <mkosiba@chromium.org> | 2015-01-09 05:10:22 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-09 13:11:05 +0000 |
commit | 3c766cc321a77febd8cf726436e22ab385f8ac1b (patch) | |
tree | 69f80a3088b48f0cd108a179f30adcc315b862b2 /android_webview | |
parent | c5feb0407d876d63c4db686e0b7c8b8f2b73bf6e (diff) | |
download | chromium_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.gyp | 20 | ||||
-rw-r--r-- | android_webview/android_webview_tests.gypi | 8 | ||||
-rw-r--r-- | android_webview/apk/system_webview_apk_common.gypi | 36 | ||||
-rw-r--r-- | android_webview/lib/DEPS | 1 | ||||
-rw-r--r-- | android_webview/lib/main/aw_main_delegate.cc | 21 | ||||
-rw-r--r-- | android_webview/native/aw_assets.cc | 14 | ||||
-rw-r--r-- | android_webview/native/aw_assets.h | 4 |
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); |