servo: Add an Info.plist on the Mac and opt into integrated graphics.

Discrete GPUs cause power use problems and tend to perform badly with
WebRender.

See:

* https://developer.apple.com/library/mac/qa/qa1734/_index.html

* https://reverse.put.as/2013/05/28/gimmedebugah-how-to-embedded-a-info-plist-into-arbitrary-binaries/
This commit is contained in:
Patrick Walton 2016-06-06 19:17:09 -07:00
parent a259bb38b1
commit 0d963f5bf8
4 changed files with 56 additions and 0 deletions

View file

@ -37,6 +37,17 @@ use servo::util::opts::{self, ArgumentParsingResult};
use servo::util::panicking::initiate_panic_hook; use servo::util::panicking::initiate_panic_hook;
use std::rc::Rc; use std::rc::Rc;
pub mod platform {
#[cfg(target_os = "macos")]
pub use platform::macos::deinit;
#[cfg(target_os = "macos")]
pub mod macos;
#[cfg(not(target_os = "macos"))]
pub fn deinit() {}
}
fn main() { fn main() {
// Parse the command line options and store them globally // Parse the command line options and store them globally
let opts_result = opts::from_cmdline_args(&*args()); let opts_result = opts::from_cmdline_args(&*args());
@ -82,6 +93,8 @@ fn main() {
}; };
unregister_glutin_resize_handler(&window); unregister_glutin_resize_handler(&window);
platform::deinit()
} }
fn register_glutin_resize_handler(window: &Rc<app::window::Window>, fn register_glutin_resize_handler(window: &Rc<app::window::Window>,

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>CFBundleDisplayName</key>
<string>Servo</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleName</key>
<string>Servo</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright &#169; 2016 The Servo Authors</string>
<key>CFBundleVersion</key>
<string>0.0.1</string>
<key>CFBundleIdentifier</key>
<string>org.servo.servo</string>
</dict>
</plist>

View file

@ -0,0 +1,19 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use std::ptr;
pub fn deinit() {
// An unfortunate hack to make sure the linker's dead code stripping doesn't strip our
// `Info.plist`.
unsafe {
ptr::read_volatile(&INFO_PLIST[0]);
}
}
#[cfg(target_os = "macos")]
#[link_section = "__TEXT,__info_plist"]
#[no_mangle]
pub static INFO_PLIST: [u8; 619] = *include_bytes!("Info.plist");

View file

@ -41,6 +41,9 @@ ignored_files = [
os.path.join(".", "tests", "wpt", "metadata", "MANIFEST.json"), os.path.join(".", "tests", "wpt", "metadata", "MANIFEST.json"),
os.path.join(".", "tests", "wpt", "metadata-css", "MANIFEST.json"), os.path.join(".", "tests", "wpt", "metadata-css", "MANIFEST.json"),
os.path.join(".", "components", "script", "dom", "webidls", "ForceTouchEvent.webidl"), os.path.join(".", "components", "script", "dom", "webidls", "ForceTouchEvent.webidl"),
# FIXME(pcwalton, #11679): This is a workaround for a tidy error on the quoted string
# `"__TEXT,_info_plist"` inside an attribute.
os.path.join(".", "components", "servo", "platform", "macos", "mod.rs"),
# Hidden files # Hidden files
os.path.join(".", "."), os.path.join(".", "."),
] ]