mirror of
https://github.com/servo/servo.git
synced 2025-06-19 06:38:59 +01:00
Auto merge of #14379 - kimsnj:run-headless, r=jdm
Use software rendering when running servo in headless mode <!-- Please describe your changes on the following line: --> Properly setting environment to use OsMesa in headless mode. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #13515 <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because I manually ran: `./mach run -d tests/html/about-mozilla.html -z` <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14379) <!-- Reviewable:end -->
This commit is contained in:
commit
bd5eef58a2
3 changed files with 45 additions and 26 deletions
|
@ -209,6 +209,26 @@ def is_macosx():
|
|||
return sys.platform == 'darwin'
|
||||
|
||||
|
||||
def is_linux():
|
||||
return sys.platform.startswith('linux')
|
||||
|
||||
|
||||
def set_osmesa_env(bin_path, env):
|
||||
"""Set proper LD_LIBRARY_PATH and DRIVE for software rendering on Linux and OSX"""
|
||||
if is_linux():
|
||||
osmesa_path = path.join(find_dep_path_newest('osmesa-src', bin_path), "out", "lib", "gallium")
|
||||
env["LD_LIBRARY_PATH"] = osmesa_path
|
||||
env["GALLIUM_DRIVER"] = "softpipe"
|
||||
elif is_macosx():
|
||||
osmesa_path = path.join(find_dep_path_newest('osmesa-src', bin_path),
|
||||
"out", "src", "gallium", "targets", "osmesa", ".libs")
|
||||
glapi_path = path.join(find_dep_path_newest('osmesa-src', bin_path),
|
||||
"out", "src", "mapi", "shared-glapi", ".libs")
|
||||
env["DYLD_LIBRARY_PATH"] = osmesa_path + ":" + glapi_path
|
||||
env["GALLIUM_DRIVER"] = "softpipe"
|
||||
return env
|
||||
|
||||
|
||||
class BuildNotFound(Exception):
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
|
|
|
@ -22,7 +22,11 @@ from mach.decorators import (
|
|||
Command,
|
||||
)
|
||||
|
||||
from servo.command_base import CommandBase, call, check_call, find_dep_path_newest, is_windows, is_macosx
|
||||
from servo.command_base import (
|
||||
CommandBase,
|
||||
call, check_call, find_dep_path_newest,
|
||||
is_windows, is_macosx, set_osmesa_env,
|
||||
)
|
||||
|
||||
|
||||
def read_file(filename, if_exists=False):
|
||||
|
@ -52,10 +56,13 @@ class PostBuildCommands(CommandBase):
|
|||
help='Name of debugger to use.')
|
||||
@CommandArgument('--browserhtml', '-b', action='store_true',
|
||||
help='Launch with Browser.html')
|
||||
@CommandArgument('--headless', '-z', action='store_true',
|
||||
help='Launch in headless mode')
|
||||
@CommandArgument(
|
||||
'params', nargs='...',
|
||||
help="Command-line arguments to be passed through to Servo")
|
||||
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, browserhtml=False):
|
||||
def run(self, params, release=False, dev=False, android=None, debug=False, debugger=None, browserhtml=False,
|
||||
headless=False):
|
||||
env = self.build_env()
|
||||
env["RUST_BACKTRACE"] = "1"
|
||||
|
||||
|
@ -107,6 +114,10 @@ class PostBuildCommands(CommandBase):
|
|||
'--pref', 'shell.builtin-key-shortcuts.enabled=false',
|
||||
path.join(browserhtml_path, 'out', 'index.html')]
|
||||
|
||||
if headless:
|
||||
set_osmesa_env(args[0], env)
|
||||
args.append('-z')
|
||||
|
||||
# Borrowed and modified from:
|
||||
# http://hg.mozilla.org/mozilla-central/file/c9cfa9b91dea/python/mozbuild/mozbuild/mach_commands.py#l883
|
||||
if debug:
|
||||
|
|
|
@ -28,7 +28,11 @@ from mach.decorators import (
|
|||
Command,
|
||||
)
|
||||
|
||||
from servo.command_base import BuildNotFound, CommandBase, call, cd, check_call, find_dep_path_newest, host_triple
|
||||
from servo.command_base import (
|
||||
BuildNotFound, CommandBase,
|
||||
call, cd, check_call, host_triple, set_osmesa_env,
|
||||
)
|
||||
|
||||
from wptrunner import wptcommandline
|
||||
from update import updatecommandline
|
||||
from servo_tidy import tidy
|
||||
|
@ -729,29 +733,13 @@ class MachCommands(CommandBase):
|
|||
def set_software_rendering_env(self, use_release):
|
||||
# On Linux and mac, find the OSMesa software rendering library and
|
||||
# add it to the dynamic linker search path.
|
||||
if sys.platform.startswith('linux'):
|
||||
try:
|
||||
args = [self.get_binary_path(use_release, not use_release)]
|
||||
osmesa_path = path.join(find_dep_path_newest('osmesa-src', args[0]), "out", "lib", "gallium")
|
||||
os.environ["LD_LIBRARY_PATH"] = osmesa_path
|
||||
os.environ["GALLIUM_DRIVER"] = "softpipe"
|
||||
except BuildNotFound:
|
||||
# This can occur when cross compiling (e.g. arm64), in which case
|
||||
# we won't run the tests anyway so can safely ignore this step.
|
||||
pass
|
||||
elif sys.platform.startswith('darwin'):
|
||||
try:
|
||||
args = [self.get_binary_path(use_release, not use_release)]
|
||||
osmesa_path = path.join(find_dep_path_newest('osmesa-src', args[0]),
|
||||
"out", "src", "gallium", "targets", "osmesa", ".libs")
|
||||
glapi_path = path.join(find_dep_path_newest('osmesa-src', args[0]),
|
||||
"out", "src", "mapi", "shared-glapi", ".libs")
|
||||
os.environ["DYLD_LIBRARY_PATH"] = osmesa_path + ":" + glapi_path
|
||||
os.environ["GALLIUM_DRIVER"] = "softpipe"
|
||||
except BuildNotFound:
|
||||
# This can occur when cross compiling (e.g. arm64), in which case
|
||||
# we won't run the tests anyway so can safely ignore this step.
|
||||
pass
|
||||
try:
|
||||
args = [self.get_binary_path(use_release, not use_release)]
|
||||
set_osmesa_env(args[0], os.environ)
|
||||
except BuildNotFound:
|
||||
# This can occur when cross compiling (e.g. arm64), in which case
|
||||
# we won't run the tests anyway so can safely ignore this step.
|
||||
pass
|
||||
|
||||
|
||||
def create_parser_create():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue