[webkit-changes] [WebKit/WebKit] eadc88: Avoid File::Find during IDL generation

Elliott Williams noreply at github.com
Wed Sep 27 21:08:52 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: eadc88e2217f19653e8c73db5ac16c3939fce399
      https://github.com/WebKit/WebKit/commit/eadc88e2217f19653e8c73db5ac16c3939fce399
  Author: Elliott Williams <emw at apple.com>
  Date:   2023-09-27 (Wed, 27 Sep 2023)

  Changed paths:
    M Source/WebCore/CMakeLists.txt
    M Source/WebCore/DerivedSources.make
    M Source/WebCore/WebCoreMacros.cmake
    M Source/WebCore/bindings/scripts/CodeGenerator.pm
    M Source/WebCore/bindings/scripts/generate-bindings-all.pl
    M Source/WebCore/bindings/scripts/generate-bindings.pl
    M Source/WebCore/testing/Internals.idl
    M Tools/DumpRenderTree/DerivedSources-output.xcfilelist
    M Tools/DumpRenderTree/DerivedSources.make
    M Tools/Scripts/webkitpy/bindings/main.py
    M Tools/TestRunnerShared/CMakeLists.txt
    M Tools/WebKitTestRunner/CMakeLists.txt
    M Tools/WebKitTestRunner/DerivedSources-output.xcfilelist
    M Tools/WebKitTestRunner/DerivedSources.make

  Log Message:
  -----------
  Avoid File::Find during IDL generation
https://bugs.webkit.org/show_bug.cgi?id=261364
rdar://99146531

Reviewed by Alexey Proskuryakov.

Replace the include mechanism of generate-bindings.pl, which was
performing a recursive directory search of WebCore on every invocation,
with a lookup based on a precomputed list of IDL names.

The Xcode-based build generates this list already, in
IDLFileNamesList.txt. The CMake build does not have an equivalent list,
because it invokes the generator in multiple batches (once for WebCore,
WebCoreTestSupport, etc.). Change it to generate a file based on the
IDLs it's generating plus any additional IDLs which must be looked up
but not generated.

On my M2 Max machine, this is a 21% speedup of WebCore's installhdrs
time, from

  Time (mean ± σ):     88.534 s ±  8.544 s    [User: 6.732 s, System: 1.513 s]
  Range (min … max):   80.570 s … 100.172 s    10 runs

to

  Time (mean ± σ):     73.320 s ± 10.335 s    [User: 4.354 s, System: 1.363 s]
  Range (min … max):   66.565 s … 98.368 s    10 runs

* Source/WebCore/CMakeLists.txt: MockWebAuthenticationConfiguration is
  imported but not generated; add it to WebCoreTestSupport.
* Source/WebCore/DerivedSources.make: Recognize and pass
  --idlFileNamesList instead of --include arguments.
* Source/WebCore/WebCoreMacros.cmake: Generate the IDL file names list.
* Source/WebCore/bindings/scripts/CodeGenerator.pm:
(new): Store path to IDL file names list.
(IDLFileForInterface): Read file names list instead of finding.
* Source/WebCore/bindings/scripts/generate-bindings-all.pl:
(buildDirectoryCache): Pass --idlFileNamesList argument.
* Source/WebCore/bindings/scripts/generate-bindings.pl:
(generateBindings): Ditto.
* Source/WebCore/testing/Internals.idl: Avoid having the IDL generator
  parse and look up attributes that require loading a bunch of
  additional IDLs. This prevents CMake builds from having to track all
  the Apple Pay IDLs in their WebCoreTestSupport, for instance.

* Tools/DumpRenderTree/DerivedSources-output.xcfilelist:
* Tools/DumpRenderTree/DerivedSources.make: Generate an
  IDLFileNamesList.txt and use it instead of includes.
* Tools/Scripts/webkitpy/bindings/main.py:
(BindingsTests.generate_from_idl):
(BindingsTests.generate_idl_file_names_list): Extracted logic, now
called twice: once to prepare a supplemental dependency file, once to
generate a list of all IDLs.
(BindingsTests):
(BindingsTests.generate_supplemental_dependency):
(BindingsTests.run_tests):
(BindingsTests.main):
* Tools/TestRunnerShared/CMakeLists.txt: Stop passing IDL_INCLUDES.
* Tools/WebKitTestRunner/CMakeLists.txt: Ditto.
* Tools/WebKitTestRunner/DerivedSources-output.xcfilelist:
* Tools/WebKitTestRunner/DerivedSources.make: Ditto DumpRenderTree
  changes.

Canonical link: https://commits.webkit.org/268561@main




More information about the webkit-changes mailing list