mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 15:23:51 +00:00
Backed out changeset 0f320509eddb (bug 1351071) for slowness
This commit is contained in:
parent
7057a51c5c
commit
b47fe0286b
@ -23,6 +23,11 @@ from mozpack.copier import (
|
||||
Jarrer,
|
||||
)
|
||||
|
||||
STARTUP_CACHE_PATHS = [
|
||||
'jsloader',
|
||||
'jssubloader',
|
||||
]
|
||||
|
||||
'''
|
||||
Formatters are classes receiving packaging instructions and creating the
|
||||
appropriate package layout.
|
||||
@ -316,4 +321,4 @@ class OmniJarSubFormatter(PiecemealFormatter):
|
||||
'greprefs.js',
|
||||
'hyphenation',
|
||||
'update.locale',
|
||||
]
|
||||
] or path[0] in STARTUP_CACHE_PATHS
|
||||
|
@ -23,7 +23,10 @@ from mozpack.copier import (
|
||||
FileCopier,
|
||||
)
|
||||
from mozpack.packager import SimplePackager
|
||||
from mozpack.packager.formats import FlatFormatter
|
||||
from mozpack.packager.formats import (
|
||||
FlatFormatter,
|
||||
STARTUP_CACHE_PATHS,
|
||||
)
|
||||
from urlparse import urlparse
|
||||
|
||||
|
||||
@ -185,7 +188,8 @@ def unpack_to_registry(source, registry):
|
||||
finder = UnpackFinder(source)
|
||||
packager = SimplePackager(FlatFormatter(registry))
|
||||
for p, f in finder.find('*'):
|
||||
packager.add(p, f)
|
||||
if mozpath.split(p)[0] not in STARTUP_CACHE_PATHS:
|
||||
packager.add(p, f)
|
||||
packager.close()
|
||||
|
||||
|
||||
|
@ -408,6 +408,8 @@ class TestFormatters(unittest.TestCase):
|
||||
self.assertTrue(is_resource(base, 'greprefs.js'))
|
||||
self.assertTrue(is_resource(base, 'hyphenation/foo'))
|
||||
self.assertTrue(is_resource(base, 'update.locale'))
|
||||
self.assertTrue(
|
||||
is_resource(base, 'jsloader/resource/gre/modules/foo.jsm'))
|
||||
self.assertFalse(is_resource(base, 'foo'))
|
||||
self.assertFalse(is_resource(base, 'foo/bar/greprefs.js'))
|
||||
self.assertTrue(is_resource(base, 'defaults/messenger/foo.dat'))
|
||||
|
@ -30,6 +30,7 @@ from createprecomplete import generate_precomplete
|
||||
import os
|
||||
from StringIO import StringIO
|
||||
import subprocess
|
||||
import platform
|
||||
import mozinfo
|
||||
|
||||
# List of libraries to shlibsign.
|
||||
@ -124,6 +125,60 @@ class LibSignFile(File):
|
||||
errors.fatal('Error while signing %s' % self.path)
|
||||
|
||||
|
||||
def precompile_cache(registry, source_path, gre_path, app_path):
|
||||
'''
|
||||
Create startup cache for the given application directory, using the
|
||||
given GRE path.
|
||||
- registry is a FileRegistry-like instance where to add the startup cache.
|
||||
- source_path is the base path of the package.
|
||||
- gre_path is the GRE path, relative to source_path.
|
||||
- app_path is the application path, relative to source_path.
|
||||
Startup cache for all resources under resource://app/ are generated,
|
||||
except when gre_path == app_path, in which case it's under
|
||||
resource://gre/.
|
||||
'''
|
||||
from tempfile import mkstemp
|
||||
source_path = os.path.abspath(source_path)
|
||||
if app_path != gre_path:
|
||||
resource = 'app'
|
||||
else:
|
||||
resource = 'gre'
|
||||
app_path = os.path.join(source_path, app_path)
|
||||
gre_path = os.path.join(source_path, gre_path)
|
||||
|
||||
fd, cache = mkstemp('.zip')
|
||||
os.close(fd)
|
||||
os.remove(cache)
|
||||
|
||||
try:
|
||||
extra_env = {'MOZ_STARTUP_CACHE': cache}
|
||||
if buildconfig.substs.get('MOZ_TSAN'):
|
||||
extra_env['TSAN_OPTIONS'] = 'report_bugs=0'
|
||||
if buildconfig.substs.get('MOZ_ASAN'):
|
||||
extra_env['ASAN_OPTIONS'] = 'detect_leaks=0'
|
||||
if launcher.launch(['xpcshell', '-g', gre_path, '-a', app_path,
|
||||
'-f', os.path.join(os.path.dirname(__file__),
|
||||
'precompile_cache.js'),
|
||||
'-e', 'precompile_startupcache("resource://%s/");'
|
||||
% resource],
|
||||
extra_linker_path=gre_path,
|
||||
extra_env=extra_env):
|
||||
errors.fatal('Error while running startup cache precompilation')
|
||||
return
|
||||
from mozpack.mozjar import JarReader
|
||||
jar = JarReader(cache)
|
||||
resource = '/resource/%s/' % resource
|
||||
for f in jar:
|
||||
if resource in f.filename:
|
||||
path = f.filename[f.filename.index(resource) + len(resource):]
|
||||
if registry.contains(path):
|
||||
registry.add(f.filename, GeneratedFile(f.read()))
|
||||
jar.close()
|
||||
finally:
|
||||
if os.path.exists(cache):
|
||||
os.remove(cache)
|
||||
|
||||
|
||||
class RemovedFiles(GeneratedFile):
|
||||
'''
|
||||
File class for removed-files. Is used as a preprocessor parser.
|
||||
@ -317,6 +372,25 @@ def main():
|
||||
if key in log:
|
||||
f.preload(log[key])
|
||||
|
||||
# Fill startup cache
|
||||
if isinstance(formatter, OmniJarFormatter) and launcher.can_launch() \
|
||||
and buildconfig.substs['MOZ_DISABLE_STARTUPCACHE'] != '1':
|
||||
gre_path = None
|
||||
def get_bases():
|
||||
for b in sink.packager.get_bases(addons=False):
|
||||
for p in (mozpath.join('bin', b), b):
|
||||
if os.path.exists(os.path.join(args.source, p)):
|
||||
yield p
|
||||
break
|
||||
for base in sorted(get_bases()):
|
||||
if not gre_path:
|
||||
gre_path = base
|
||||
omnijar_path = mozpath.join(sink.normalize_path(base),
|
||||
buildconfig.substs['OMNIJAR_NAME'])
|
||||
if formatter.contains(omnijar_path):
|
||||
precompile_cache(formatter.copier[omnijar_path],
|
||||
args.source, gre_path, base)
|
||||
|
||||
copier.copy(args.destination)
|
||||
generate_precomplete(os.path.normpath(os.path.join(args.destination,
|
||||
respath)))
|
||||
|
Loading…
Reference in New Issue
Block a user