From cae24c9404f332db0a6774640a15e1ceba56138f Mon Sep 17 00:00:00 2001 From: Ben Dean-Kawamura Date: Tue, 7 Jul 2026 15:57:49 -0400 Subject: [PATCH] Bug 2053207 - Use glean-sym for places telemetry Use glean-sym for real, rather than just for test metrics. Added support for Desktop/FOG. Removed the metrics meant to test glean-sym. Simplified `run_maintenance` now that we can record metrics in Rust. Updated chrono to `0.4.45` for compatibility with `glean` --- Cargo.lock | 186 ++++++++- DEPENDENCIES.md | 362 +++++++++--------- components/places/Cargo.toml | 15 +- components/places/android/metrics.yaml | 120 +----- .../appservices/places/PlacesConnection.kt | 27 +- .../places/PlacesConnectionTest.kt | 10 - components/places/build.rs | 26 +- components/places/metrics.yaml | 74 ++-- components/places/src/ffi.rs | 76 ++-- components/places/src/lib.rs | 2 - components/places/src/places.udl | 57 +-- components/places/src/storage/mod.rs | 23 +- examples/places-utils/src/places-utils.rs | 3 +- megazords/full/DEPENDENCIES.md | 362 +++++++++--------- .../full/android/dependency-licenses.xml | 8 - megazords/ios-rust/DEPENDENCIES.md | 1 - megazords/ios-rust/focus/DEPENDENCIES.md | 1 - 17 files changed, 649 insertions(+), 704 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4490ef3505b..6c8560bd0b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,10 +75,22 @@ dependencies = [ ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "android_log-sys" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" + +[[package]] +name = "android_logger" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037f3e1da32ddba7770530e69258b742c15ad67bdf90e5f6b35f4b6db9a60eb7" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] [[package]] name = "android_system_properties" @@ -531,11 +543,10 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -926,6 +937,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if", + "num_cpus", +] + [[package]] name = "deflate64" version = "0.1.9" @@ -1779,18 +1800,58 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "glean" +version = "69.0.0" +source = "git+https://github.com/mozilla/glean?branch=main#4f042b2da6b8f20990e85f1cd41a9e7cef572dbd" +dependencies = [ + "crossbeam-channel", + "glean-core", + "inherent", + "log", + "once_cell", + "whatsys", + "wr_malloc_size_of", +] + [[package]] name = "glean-build" -version = "20.0.0" -source = "git+https://github.com/mozilla/glean?tag=v68.0.0#3b00f26c4814a47044c6736563ee7589dfa3b399" +version = "20.1.0" +source = "git+https://github.com/mozilla/glean?branch=main#4f042b2da6b8f20990e85f1cd41a9e7cef572dbd" dependencies = [ "xshell-venv", ] +[[package]] +name = "glean-core" +version = "69.0.0" +source = "git+https://github.com/mozilla/glean?branch=main#4f042b2da6b8f20990e85f1cd41a9e7cef572dbd" +dependencies = [ + "android_logger", + "bincode", + "chrono", + "crossbeam-channel", + "flate2", + "log", + "malloc_size_of_derive", + "once_cell", + "oslog", + "rkv", + "rmp-serde", + "rusqlite", + "serde", + "serde_json", + "thiserror 2.0.3", + "uniffi", + "uuid", + "wr_malloc_size_of", + "zeitstempel", +] + [[package]] name = "glean-sym" -version = "0.1.0" -source = "git+https://github.com/mozilla/glean?tag=v68.0.0#3b00f26c4814a47044c6736563ee7589dfa3b399" +version = "69.0.0" +source = "git+https://github.com/mozilla/glean?branch=main#4f042b2da6b8f20990e85f1cd41a9e7cef572dbd" dependencies = [ "libloading", "once_cell", @@ -2243,6 +2304,17 @@ dependencies = [ "web-time", ] +[[package]] +name = "inherent" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "init_rust_components" version = "0.1.0" @@ -2571,6 +2643,17 @@ dependencies = [ "libc", ] +[[package]] +name = "malloc_size_of_derive" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f44db74bde26fdf427af23f1d146c211aed857c59e3be750cf2617f6b0b05c94" +dependencies = [ + "proc-macro2", + "syn 2.0.106", + "synstructure", +] + [[package]] name = "matchit" version = "0.7.0" @@ -3090,7 +3173,7 @@ dependencies = [ "serde", "serde_derive", "thiserror 2.0.3", - "toml 0.5.9", + "toml 0.9.6", ] [[package]] @@ -3180,6 +3263,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "oslog" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8343ce955f18e7e68c0207dd0ea776ec453035685395ababd2ea651c569728b3" +dependencies = [ + "cc", + "dashmap", + "log", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -3203,6 +3297,12 @@ dependencies = [ "windows-sys 0.36.1", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "payload-support" version = "0.1.0" @@ -3274,6 +3374,7 @@ dependencies = [ "bitflags 1.3.2", "dogear", "error-support", + "glean", "glean-build", "glean-sym", "icu_casemap", @@ -3724,12 +3825,35 @@ dependencies = [ "id-arena", "lazy_static", "log", + "malloc_size_of_derive", "ordered-float", "serde", "serde_derive", "thiserror 2.0.3", "url", "uuid", + "wr_malloc_size_of", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f81bee8c8ef9b577d1681a70ebbc962c232461e397b22c208c43c04b67a155" +dependencies = [ + "rmp", + "serde", ] [[package]] @@ -5335,6 +5459,17 @@ dependencies = [ "nom", ] +[[package]] +name = "whatsys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "192bcd2925a9791ba474bc673938f8c59b8978b3f304ef2c50672156bacf943b" +dependencies = [ + "cc", + "cfg-if", + "libc", +] + [[package]] name = "whoami" version = "1.5.0" @@ -5388,9 +5523,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" @@ -5649,6 +5784,15 @@ dependencies = [ "bitflags 2.11.0", ] +[[package]] +name = "wr_malloc_size_of" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "482308b684f11723b200a32808094bb460b5ac4840903ccbcb78ad92a6354a1f" +dependencies = [ + "once_cell", +] + [[package]] name = "writeable" version = "0.6.1" @@ -5718,9 +5862,9 @@ checksum = "32ac00cd3f8ec9c1d33fb3e7958a82df6989c42d747bd326c822b1d625283547" [[package]] name = "xshell-venv" -version = "1.4.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce3f9ddca75ddede32d5cc5a154fa237f4209ad71e6e2fc3db3ed18667d606b" +checksum = "b02ebe4a3558b86c64aeab700c924b08613020fca9c94d5f2cd412691b6c00bd" dependencies = [ "xshell", ] @@ -5767,6 +5911,18 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeitstempel" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7082d20989e6410d2d1c304c8b73fb66aa2c8f68a169b94bf31d340e85b3a4f" +dependencies = [ + "cfg-if", + "libc", + "once_cell", + "winapi", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 005430c89c9..58f5beb5ea4 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -451,7 +451,6 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice ## Apache License 2.0 The following text applies to code linked from these dependencies: -[android-tzdata](https://github.com/RumovZ/android-tzdata), [android_system_properties](https://github.com/nical/android_system_properties), [anyhow](https://github.com/dtolnay/anyhow), [askama](https://github.com/askama-rs/askama), @@ -577,7 +576,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), @@ -599,193 +597,193 @@ The following text applies to code linked from these dependencies: [xshell](https://github.com/matklad/xshell) ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. Copyright [yyyy] [name of copyright owner] @@ -793,7 +791,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/components/places/Cargo.toml b/components/places/Cargo.toml index 76341ae2da1..399bde71db0 100644 --- a/components/places/Cargo.toml +++ b/components/places/Cargo.toml @@ -7,9 +7,9 @@ license = "MPL-2.0" exclude = ["/android", "/ios"] [features] -default = ["glean-sym"] -# Enable metric recording through glean-sym (Android only) -glean-sym = ["dep:glean-sym"] +# Use Firefox-on-Glean to publish metrics (Desktop) +# Note: if set, we will not use `glean-sym` +glean-fog = ["dep:glean"] [dependencies] sync15 = { path = "../sync15" } @@ -34,16 +34,15 @@ sync-guid = { path = "../support/guid", features = ["rusqlite_support", "random" thiserror = "2" anyhow = "1.0" uniffi = { version = "0.31" } - -# glean-sym is only used on Android and iOS. -[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies] -glean-sym = { git = "https://github.com/mozilla/glean", tag = "v68.0.0", optional = true } +glean = { git = "https://github.com/mozilla/glean", branch = "main", optional = true } +glean-sym = { git = "https://github.com/mozilla/glean", branch = "main" } [dev-dependencies] error-support = { path = "../support/error", features = ["testing"] } tempfile = "3.1" sql-support = { path = "../support/sql" } +glean-sym = { git = "https://github.com/mozilla/glean", branch = "main", features = ["noop"] } [build-dependencies] uniffi = { version = "0.31", features=["build"]} -glean-build = { git = "https://github.com/mozilla/glean", tag = "v68.0.0" } +glean-build = { git = "https://github.com/mozilla/glean", branch = "main" } diff --git a/components/places/android/metrics.yaml b/components/places/android/metrics.yaml index 19000ce431f..df443a88c71 100644 --- a/components/places/android/metrics.yaml +++ b/components/places/android/metrics.yaml @@ -2,124 +2,8 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -# This file defines the metrics that will be gathered for the "places" -# storage component. -# These are emitted for all users of the component. Additional metrics -# specific to the *syncing* of places are defined in a separate "sync_ping" -# package. -# -# Changes to these metrics require data review, which should take into -# consideration -# the following known consumers of the places component Android bindings: -# -# * Fenix for Android +# This file defines the metrics that are recorded by android for the places component. +# It's no longer used, but we still need to keep it around for probe-scraper reasons. --- $schema: moz://mozilla.org/schemas/glean/metrics/2-0-0 - -places_manager: - run_maintenance_time: - type: timing_distribution - description: Time taken to execute `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5115 - data_reviews: - - https://github.com/mozilla/application-services/issues/5122 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_prune_time: - type: timing_distribution - description: Time taken to execute `prune_older_visits()` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_vacuum_time: - type: timing_distribution - description: Time taken to execute `VACUUM` inside `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_optimize_time: - type: timing_distribution - description: Time taken to execute `PRAGMA optimize` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_chk_pnt_time: - type: timing_distribution - description: Time taken to execute `PRAGMA_CHECKPOINT` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - db_size_after_maintenance: - type: memory_distribution - description: > - Size of the db after executing `run_maintenance()` - memory_unit: kilobyte - bugs: - - https://github.com/mozilla/application-services/issues/5115 - data_reviews: - - https://github.com/mozilla/application-services/issues/5122 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical diff --git a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt index 71b10bb1f42..d6c9e5d5f04 100644 --- a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt +++ b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt @@ -22,6 +22,7 @@ import mozilla.appservices.places.uniffi.InsertableBookmarkItem import mozilla.appservices.places.uniffi.InsertableBookmarkSeparator import mozilla.appservices.places.uniffi.NoteHistoryMetadataObservationOptions import mozilla.appservices.places.uniffi.PlacesApiException +import mozilla.appservices.places.uniffi.RunMaintenanceOptions import mozilla.appservices.places.uniffi.SearchResult import mozilla.appservices.places.uniffi.SqlInterruptHandle import mozilla.appservices.places.uniffi.TopFrecentSiteInfo @@ -34,7 +35,6 @@ import mozilla.telemetry.glean.private.LabeledMetricType import java.lang.ref.WeakReference import mozilla.appservices.places.uniffi.PlacesApi as UniffiPlacesApi import mozilla.appservices.places.uniffi.PlacesConnection as UniffiPlacesConnection -import org.mozilla.appservices.places.GleanMetrics.PlacesManager as PlacesManagerMetrics typealias Url = String typealias Guid = String @@ -284,25 +284,12 @@ class PlacesWriterConnection internal constructor(conn: UniffiPlacesConnection, @Suppress("MagicNumber") override fun runMaintenance(dbSizeLimit: UInt) { - val pruneMetrics = PlacesManagerMetrics.runMaintenanceTime.measure { - val pruneMetrics = PlacesManagerMetrics.runMaintenancePruneTime.measure { - this.conn.runMaintenancePrune(dbSizeLimit, 12U) - } - - PlacesManagerMetrics.runMaintenanceVacuumTime.measure { - this.conn.runMaintenanceVacuum() - } - - PlacesManagerMetrics.runMaintenanceOptimizeTime.measure { - this.conn.runMaintenanceOptimize() - } - - PlacesManagerMetrics.runMaintenanceChkPntTime.measure { - this.conn.runMaintenanceCheckpoint() - } - pruneMetrics - } - PlacesManagerMetrics.dbSizeAfterMaintenance.accumulateSamples(listOf(pruneMetrics.dbSizeAfter.toLong() / 1024)) + this.conn.runMaintenance( + RunMaintenanceOptions( + dbSizeLimit = dbSizeLimit, + pruneLimit = 12U, + ), + ) } override fun deleteEverything() { diff --git a/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt b/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt index 3eedf5c5bcd..fc23e8a7ea5 100644 --- a/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt +++ b/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt @@ -34,7 +34,6 @@ import org.junit.rules.TemporaryFolder import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.mozilla.appservices.places.GleanMetrics.PlacesManager as PlacesManagerMetrics @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE) @@ -624,15 +623,6 @@ class PlacesConnectionTest { } } - @Test - fun testRunMaintenanceMetrics() { - assertNull(PlacesManagerMetrics.runMaintenanceTime.testGetValue()) - assertNull(PlacesManagerMetrics.dbSizeAfterMaintenance.testGetValue()) - db.runMaintenance() - assertEquals(1, PlacesManagerMetrics.runMaintenanceTime.testGetValue()!!.values.values.sum()) - assertEquals(1, PlacesManagerMetrics.dbSizeAfterMaintenance.testGetValue()!!.values.values.sum()) - } - @Test fun testRegisterWithSyncmanager() { val syncManager = SyncManager() diff --git a/components/places/build.rs b/components/places/build.rs index 8f231c5e764..3a29758ef0e 100644 --- a/components/places/build.rs +++ b/components/places/build.rs @@ -2,19 +2,21 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use glean_build::Builder; - fn main() { uniffi::generate_scaffolding("./src/places.udl").unwrap(); + build_metrics(); +} + +fn build_metrics() { + let format = if cfg!(feature = "glean-fog") { + "rust" + } else { + "rust_sym" + }; - if let Ok("android" | "ios") = std::env::var("CARGO_CFG_TARGET_OS") - .as_ref() - .map(String::as_str) - { - Builder::default() - .file("metrics.yaml") - .format("rust_sym") - .generate() - .expect("Error generating Glean Rust bindings"); - } + glean_build::Builder::default() + .file("metrics.yaml") + .format(format) + .generate() + .expect("Error generating Glean Rust bindings"); } diff --git a/components/places/metrics.yaml b/components/places/metrics.yaml index 7bae8dc2242..6453363129f 100644 --- a/components/places/metrics.yaml +++ b/components/places/metrics.yaml @@ -6,109 +6,109 @@ $schema: moz://mozilla.org/schemas/glean/metrics/2-0-0 places_manager: - connection_initialized: - type: counter - description: | - Number of times a `PlacesConnection` was initialized. + run_maintenance_time: + type: timing_distribution + description: Time taken to execute `run_maintenance()` + time_unit: millisecond bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 + - https://github.com/mozilla/application-services/issues/5115 data_reviews: - - https://github.com/mozilla/application-services/pull/7336 + - https://github.com/mozilla/application-services/issues/5122 + - https://github.com/mozilla/application-services/issues/5387 + - https://github.com/mozilla/application-services/issues/5830 notification_emails: - - jrediger@mozilla.com - expires: 2026-11-13 + - synced-client-integrations@mozilla.com + - bdk@mozilla.com + expires: "never" data_sensitivity: - technical - run_maintenance_prune_time_temp: + run_maintenance_prune_time: type: timing_distribution description: | Time taken to execute `prune_older_visits()` inside `run_maintenance()` - - Duplication of `run_maintenance_prune_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical - no_lint: [COMMON_PREFIX] - run_maintenance_vacuum_time_temp: + run_maintenance_vacuum_time: type: timing_distribution description: | Time taken to execute `VACUUM` inside `run_maintenance()` - - Duplication of `run_maintenance_vacuum_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical - run_maintenance_optimize_time_temp: + run_maintenance_optimize_time: type: timing_distribution description: | Time taken to execute `PRAGMA optimize` inside `run_maintenance()` - - Duplication of `run_maintenance_optimize_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical - run_maintenance_chk_pnt_time_temp: + run_maintenance_chk_pnt_time: type: timing_distribution description: | Time taken to execute `PRAGMA_CHECKPOINT` inside `run_maintenance()` - - Duplication of `run_maintenance_chk_pnt_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" + data_sensitivity: + - technical + + db_size_after_maintenance: + type: memory_distribution + description: > + Size of the db after executing `run_maintenance()` + memory_unit: kilobyte + bugs: + - https://github.com/mozilla/application-services/issues/5115 + data_reviews: + - https://github.com/mozilla/application-services/issues/5122 + - https://github.com/mozilla/application-services/issues/5387 + - https://github.com/mozilla/application-services/issues/5830 + notification_emails: + - synced-client-integrations@mozilla.com + - bdk@mozilla.com + expires: "never" data_sensitivity: - technical diff --git a/components/places/src/ffi.rs b/components/places/src/ffi.rs index 6ae96e54119..c8af72ca0de 100644 --- a/components/places/src/ffi.rs +++ b/components/places/src/ffi.rs @@ -8,8 +8,7 @@ use crate::api::matcher::{self, search_frecent, SearchParams}; pub use crate::api::places_api::places_api_new; pub use crate::error::{warn, Result}; pub use crate::error::{ApiResult, PlacesApiError}; -#[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] -use crate::glean_metrics::places_manager; +use crate::glean_metrics; pub use crate::import::common::HistoryMigrationResult; use crate::import::import_ios_history; use crate::storage; @@ -20,7 +19,6 @@ pub use crate::storage::history_metadata::{ HistoryMetadataObservation, HistoryMetadataPageMissingBehavior, NoteHistoryMetadataObservationOptions, }; -pub use crate::storage::RunMaintenanceMetrics; use crate::storage::{history, history_metadata}; use crate::types::VisitTransitionSet; use crate::ConnectionType; @@ -113,9 +111,6 @@ pub struct PlacesConnection { impl PlacesConnection { pub fn new(db: PlacesDb) -> Self { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::connection_initialized.add(1); - Self { interrupt_handle: db.new_interrupt_handle(), db: Mutex::new(db), @@ -384,55 +379,45 @@ impl PlacesConnection { } #[handle_error(crate::Error)] - pub fn run_maintenance_prune( - &self, - db_size_limit: u32, - prune_limit: u32, - ) -> ApiResult { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_prune_time_temp.start(); - let res = - self.with_conn(|conn| storage::run_maintenance_prune(conn, db_size_limit, prune_limit)); + pub fn run_maintenance(&self, options: RunMaintenanceOptions) -> ApiResult<()> { + let timer_id = glean_metrics::places_manager::run_maintenance_time.start(); + + self.run_maintenance_prune(options.db_size_limit, options.prune_limit)?; + self.run_maintenance_vacuum()?; + self.run_maintenance_optimize()?; + self.run_maintenance_checkpoint()?; + + glean_metrics::places_manager::run_maintenance_time.stop_and_accumulate(timer_id); - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_prune_time_temp.stop_and_accumulate(timer_id); + Ok(()) + } + fn run_maintenance_prune(&self, db_size_limit: u32, prune_limit: u32) -> Result<()> { + let timer_id = glean_metrics::places_manager::run_maintenance_prune_time.start(); + let res = + self.with_conn(|conn| storage::run_maintenance_prune(conn, db_size_limit, prune_limit)); + glean_metrics::places_manager::run_maintenance_prune_time.stop_and_accumulate(timer_id); res } - #[handle_error(crate::Error)] - pub fn run_maintenance_vacuum(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_vacuum_time_temp.start(); + fn run_maintenance_vacuum(&self) -> Result<()> { + let timer_id = glean_metrics::places_manager::run_maintenance_vacuum_time.start(); let res = self.with_conn(storage::run_maintenance_vacuum); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_vacuum_time_temp.stop_and_accumulate(timer_id); - + glean_metrics::places_manager::run_maintenance_vacuum_time.stop_and_accumulate(timer_id); res } - #[handle_error(crate::Error)] - pub fn run_maintenance_optimize(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_optimize_time_temp.start(); - let res = self.with_conn(storage::run_maintenance_optimize); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_optimize_time_temp.stop_and_accumulate(timer_id); - - res + fn run_maintenance_optimize(&self) -> Result<()> { + let timer_id = glean_metrics::places_manager::run_maintenance_optimize_time.start(); + self.with_conn(storage::run_maintenance_optimize)?; + glean_metrics::places_manager::run_maintenance_optimize_time.stop_and_accumulate(timer_id); + Ok(()) } - #[handle_error(crate::Error)] - pub fn run_maintenance_checkpoint(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_chk_pnt_time_temp.start(); + fn run_maintenance_checkpoint(&self) -> Result<()> { + let timer_id = glean_metrics::places_manager::run_maintenance_chk_pnt_time.start(); let res = self.with_conn(storage::run_maintenance_checkpoint); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_chk_pnt_time_temp.stop_and_accumulate(timer_id); - + glean_metrics::places_manager::run_maintenance_chk_pnt_time.stop_and_accumulate(timer_id); res } @@ -623,6 +608,11 @@ pub struct Dummy { pub md: Option>, } +pub struct RunMaintenanceOptions { + pub db_size_limit: u32, + pub prune_limit: u32, +} + #[cfg(test)] mod tests { use super::*; diff --git a/components/places/src/lib.rs b/components/places/src/lib.rs index 2dc04234337..eb8ed19abb0 100644 --- a/components/places/src/lib.rs +++ b/components/places/src/lib.rs @@ -38,8 +38,6 @@ pub use crate::types::*; pub use ffi::*; -#[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] -#[allow(clippy::all)] // Don't lint generated code. pub mod glean_metrics { include!(concat!(env!("OUT_DIR"), "/glean_metrics.rs")); } diff --git a/components/places/src/places.udl b/components/places/src/places.udl index dff00c40ac1..68557c0b2c2 100644 --- a/components/places/src/places.udl +++ b/components/places/src/places.udl @@ -123,46 +123,11 @@ interface PlacesConnection { [Throws=PlacesApiError] void delete_everything_history(); - /// Run maintenance on the places DB (prune step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - /// - /// db_size_limit is the approximate storage limit in bytes. If the database is using more space - /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. - /// - /// prune_limit is the maximum number of visits to prune if the database is over db_size_limit - [Throws=PlacesApiError] - RunMaintenanceMetrics run_maintenance_prune(u32 db_size_limit, u32 prune_limit); - - /// Run maintenance on the places DB (vacuum step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - [Throws=PlacesApiError] - void run_maintenance_vacuum(); - - /// Run maintenance on the places DB (optimize step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - [Throws=PlacesApiError] - void run_maintenance_optimize(); - - /// Run maintenance on the places DB (checkpoint step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). + // Run maintenance on the places DB (prune step) + // + // This is intended to be run during idle time and will take steps / to clean up / shrink the database. [Throws=PlacesApiError] - void run_maintenance_checkpoint(); + void run_maintenance(RunMaintenanceOptions options); [Throws=PlacesApiError] BookmarkItem? bookmarks_get_tree([ByRef] Guid item_guid); @@ -218,12 +183,6 @@ enum FrecencyThresholdOption { "SkipOneTimePages", }; -dictionary RunMaintenanceMetrics { - boolean pruned_visits; - u32 db_size_before; - u32 db_size_after; -}; - dictionary SearchResult { Url url; string title; @@ -455,3 +414,11 @@ interface InsertableBookmarkItem { Folder(InsertableBookmarkFolder f); Separator(InsertableBookmarkSeparator s); }; + +dictionary RunMaintenanceOptions { + /// db_size_limit is the approximate storage limit in bytes. If the database is using more space + /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. + u32 db_size_limit; + /// Maximum number of visits to prune in one pass + u32 prune_limit = 12; +}; diff --git a/components/places/src/storage/mod.rs b/components/places/src/storage/mod.rs index 8a97e4f2602..221f80d64b9 100644 --- a/components/places/src/storage/mod.rs +++ b/components/places/src/storage/mod.rs @@ -15,6 +15,7 @@ use crate::error::{warn, Error, InvalidPlaceInfo, Result}; use crate::ffi::HistoryVisitInfo; use crate::ffi::TopFrecentSiteInfo; use crate::frecency::{calculate_frecency, DEFAULT_FRECENCY_SETTINGS}; +use crate::glean_metrics; use crate::types::{SyncStatus, UnknownFields, VisitType}; use interrupt_support::SqlInterruptScope; use rusqlite::types::{FromSql, FromSqlResult, ToSql, ToSqlOutput, ValueRef}; @@ -229,13 +230,6 @@ impl TopFrecentSiteInfo { } } -#[derive(Debug)] -pub struct RunMaintenanceMetrics { - pub pruned_visits: bool, - pub db_size_before: u32, - pub db_size_after: u32, -} - /// Run maintenance on the places DB (prune step) /// /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps @@ -247,22 +241,15 @@ pub struct RunMaintenanceMetrics { /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. /// /// prune_limit is the maximum number of visits to prune if the database is over db_size_limit -pub fn run_maintenance_prune( - conn: &PlacesDb, - db_size_limit: u32, - prune_limit: u32, -) -> Result { +pub fn run_maintenance_prune(conn: &PlacesDb, db_size_limit: u32, prune_limit: u32) -> Result<()> { let db_size_before = conn.get_db_size()?; let should_prune = db_size_limit > 0 && db_size_before > db_size_limit; if should_prune { history::prune_older_visits(conn, prune_limit)?; } - let db_size_after = conn.get_db_size()?; - Ok(RunMaintenanceMetrics { - pruned_visits: should_prune, - db_size_before, - db_size_after, - }) + glean_metrics::places_manager::db_size_after_maintenance + .accumulate((conn.get_db_size()? / 1024) as i64); + Ok(()) } /// Run maintenance on the places DB (vacuum step) diff --git a/examples/places-utils/src/places-utils.rs b/examples/places-utils/src/places-utils.rs index 6141ba72f29..d04105d6193 100644 --- a/examples/places-utils/src/places-utils.rs +++ b/examples/places-utils/src/places-utils.rs @@ -170,12 +170,11 @@ fn run_native_export(db: &PlacesDb, filename: String) -> Result<()> { fn run_maintenance(conn: &PlacesDb, db_size_limit: u32, count: u32) -> Result<()> { for _ in 0..count { - let prune_metrics = places::storage::run_maintenance_prune(conn, db_size_limit, 6)?; + places::storage::run_maintenance_prune(conn, db_size_limit, 6)?; places::storage::run_maintenance_vacuum(conn)?; places::storage::run_maintenance_optimize(conn)?; places::storage::run_maintenance_checkpoint(conn)?; println!("Maintenance complete"); - println!("Prune metrics: {prune_metrics:?}"); } Ok(()) } diff --git a/megazords/full/DEPENDENCIES.md b/megazords/full/DEPENDENCIES.md index b569717c485..6136aaa4fce 100644 --- a/megazords/full/DEPENDENCIES.md +++ b/megazords/full/DEPENDENCIES.md @@ -438,7 +438,6 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice ## Apache License 2.0 The following text applies to code linked from these dependencies: -[android-tzdata](https://github.com/RumovZ/android-tzdata), [android_system_properties](https://github.com/nical/android_system_properties), [anyhow](https://github.com/dtolnay/anyhow), [askama](https://github.com/askama-rs/askama), @@ -541,7 +540,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), @@ -561,193 +559,193 @@ The following text applies to code linked from these dependencies: [xshell](https://github.com/matklad/xshell) ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. Copyright [yyyy] [name of copyright owner] @@ -755,7 +753,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/megazords/full/android/dependency-licenses.xml b/megazords/full/android/dependency-licenses.xml index 6dc0de05db4..be5857c63b8 100644 --- a/megazords/full/android/dependency-licenses.xml +++ b/megazords/full/android/dependency-licenses.xml @@ -72,10 +72,6 @@ the details of which are reproduced below. Mozilla Public License 2.0: uniffi_udl https://github.com/mozilla/uniffi-rs/blob/main/LICENSE - - Apache License 2.0: android-tzdata - https://github.com/RumovZ/android-tzdata/blob/main/LICENSE-APACHE - Apache License 2.0: android_system_properties https://github.com/nical/android_system_properties/blob/main/LICENSE-APACHE @@ -484,10 +480,6 @@ the details of which are reproduced below. Apache License 2.0: thread_local https://github.com/Amanieu/thread_local-rs/blob/master/LICENSE-APACHE - - Apache License 2.0: toml - https://github.com/alexcrichton/toml-rs/blob/master/LICENSE-APACHE - Apache License 2.0: toml https://github.com/toml-rs/toml/blob/main/LICENSE-APACHE diff --git a/megazords/ios-rust/DEPENDENCIES.md b/megazords/ios-rust/DEPENDENCIES.md index 8fac43660a6..f115d320a79 100644 --- a/megazords/ios-rust/DEPENDENCIES.md +++ b/megazords/ios-rust/DEPENDENCIES.md @@ -563,7 +563,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), diff --git a/megazords/ios-rust/focus/DEPENDENCIES.md b/megazords/ios-rust/focus/DEPENDENCIES.md index e493fd77c51..2fc71598ba4 100644 --- a/megazords/ios-rust/focus/DEPENDENCIES.md +++ b/megazords/ios-rust/focus/DEPENDENCIES.md @@ -546,7 +546,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml),