Skip to content

Conversation

@CodaFi
Copy link
Contributor

@CodaFi CodaFi commented Jun 29, 2021

Switch to a non-owning intermediate representation to allow the caller to perform the necessary copies when it reinterprets the raw data we provide to them in the visitor. This meant removing the remaining entry points that could possibly allow unowned data to escape - so the initializers on Bitstream that ran the CollectingVisitor have been struck - as well as the existing deprecated APIs here that we no longer need.

The combo of all of the changes here improves the performance of dependency graph deserialization in the Swift driver by 3-5x which translates to a 3-5 second wall time improvement for large projects (> 1000 files).

CodaFi added 5 commits June 28, 2021 23:51
These conveniences allowed a custom collector to escape the data in a bitstream container. But we don't really need them - the user can write their own visitor if need be. And these escaped elements are forcing copies in the visitor interface.
Now that we no longer have any entrypoints that can escape this data, switch to a non-owning view of bitstream data. This saves a significant amount of copying overhead when deserializing many/large bitstream files and allows callers to decide for themselves what format they wish to reinterpret the data as.
Creating a buffer of elements then reinterpreting them as unicode scalars involves extra allocations and copies of the underlying data. Instead, create a scratch buffer for an array of bytes and write directly into that.
This improves the performance of appending strings to the bitstream writer somewhat by giving us some room to work with.
@CodaFi
Copy link
Contributor Author

CodaFi commented Jun 29, 2021

@swift-ci test

@CodaFi
Copy link
Contributor Author

CodaFi commented Jun 30, 2021

@swift-ci test

An unfortunate stopgap that restores the existing beahvior of passing
around owned data.
@CodaFi
Copy link
Contributor Author

CodaFi commented Jun 30, 2021

@swift-ci test

@CodaFi
Copy link
Contributor Author

CodaFi commented Jun 30, 2021

@CodaFi
Copy link
Contributor Author

CodaFi commented Jun 30, 2021

@CodaFi CodaFi merged commit 83dce6e into swiftlang:main Jun 30, 2021
@CodaFi CodaFi deleted the perfmon branch June 30, 2021 21:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants