Changeset 281184 in webkit
- Timestamp:
- Aug 18, 2021, 2:13:47 AM (5 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
flatpak/flatpakutils.py (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r281167 r281184 1 2021-08-18 Martin Robinson <mrobinson@webkit.org> 2 3 [Flatpak SDK] Increase the startup performance of webkit-flatpak 4 https://bugs.webkit.org/show_bug.cgi?id=229185 5 6 Reviewed by Philippe Normand. 7 8 Improve flatpakutils.py by ensuring that we don't make redundant 9 calls to flatpak during initialization of the data structures. This 10 saves 5 seconds on every call to build-webkit and run-webkit-tests. 11 12 Before: 13 $ time ./Tools/Scripts/webkit-flatpak -c true 14 real 0m6,297s 15 user 0m0,786s 16 sys 0m0,513s 17 18 After: 19 $ time ./Tools/Scripts/webkit-flatpak -c true 20 real 0m1,243s 21 user 0m0,375s 22 sys 0m0,162s 23 24 * flatpak/flatpakutils.py: 25 (FlatpakPackages.__init__): Separate the update into another 26 method so that it can be called directly when a package is installed. 27 Add new packages directly to self.packages. 28 (FlatpakRepos.__init__): Ensure that we only update our repositories 29 and package list once we've initialized our list of repositories. 30 (FlatpakRepos.add): Return True if this method actually changed anything 31 and accept a parameter determining whether an update is done to 32 the repository and package list. 33 (FlatpakRepos.is_package_installed): Added this method which replaces 34 FlatpakRepo.is_app_installed. 35 (FlatpakRepo.__init__): Remove the app registry because it is duplicated 36 by FlatpakPackages. 37 (FlatpakPackage.is_installed): Now call FlatpakRepos.is_package_installed. 38 (WebkitFlatpak._reset_repository): Set up both repositories here and 39 pass then as part of the FlatpakRepos constructor. 40 (WebkitFlatpak.main): Separate out the check which deletes the Flatpak 41 repository from the one that checks if the packages are installed. This 42 makes sure we don't install packages and then immediately delete them. 43 (WebkitFlatpak.check_installed_packages): rename _get_packages to _get_dependency_packages 44 in order to make it clear that it doesn't return installed packages. 45 (WebkitFlatpak._get_dependency_packages): Ditto. 46 (WebkitFlatpak.install_all): Ditto. 47 (FlatpakRepo.is_app_installed): Deleted. 48 (WebkitFlatpak._get_packages): Deleted. 49 1 50 2021-08-17 Jonathan Bedard <jbedard@apple.com> 2 51 -
trunk/Tools/flatpak/flatpakutils.py
r280172 r281184 229 229 def __init__(self, repos, user=True): 230 230 FlatpakObject.__init__(self, user=user) 231 232 231 self.repos = repos 233 234 packs = [] 232 self.update() 233 234 def update(self): 235 self.packages = [] 235 236 out = self.flatpak("list", "--columns=application,arch,branch,origin", "-a", gather_output=True) 236 237 package_defs = [line for line in out.split("\n") if line] … … 240 241 # If installed from a file, the package is in no repo 241 242 repo = self.repos.repos.get(origin) 242 243 packs.append(FlatpakPackage(name, branch, repo, arch)) 244 245 self.packages = packs 243 self.packages.append(FlatpakPackage(name, branch, repo, arch)) 246 244 247 245 def __iter__(self): … … 252 250 class FlatpakRepos(FlatpakObject): 253 251 254 def __init__(self, user=True):252 def __init__(self, repos, user=True): 255 253 FlatpakObject.__init__(self, user=user) 256 self.repos = {}257 254 self.update() 255 256 updated = False 257 for repo in repos: 258 updated = self.add(repo, update=False) or updated 259 260 # Only fetch the remote and package list again if we updated anything. 261 if updated: 262 self.update() 258 263 259 264 def update(self): … … 272 277 self.packages = FlatpakPackages(self) 273 278 274 def add(self, repo, override=True):279 def add(self, repo, update=True, override=True): 275 280 try: 281 repo.repos = self 282 276 283 same_name = None 277 284 for name, tmprepo in self.repos.items(): 278 285 if repo.url == tmprepo.url: 279 return tmprepo286 return False 280 287 elif repo.name == name: 281 288 same_name = tmprepo 282 289 283 290 if same_name: 284 if override :291 if override and same_name.url != repo.url: 285 292 self.flatpak("remote-modify", repo.name, "--url=" + repo.url) 286 293 same_name.url = repo.url 287 288 return same_name 294 return True 289 295 else: 290 return None 296 return False 297 298 args = ["remote-add", repo.name, "--if-not-exists"] 299 if repo.repo_file: 300 args.extend(["--from", repo.repo_file.name]) 291 301 else: 292 args = ["remote-add", repo.name, "--if-not-exists"] 293 if repo.repo_file: 294 args.extend(["--from", repo.repo_file.name]) 295 else: 296 args.extend(["--no-gpg-verify", repo.url]) 297 self.flatpak(*args, comment="Adding repo %s" % repo.name) 298 299 repo.repos = self 300 return repo 302 args.extend(["--no-gpg-verify", repo.url]) 303 self.flatpak(*args, comment="Adding repo %s" % repo.name) 304 return True 301 305 finally: 302 self.update() 306 if update: 307 self.packages = FlatpakPackages(self) 308 309 def is_package_installed(self, name, branch=None, arch=None): 310 for package in self.packages: 311 if name != package.name: 312 continue 313 if branch and branch != package.branch: 314 continue 315 if arch and arch != package.arch: 316 continue 317 return True 318 return False 303 319 304 320 … … 326 342 assert url 327 343 328 self._app_registry = {}329 output = self.flatpak("list", "--columns=application,branch", "-a", gather_output=True)330 for line in output.splitlines():331 name, branch = line.split("\t")332 self._app_registry[name] = branch333 334 def is_app_installed(self, name, branch=None):335 if branch:336 try:337 return self._app_registry[name] == branch338 except KeyError:339 return False340 else:341 return name in self._app_registry.keys()342 343 344 @property 344 345 def repo_file(self): … … 374 375 375 376 def is_installed(self, branch): 377 # Bundles installed from files do not have repositories. 376 378 if not self.repo: 377 # Bundle installed from file378 379 return True 379 380 for package in self.repo.repos.packages: 381 if package.name == self.name and package.branch == branch and package.arch == self.arch: 382 return True 383 384 return False 380 return self.repo.repos.is_package_installed(self.name, branch, self.arch) 385 381 386 382 def install(self): … … 392 388 comment = "Installing from " + self.repo.name + " " + self.name + " " + self.arch + " " + branch 393 389 self.flatpak(*args, comment=comment) 390 self.repo.repos.packages.update() 394 391 395 392 def update(self): … … 604 601 605 602 def _reset_repository(self): 606 self.repos = FlatpakRepos()607 603 url = "https://software.igalia.com/webkit-sdk-repo/" 608 604 repo_file = "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo" … … 610 606 url = "file://%s" % self.user_repo 611 607 repo_file = None 612 self.sdk_repo = self.repos.add(FlatpakRepo("webkit-sdk", url=url, repo_file=repo_file)) 608 609 self.sdk_repo = FlatpakRepo("webkit-sdk", url=url, repo_file=repo_file) 610 self.flathub_repo = FlatpakRepo("flathub", url="https://dl.flathub.org/repo/", 611 repo_file="https://dl.flathub.org/repo/flathub.flatpakrepo") 612 self.repos = FlatpakRepos([self.sdk_repo, self. flathub_repo]) 613 613 614 614 def setup_builddir(self): … … 987 987 regenerate_toolchains = (repo.version("org.webkit.Sdk") != version_before_update) or not self.check_toolchains_generated() 988 988 989 for package in self._get_packages(): 990 if package.name.startswith("org.webkit") and repo.is_app_installed(package.name) \ 991 and not repo.is_app_installed(package.name, branch=self.sdk_branch): 989 # If we have an out-of-date package, simply remove the entire flatpak directory and start over. 990 for package in self._get_dependency_packages(): 991 if package.name.startswith("org.webkit") \ 992 and self.repos.is_package_installed(package.name) \ 993 and not self.repos.is_package_installed(package.name, branch=self.sdk_branch): 992 994 Console.message("New SDK version available, removing local UserFlatpak directory before switching to new version") 993 995 shutil.rmtree(self.flatpak_build_path) 994 996 self._reset_repository() 995 regenerate_toolchains = True996 997 break 997 elif not repo.is_app_installed(package.name): 998 999 for package in self._get_dependency_packages(): 1000 if not self.repos.is_package_installed(package.name): 998 1001 package.install() 999 1002 regenerate_toolchains = True 1003 1000 1004 else: 1001 1005 regenerate_toolchains = self.regenerate_toolchains … … 1101 1105 1102 1106 def check_installed_packages(self): 1103 for package in self._get_ packages():1107 for package in self._get_dependency_packages(): 1104 1108 if package.name.startswith("org.webkit") and not package.is_installed(self.sdk_branch): 1105 1109 Console.error_message("Flatpak package %s not installed. Please update your SDK: Tools/Scripts/update-webkit-flatpak", package) … … 1129 1133 return 0 1130 1134 1131 def _get_ packages(self):1135 def _get_dependency_packages(self): 1132 1136 arch = platform.machine() 1133 1137 self.runtime = FlatpakPackage("org.webkit.Platform", self.sdk_branch, … … 1139 1143 self.sdk_repo, arch)) 1140 1144 1141 self.flathub_repo = self.repos.add(FlatpakRepo("flathub", url="https://dl.flathub.org/repo/",1142 repo_file="https://dl.flathub.org/repo/flathub.flatpakrepo"))1143 1144 1145 fdo_branch = "20.08" 1145 1146 extensions = ("rust-stable", "llvm11") … … 1154 1155 return 1155 1156 Console.message("Installing %s dependencies in %s", self.build_type, self.flatpak_build_path) 1156 for package in self._get_ packages():1157 for package in self._get_dependency_packages(): 1157 1158 if not package.is_installed(self.sdk_branch): 1158 1159 package.install()
Note:
See TracChangeset
for help on using the changeset viewer.