aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/productbuilddata.h
Commit message (Collapse)AuthorAgeFilesLines
* Fix uninitialized variablesIvan Komissarov2019-05-021-1/+1
| | | | | | | | | This fixes most of clang analyzer warnings about uninitialized variables in ctors Change-Id: I879c785594307ed3fe7140588338a6b2a1e4db65 Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Make sure the set of root artifacts is always up to dateChristian Kandeler2018-07-311-0/+1
| | | | | | | ... by updating it whenever artifact file tags change. Change-Id: I62496ba73f7633888de6be16aca59777a53629ed Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Get rid of the code marking a rule for re-applicationChristian Kandeler2018-06-251-8/+1
| | | | | | | | I do not see what functionality this code adds to the change tracking procedure. Change-Id: Id3809564b8cb3517b5932b18aeaad3ba5588905a Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Guard concurrent access of ProductBuildData::m_jsArtifactsMapUpToDateJoerg Bornemann2018-04-121-2/+1
| | | | | | | | This fixes a race condition where product.artifacts would contain outdated information. Change-Id: I17130a11fbce557314a0157da61c15dae2271189 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Remove most load() and store() methodsChristian Kandeler2018-02-161-6/+4
| | | | | | | | | | | | For all serializable types whose load() and store() methods simply forward these calls to their members, the methods are removed. Instead, the serialization is now done by the persistence facility itself, which detects such classes by the presence of a member template with a fixed name (using SFINAE). If the template is present, it is called, otherwise we fall back to calling load() and store() methods. Change-Id: I42dbbdd622e0ea0db28325acc506e41c472e0f0c Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Get rid of redundancies between load() and store() methodsChristian Kandeler2018-02-161-1/+7
| | | | | | | | | | It's silly that we have to mention each serializable data member in both the load and the store methods. Instead, whenever possible, forward these methods to a template that calls the right function in the persistence backend based on its parameter. Change-Id: I00e2dee8cdf55405f447cee27190bc97df8673e3 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Fix race condition when accessing the artifacts map from JavaScriptChristian Kandeler2018-02-161-1/+4
| | | | | | | | | | | | | | | JavaScript commands, which potentially read the artifacts map, can run concurrently to another rule's outputArtifacts script, which writes the data structure backing said artifacts map. Therefore, we need to synchronize the accesses to that data structure. Note: While this fixes the undefined behavior on the language level (i.e. no crashes), rule authors still need to ensure the artifacts they are interested in are present already, e.g. by using suitable input tags. Change-Id: Id50d0b926975be7b734366cae4cad9cac6ec36a6 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Re-use product, module and project script valuesChristian Kandeler2018-01-261-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These script values were set up from scratch not only for every rule, but also when creating the dependencies array. As a result, a rule traversing the dependencies of a product recursively would potentially create a huge amount of identical script values for modules appearing more than once in the dependency graph, such as the qbs module. See the benchmark data below for how the performance degraded with the size of the project. Instead, we now re-use these values, which stay valid throughout the lifetime of the script engine. For prepare scripts, that's the same as the lifetime of the executor. As a side effect, this also gives us change tracking for accesses to product and module properties via the dependencies array. These were completely unobserved before. Benchmarker result using qbs as the test project: ========== Performance data for Rule Execution ========== Old instruction count: 3265471304 New instruction count: 2733833913 Relative change: -17 % Old peak memory usage: 19023592 Bytes New peak memory usage: 19871640 Bytes Relative change: +4 % Benchmarker result using Qt Creator as the test project: ========== Performance data for Rule Execution ========== Old instruction count: 318848392341 New instruction count: 75056789023 Relative change: -77 % Old peak memory usage: 248922136 Bytes New peak memory usage: 258454408 Bytes Relative change: +3 % Change-Id: Id69062eea4dd8f9c7153599610c52bf4ea986464 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Make ProductBuildData a proper class with accessors and modifiersChristian Kandeler2018-01-231-14/+39
| | | | | | | | We will need to keep track of some mutating accesses in a follow-up change. Change-Id: I8b3c92f6cca0f5dceb35ef7559cc1357cdf38656 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Get rid of the PersistentObject classChristian Kandeler2017-12-061-3/+1
| | | | | | | | | | | | Our serialization requirements are fully served by the template mechanism; there is no need to put an inheritance-based approach on top of it. Now there is no more virtual inheritance, which allowed us to get rid of one more dynamic_cast. According to our benchmarker, build graph loading has become about 3% faster. Change-Id: If2f5080f74a0ef972a575ac2798f9d94a7f3b519 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Move the buildgraph, language and tools tests into the proper locationsJake Petroules2017-06-221-1/+1
| | | | | | | Also export necessary symbols that they need. Change-Id: I3023893a3da82cf0d86b0d08df38943db867cf3a Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Use a sorted vector rather than QSet or std::setChristian Kandeler2017-01-051-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | ========== Performance data for Resolving ========== Old instruction count: 2324724447 New instruction count: 2317712921 Relative change: -1 % Old peak memory usage: 21411584 Bytes New peak memory usage: 21070552 Bytes Relative change: -2 % ========== Performance data for Rule Execution ========== Old instruction count: 4231322611 New instruction count: 4246208129 Relative change: +0 % Old peak memory usage: 19239000 Bytes New peak memory usage: 18181072 Bytes Relative change: -6 % ========== Performance data for Null Build ========== Old instruction count: 542161499 New instruction count: 505511534 Relative change: -7 % Old peak memory usage: 13599040 Bytes New peak memory usage: 11892952 Bytes Relative change: -13 % Change-Id: I36b3dbd3fd2a4bc7503ee7779d31bd0217000785 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Change style of #includes of Qt headersJake Petroules2017-01-041-2/+2
| | | | | | | | | | | | | | | | By using q<lowercase>.h headers, we become more bootstrap-friendly, as no full syncqt is required any more. In the same go, prefix all includes with the module name. This helps grep-based analysis of which parts of Qt are used and where. It's also consistent with Qt's public headers (where syncqt enforces the style). Testdata and examples are excluded from the change, as they are not relevant for bootstrapping. Change-Id: I9539b1d795e87fca6e5fc6c91acbb775b79208d9 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Update license headersIikka Eklund2016-08-291-14/+23
| | | | | | | | | | Patch-set 1 includes *.h Every source file needs to have up-to-date license headers in order to pass ci. Change-Id: Ib6cf3ac47dfba6dff262fded44bc952aef3bda8b Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Merge remote-tracking branch 'origin/1.5'Joerg Bornemann2016-06-081-1/+1
|\ | | | | | | | | | | | | | | Conflicts: doc/reference/items/transformer.qdoc share/qbs/modules/cpp/GenericGCC.qbs Change-Id: I45560834560019b18274c373c45651eb8aadd206
| * Replace 'the Qt build suite' with 'Qbs' in copyright notices.Jake Petroules2016-06-061-1/+1
| | | | | | | | | | | | Change-Id: I885d94bb14b325dc36767a840ebdb0be1fb59dd2 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | Avoid copies of node containersJoerg Bornemann2016-05-191-1/+1
|/ | | | | | | | | We've used ArtifactSet::fromNodeSet to iterate over all artifacts in a node container. This creates a container copy. Use a filtering iterator instead. Change-Id: I368d3e4b1a259634c8cd5dbd53f372577b3ed14b Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
* update license headersJoerg Bornemann2015-03-021-2/+2
| | | | | Change-Id: I36d825db3a5ef32c162c3063aab1e8a1f2696f4f Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
* Update LicenseEike Ziller2015-01-261-6/+6
| | | | | Change-Id: I092fca9f950de1ba38826c33b155f86feae2770b Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
* License update.Eike Ziller2014-10-161-7/+8
| | | | | | | Add LGPLv3 option. Change-Id: I8a63ad5e46a2701032b2103f791df4dec5b707e8 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* fix calculation of added/removed artifactsJoerg Bornemann2014-07-171-2/+2
| | | | | | | | | | | We kept lists of added and removed artifacts in ProductBuildData. It was never quite clear when to invalidate those lists, which led to QBS-635. Instead we let the RuleNode decide which artifacts it considers as "added or removed for this rule". Task-number: QBS-635 Change-Id: I390e0ab775c695045c6e91ade3ac7326692cb314 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* speed up ResolvedProduct::lookupArtifactsByFileTagJoerg Bornemann2014-07-171-0/+2
| | | | | Change-Id: Id2f55d64dcbaf6c1b80009a13d48ed823ee213cd Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* API: Do not present all root artifacts as target artifacts.Christian Kandeler2014-04-171-1/+1
| | | | | | | | E.g. Transformer outputs are roots, but not target artifacts. Task-number: QBS-557 Change-Id: Ia2ab5567344911b0751deed465722deb182e4aaf Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Fix some sub-optimal use of the persistence facility.Christian Kandeler2014-02-211-0/+1
| | | | | | | | | | | - Commands were potentially saved twice, and so were their strings. - Strings in RescuableArtifactData objects were potentially saved twice. - Remove an unneeded include of persistence.h from a header file. - Make all PersistentObject::{load,store} methods private to make it clear that they may only be called via PersistentPool. Change-Id: I17c94201dc8bc57b89132d00f3db2ec0ae2e7922 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Serialize information about rules with changed inputs.Christian Kandeler2014-02-201-1/+0
| | | | | | | | | This was simply missing. Also amend the "trackRemoveFile" autotest so that it catches such an omission. Change-Id: Ic3187bf17337cf792bb6ccfd324635d1a43f4d82 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* support transformers with an unknown number of outputsJoerg Bornemann2014-02-131-4/+23
| | | | | | | | | | | | | | | | To support different types of nodes in the build graph, we introduce the base class BuildGraphNode. Artifact now derives from BuildGraphNode. A RuleNode class is introduced that represents a rule in the build graph. Rules are applied in the build phase and not in a pre-build phase anymore. The handling of moc has been revisited. The fixed automoc pre-build phase is no more. This is the squashed merge of a feature branch. Task-number: QBS-370 Change-Id: If27cdc51cba8c9542e4282c2caa456faa723aeff Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* rename ArtifactList to ArtifactSetJoerg Bornemann2014-01-161-2/+2
| | | | | | | Now the name reflects reality. Change-Id: I3997b99de86819c973434240103d25d6915d838b Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Move Qt profile setup into a dedicated library.Christian Kandeler2014-01-101-0/+63
Otherwise all changes to the implementation will have to be duplicated in IDEs. Change-Id: I61e6d4fa1ee9b724eb5d9de9f233dc915a6c8bc3 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>