diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b250df91e..7bd4b89dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,6 +8,10 @@ on: - '[0-9]+.[0-9]+.[0-9]+*' pull_request: +env: + PIP_CACHE_DIR: ~/.cache/pip + LIBCLANG_PATH_WIN: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/Llvm/x64/bin" + jobs: backend_bench: @@ -49,11 +53,11 @@ jobs: shell: bash run: | if [ "$RUNNER_OS" == "Linux" ]; then - sudo apt-get install -y capnproto git-lfs libudev-dev + sudo apt-get install -y capnproto libudev-dev elif [ "$RUNNER_OS" == "macOS" ]; then - brew install capnp git-lfs + brew install capnp llvm elif [ "$RUNNER_OS" == "Windows" ]; then - choco install -y capnproto git-lfs + choco install -y capnproto fi - name: Pull Git LFS objects @@ -76,19 +80,36 @@ jobs: activate-environment: console_pp environment-file: conda.yml + - name: Cache pip + uses: actions/cache@v2 + with: + path: ${{ env.PIP_CACHE_DIR }} + key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Run Pip Install run: | cargo make pip-install-dev + + - name: Run Backend Benchmarks (Windows) + env: + LIBCLANG_PATH: ${{ env.LIBCLANG_PATH_WIN }} + run: | + cargo make backend-benches + if: matrix.os == 'windows-2019' - name: Run Backend Benchmarks run: | cargo make backend-benches + if: matrix.os != 'windows-2019' checks: name: Code Quality Checks - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: @@ -133,6 +154,15 @@ jobs: cargo make poetry-export git diff --exit-code + - name: Cache pip + uses: actions/cache@v2 + with: + path: ${{ env.PIP_CACHE_DIR }} + key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Run Pip Install run: | cargo make pip-install-dev @@ -199,7 +229,7 @@ jobs: sudo apt-get install -y capnproto libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-util1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 ruby ruby-dev rubygems build-essential libudev-dev sudo gem install --no-document fpm elif [ "$RUNNER_OS" == "macOS" ]; then - brew install capnp + brew install capnp llvm elif [ "$RUNNER_OS" == "Windows" ]; then choco install capnproto nsis fi @@ -220,16 +250,32 @@ jobs: activate-environment: console_pp environment-file: conda.yml + - name: Cache pip + uses: actions/cache@v2 + with: + path: ${{ env.PIP_CACHE_DIR }} + key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + - name: Run Pip Install run: | cargo make pip-install-dev - name: Build ${{ runner.os }} Binaries. env: - OS_NAME: ${{ runner.os }} + LIBCLANG_PATH: ${{ env.LIBCLANG_PATH_WIN }} + run: | + cargo make prod-installer + if: matrix.os == 'windows-2019' + + - name: Build ${{ runner.os }} Binaries. shell: bash run: | cargo make prod-installer + if: matrix.os != 'windows-2019' + - name: Pull Git LFS objects run: git lfs pull env: diff --git a/Cargo.lock b/Cargo.lock index 089440a13..e847b8ba2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,6 +30,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -50,7 +59,7 @@ checksum = "d6b2dc5ca98de4e3a4221a11ee306374cbc449e4afb9e63669696fc4cce4530d" dependencies = [ "async_logger", "log", - "time 0.2.25", + "time 0.2.26", ] [[package]] @@ -76,6 +85,29 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +[[package]] +name = "bindgen" +version = "0.58.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "clap", + "env_logger", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] + [[package]] name = "bitflags" version = "1.2.1" @@ -114,9 +146,9 @@ checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" [[package]] name = "byteorder" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" @@ -126,24 +158,24 @@ checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" [[package]] name = "capnp" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee33f13b9419d35f9ae6e0ee2e5ef6bd059a4d0da2fda16a88ddaf57dfe9acca" +checksum = "ed9ccceaeeb86670017acc4ee196ebecf4c2e322e7e5c13d4aca0b205ef7d14f" [[package]] name = "capnpc" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c50eb1605fb64e5cbf9a22c244ea4136516f1aa38ee8e2c8f94a080370521e" +checksum = "50c8a9d317b4818641686784227e08ee161d0dbd0c2a06f0355f107df263f549" dependencies = [ "capnp", ] [[package]] name = "cast" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" +checksum = "cc38c385bfd7e444464011bb24820f40dd1c76bcdfa1b78611cb7c2e5cafab75" dependencies = [ "rustc_version", ] @@ -154,6 +186,15 @@ version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +dependencies = [ + "nom 5.1.2", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -176,19 +217,43 @@ dependencies = [ "num-integer", "num-traits", "serde", - "time 0.1.44", + "time 0.1.43", "winapi", ] +[[package]] +name = "clang-sys" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ + "ansi_term", + "atty", "bitflags", + "strsim", "textwrap", "unicode-width", + "vec_map", +] + +[[package]] +name = "cmake" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855" +dependencies = [ + "cc", ] [[package]] @@ -208,7 +273,7 @@ dependencies = [ "logtest", "ndarray", "ordered-float", - "paste", + "paste 1.0.5", "pyo3", "sbp", "serde", @@ -221,9 +286,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" +checksum = "402da840495de3f976eaefc3485b7f5eb5b0bf9761f9a47be27fe975b3b8c2ec" [[package]] name = "core-foundation-sys" @@ -275,9 +340,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -296,12 +361,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" dependencies = [ "cfg-if 1.0.0", - "const_fn", "crossbeam-utils", "lazy_static", "memoffset", @@ -310,9 +374,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" dependencies = [ "autocfg", "cfg-if 1.0.0", @@ -321,9 +385,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d58633299b24b515ac72a3f869f8b91306a3cec616a602843a383acd6f9e97" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" dependencies = [ "bstr", "csv-core", @@ -343,9 +407,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.18" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bcb9d7dcbf7002aaffbb53eac22906b64cdcc127971dcc387d8eb7c95d5560" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" dependencies = [ "quote", "syn", @@ -378,6 +442,19 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "env_logger" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "funty" version = "1.1.0" @@ -436,12 +513,32 @@ dependencies = [ "libc", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "indoc" -version = "1.0.3" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" +dependencies = [ + "indoc-impl", + "proc-macro-hack", +] + +[[package]] +name = "indoc-impl" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a75aeaaef0ce18b58056d306c27b07436fbb34b8816c53094b76dd81803136" +checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", "unindent", ] @@ -502,9 +599,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "js-sys" -version = "0.3.47" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" dependencies = [ "wasm-bindgen", ] @@ -515,24 +612,40 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lexical-core" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" dependencies = [ "arrayvec", "bitflags", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "ryu", "static_assertions", ] [[package]] name = "libc" -version = "0.2.87" +version = "0.2.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" + +[[package]] +name = "libloading" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265d751d31d6780a3f956bb5b8022feba2d94eeee5a84ba64f4212eedca42213" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] [[package]] name = "libudev" @@ -556,9 +669,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176" dependencies = [ "scopeguard", ] @@ -618,9 +731,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ "autocfg", ] @@ -651,6 +764,16 @@ dependencies = [ "void", ] +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + [[package]] name = "nom" version = "6.1.2" @@ -725,9 +848,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "ordered-float" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dacdec97876ef3ede8c50efc429220641a0b11ba0048b4b0c357bccbc47c5204" +checksum = "766f840da25490628d8e63e529cd21c014f6600c6b8517add12a6fa6167a6218" dependencies = [ "num-traits", ] @@ -745,23 +868,48 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" +checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.1.57", + "redox_syscall", "smallvec", "winapi", ] [[package]] name = "paste" -version = "1.0.4" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" +dependencies = [ + "paste-impl", + "proc-macro-hack", +] + +[[package]] +name = "paste" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1" +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" + +[[package]] +name = "paste-impl" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" +dependencies = [ + "proc-macro-hack", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pkg-config" @@ -811,18 +959,18 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" dependencies = [ "unicode-xid", ] [[package]] name = "pyo3" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ca634cf3acd58a599b535ed6cb188223298977d471d146121792bfa23b754c" +checksum = "4837b8e8e18a102c23f79d1e9a110b597ea3b684c95e874eb1ad88f8683109c3" dependencies = [ "cfg-if 1.0.0", "ctor", @@ -830,16 +978,16 @@ dependencies = [ "inventory", "libc", "parking_lot", - "paste", + "paste 0.1.18", "pyo3-macros", "unindent", ] [[package]] name = "pyo3-macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483ac516dbda6789a5b4be0271e7a31b9ad4ec8c0a5955050e8076f72bdbef8f" +checksum = "a47f2c300ceec3e58064fd5f8f5b61230f2ffd64bde4970c81fdd0563a2db1bb" dependencies = [ "pyo3-macros-backend", "quote", @@ -848,9 +996,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15230cabcda008f03565ed8bac40f094cbb5ee1b46e6551f1ec3a0e922cf7df9" +checksum = "87b097e5d84fcbe3e167f400fbedd657820a375b034c78bd852050749a575d66" dependencies = [ "proc-macro2", "quote", @@ -859,9 +1007,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ "proc-macro2", ] @@ -945,29 +1093,22 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_syscall" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.4.3" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -981,9 +1122,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548" [[package]] name = "remove_dir_all" @@ -994,6 +1135,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.2.3" @@ -1020,15 +1167,16 @@ dependencies = [ [[package]] name = "sbp" -version = "3.4.5" -source = "git+https://github.com/swift-nav/libsbp.git?rev=0563350bb387e4a966a2b558adb7b05b2baf005f#0563350bb387e4a966a2b558adb7b05b2baf005f" +version = "3.4.7-alpha" +source = "git+https://github.com/swift-nav/libsbp.git?rev=983e98b17b89dc2c688ef201703978535c6b86af#983e98b17b89dc2c688ef201703978535c6b86af" dependencies = [ "byteorder", "bytes", "crc16", "dencode", "log", - "nom", + "nom 6.1.2", + "swiftnav-rs", "thiserror", ] @@ -1055,9 +1203,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.123" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" dependencies = [ "serde_derive", ] @@ -1074,9 +1222,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.123" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" dependencies = [ "proc-macro2", "quote", @@ -1085,9 +1233,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.62" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" dependencies = [ "itoa", "ryu", @@ -1117,6 +1265,12 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +[[package]] +name = "shlex" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d" + [[package]] name = "smallvec" version = "1.6.1" @@ -1187,6 +1341,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strum" version = "0.20.0" @@ -1205,11 +1365,20 @@ dependencies = [ "syn", ] +[[package]] +name = "swiftnav-rs" +version = "0.4.0" +source = "git+https://github.com/swift-nav/swiftnav-rs?branch=steve/sbp#d9ec3767ab120d8d75bb3b04a887dce5bf73c1ee" +dependencies = [ + "bindgen", + "cmake", +] + [[package]] name = "syn" -version = "1.0.67" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6498a9efc342871f91cc2d0d694c674368b4ceb40f62b65a7a08c3792935e702" +checksum = "ad184cc9470f9117b2ac6817bfe297307418819ba40552f9b3846f05c33d5373" dependencies = [ "proc-macro2", "quote", @@ -1218,9 +1387,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.16.4" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c280c91abd1aed2e36be1bc8f56fbc7a2acbb2b58fbcac9641510179cc72dd9" +checksum = "567e910ef0207be81a4e1bb0491e9a8d9866cf45b20fe1a52c03d347da9ea51b" dependencies = [ "cfg-if 1.0.0", "core-foundation-sys", @@ -1247,11 +1416,20 @@ dependencies = [ "cfg-if 1.0.0", "libc", "rand", - "redox_syscall 0.2.5", + "redox_syscall", "remove_dir_all", "winapi", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -1281,31 +1459,21 @@ dependencies = [ "syn", ] -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - [[package]] name = "time" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "wasi", "winapi", ] [[package]] name = "time" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7" +checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372" dependencies = [ "const_fn", "libc", @@ -1341,9 +1509,9 @@ dependencies = [ [[package]] name = "tinytemplate" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ada8616fad06a2d0c455adc530de4ef57605a8120cc65da9653e0e9623ca74" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" dependencies = [ "serde", "serde_json", @@ -1382,11 +1550,17 @@ dependencies = [ "ctor", ] +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "void" @@ -1396,9 +1570,9 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "walkdir" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", "winapi", @@ -1407,15 +1581,15 @@ dependencies = [ [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.70" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -1423,9 +1597,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.70" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" dependencies = [ "bumpalo", "lazy_static", @@ -1438,9 +1612,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.70" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1448,9 +1622,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.70" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" dependencies = [ "proc-macro2", "quote", @@ -1461,20 +1635,29 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.70" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" +checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" [[package]] name = "web-sys" -version = "0.3.47" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "which" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" +dependencies = [ + "libc", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/console_backend/Cargo.toml b/console_backend/Cargo.toml index 448589ba6..4d8547839 100644 --- a/console_backend/Cargo.toml +++ b/console_backend/Cargo.toml @@ -17,7 +17,7 @@ chrono = { version = "0.4", features = ["serde"] } csv = "1" paste = "1" pyo3 = { version = "0.13", features = ["extension-module"] } -sbp = { git = "https://github.com/swift-nav/libsbp.git", rev = "0563350bb387e4a966a2b558adb7b05b2baf005f" } +sbp = { git = "https://github.com/swift-nav/libsbp.git", rev = "983e98b17b89dc2c688ef201703978535c6b86af", features = ["swiftnav-rs"]} serde = { version = "1.0.123", features = ["derive"] } tempfile = "3.2.0" ordered-float = "2.0" diff --git a/console_backend/benches/cpu_benches.rs b/console_backend/benches/cpu_benches.rs index f1caff7f0..d5f7550ed 100644 --- a/console_backend/benches/cpu_benches.rs +++ b/console_backend/benches/cpu_benches.rs @@ -11,7 +11,7 @@ use std::{ extern crate console_backend; use console_backend::{ process_messages, - types::{ClientSender, SharedState}, + types::{ClientSender, RealtimeDelay, SharedState}, }; const BENCH_FILEPATH: &str = "./tests/data/piksi-relay.sbp"; @@ -61,7 +61,7 @@ fn run_process_messages(file_in_name: &str, failure: bool) { inner: client_send_, }; shared_state.set_running(true); - process_messages::process_messages(messages, shared_state, client_send); + process_messages::process_messages(messages, shared_state, client_send, RealtimeDelay::Off); } recv_thread.join().expect("join should succeed"); } diff --git a/console_backend/src/main_tab.rs b/console_backend/src/main_tab.rs index 3c7e6a9f1..f422f88f5 100644 --- a/console_backend/src/main_tab.rs +++ b/console_backend/src/main_tab.rs @@ -1,3 +1,7 @@ +use log::debug; +use sbp::messages::GpsTime; +use std::{result::Result, thread::sleep, time::Instant}; + use crate::observation_tab::ObservationTab; use crate::solution_tab::SolutionTab; use crate::solution_velocity_tab::SolutionVelocityTab; @@ -5,6 +9,8 @@ use crate::tracking_signals_tab::TrackingSignalsTab; use crate::types::*; pub struct MainTab<'a, S: MessageSender> { + last_gps_update: Instant, + last_gps_time: Option, pub tracking_signals_tab: TrackingSignalsTab, pub solution_tab: SolutionTab, pub observation_tab: ObservationTab, @@ -14,6 +20,8 @@ pub struct MainTab<'a, S: MessageSender> { impl<'a, S: MessageSender> MainTab<'a, S> { pub fn new(shared_state: SharedState, client_sender: S) -> MainTab<'a, S> { MainTab { + last_gps_time: None, + last_gps_update: Instant::now(), tracking_signals_tab: TrackingSignalsTab::new( shared_state.clone(), client_sender.clone(), @@ -23,4 +31,151 @@ impl<'a, S: MessageSender> MainTab<'a, S> { solution_velocity_tab: SolutionVelocityTab::new(shared_state, client_sender), } } + + /// Calculate time since last epoch began and sleep for previous epoch time difference. + /// + /// # Parameters + /// - `gps_time`: The GpsTime corresponding to a message. + pub fn realtime_delay(&mut self, gps_time: Option>) { + if let Some(Ok(mut g_time)) = gps_time { + if let Some(mut l_time) = self.last_gps_time { + let gps_time_tow = g_time.tow(); + let gps_time_week = g_time.wn(); + let last_gps_time_tow = l_time.tow(); + let last_gps_time_week = l_time.wn(); + + if gps_time_week != 0 && last_gps_time_week == 0 { + let l_time_ = GpsTime::new(gps_time_week, last_gps_time_tow); + if let Ok(l_time_ok) = l_time_ { + l_time = l_time_ok; + } + } else if gps_time_week == 0 && last_gps_time_week != 0 { + let g_time_ = GpsTime::new(last_gps_time_week, gps_time_tow); + if let Ok(g_time_ok) = g_time_ { + g_time = g_time_ok; + } + } + + if l_time < g_time { + let diff = g_time - l_time; + let elapsed = self.last_gps_update.elapsed(); + if diff > elapsed { + let sleep_duration = diff - elapsed; + debug!( + "Realtime delay encounterred. Sleeping for {:?}.", + sleep_duration + ); + sleep(sleep_duration); + } + self.last_gps_update = Instant::now(); + self.last_gps_time = Some(g_time); + } + } else { + self.last_gps_time = Some(g_time); + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::{sync::mpsc, time::Duration}; + struct GpsTimeTests { + pub zero_week: i16, + pub good_week: i16, + pub early_gps_tow_good: f64, + pub later_gps_tow_good: f64, + } + impl GpsTimeTests { + fn new() -> GpsTimeTests { + let zero_week: i16 = 0; + let good_week: i16 = 2000; + let early_gps_tow_good: f64 = 5432.0; + let later_gps_tow_good: f64 = 5433.0; + GpsTimeTests { + zero_week, + good_week, + early_gps_tow_good, + later_gps_tow_good, + } + } + } + + #[test] + fn realtime_delay_full_test() { + let shared_state = SharedState::new(); + let (client_send_, _) = mpsc::channel::>(); + let client_send = ClientSender { + inner: client_send_, + }; + let gps_s = GpsTimeTests::new(); + let mut main = MainTab::new(shared_state, client_send); + let early_gps_time_good = GpsTime::new(gps_s.good_week, gps_s.early_gps_tow_good).unwrap(); + let later_gps_time_good = GpsTime::new(gps_s.good_week, gps_s.later_gps_tow_good); + main.last_gps_time = Some(early_gps_time_good); + let now = Instant::now(); + main.last_gps_update = Instant::now(); + main.realtime_delay(Some(later_gps_time_good)); + assert!( + now.elapsed() + > Duration::from_secs_f64(gps_s.later_gps_tow_good - gps_s.early_gps_tow_good) + ); + } + #[test] + fn realtime_delay_bad_last_test() { + let shared_state = SharedState::new(); + let (client_send_, _) = mpsc::channel::>(); + let client_send = ClientSender { + inner: client_send_, + }; + let gps_s = GpsTimeTests::new(); + let mut main = MainTab::new(shared_state, client_send); + let early_gps_time_good = GpsTime::new(gps_s.zero_week, gps_s.early_gps_tow_good).unwrap(); + let later_gps_time_good = GpsTime::new(gps_s.good_week, gps_s.later_gps_tow_good); + main.last_gps_time = Some(early_gps_time_good); + let now = Instant::now(); + main.last_gps_update = Instant::now(); + main.realtime_delay(Some(later_gps_time_good)); + assert!( + now.elapsed() + > Duration::from_secs_f64(gps_s.later_gps_tow_good - gps_s.early_gps_tow_good) + ); + } + #[test] + fn realtime_delay_bad_current_test() { + let shared_state = SharedState::new(); + let (client_send_, _) = mpsc::channel::>(); + let client_send = ClientSender { + inner: client_send_, + }; + let gps_s = GpsTimeTests::new(); + let mut main = MainTab::new(shared_state, client_send); + let early_gps_time_good = GpsTime::new(gps_s.good_week, gps_s.early_gps_tow_good).unwrap(); + let later_gps_time_good = GpsTime::new(gps_s.zero_week, gps_s.later_gps_tow_good); + main.last_gps_time = Some(early_gps_time_good); + let now = Instant::now(); + main.last_gps_update = Instant::now(); + main.realtime_delay(Some(later_gps_time_good)); + assert!( + now.elapsed() + > Duration::from_secs_f64(gps_s.later_gps_tow_good - gps_s.early_gps_tow_good) + ); + } + + #[test] + fn realtime_delay_no_last_test() { + let shared_state = SharedState::new(); + let (client_send_, _) = mpsc::channel::>(); + let client_send = ClientSender { + inner: client_send_, + }; + let gps_s = GpsTimeTests::new(); + let mut main = MainTab::new(shared_state, client_send); + let later_gps_time_good = GpsTime::new(gps_s.good_week, gps_s.later_gps_tow_good); + let now = Instant::now(); + main.last_gps_update = Instant::now(); + main.realtime_delay(Some(later_gps_time_good)); + assert!(now.elapsed() < Duration::from_millis(5)); + } } diff --git a/console_backend/src/process_messages.rs b/console_backend/src/process_messages.rs index 80294de9c..f86c832ea 100644 --- a/console_backend/src/process_messages.rs +++ b/console_backend/src/process_messages.rs @@ -1,4 +1,5 @@ -use sbp::messages::SBP; +use log::debug; +use sbp::messages::{SBPMessage, SBP}; use std::{thread::sleep, time::Duration}; use crate::constants::PAUSE_LOOP_SLEEP_DURATION_MS; @@ -29,11 +30,11 @@ fn strip_errors_iter( }) .filter_map(sbp::Result::ok) } - pub fn process_messages( messages: impl Iterator>, shared_state: SharedState, client_send: S, + realtime_delay: RealtimeDelay, ) { let mut main = MainTab::new(shared_state.clone(), client_send); let messages = strip_errors_iter(true, messages); @@ -49,6 +50,9 @@ pub fn process_messages( sleep(Duration::from_millis(PAUSE_LOOP_SLEEP_DURATION_MS)); } } + let gps_time = message.gps_time(); + let msg_name = message.get_message_name(); + let mut attempt_delay = true; match message { SBP::MsgAgeCorrections(msg) => { main.solution_tab.handle_age_corrections(msg); @@ -75,7 +79,6 @@ pub fn process_messages( SBP::MsgObs(msg) => { main.tracking_signals_tab .handle_obs(ObservationMsg::MsgObs(msg.clone())); - main.observation_tab.handle_obs(ObservationMsg::MsgObs(msg)); } SBP::MsgObsDepA(_msg) => { @@ -123,7 +126,14 @@ pub fn process_messages( SBP::MsgLog(msg) => handle_log_msg(msg), _ => { - // no-op + attempt_delay = false; + } + } + if let RealtimeDelay::On = realtime_delay { + if attempt_delay { + main.realtime_delay(gps_time); + } else { + debug!("Message, {}, ignored for realtime delay.", msg_name); } } log::logger().flush(); diff --git a/console_backend/src/server.rs b/console_backend/src/server.rs index 364255c22..69a19207b 100644 --- a/console_backend/src/server.rs +++ b/console_backend/src/server.rs @@ -151,7 +151,7 @@ impl Server { client_send_clone, shared_state_clone, filename, - true, + /*close_when_done = */ true, ); } m::message::PauseRequest(Ok(_)) => { diff --git a/console_backend/src/types.rs b/console_backend/src/types.rs index 77e20d500..65d9a588c 100644 --- a/console_backend/src/types.rs +++ b/console_backend/src/types.rs @@ -144,7 +144,12 @@ impl ServerState { println!("Opened file successfully!"); let shared_state_clone_ = shared_state.clone(); let messages = sbp::iter_messages(stream); - process_messages(messages, shared_state_clone_, client_send.clone()); + process_messages( + messages, + shared_state_clone_, + client_send.clone(), + RealtimeDelay::On, + ); if close_when_done { close_frontend(&mut client_send.clone()); } @@ -176,7 +181,12 @@ impl ServerState { if let Ok(stream) = TcpStream::connect(host_port.clone()) { info!("Connected to the server {}!", host_port); let messages = sbp::iter_messages(stream); - process_messages(messages, shared_state_clone, client_send); + process_messages( + messages, + shared_state_clone, + client_send, + RealtimeDelay::Off, + ); } else { warn!("Couldn't connect to server..."); } @@ -215,7 +225,12 @@ impl ServerState { Ok(port) => { println!("Connected to serialport {}.", device); let messages = sbp::iter_messages(port); - process_messages(messages, shared_state_clone, client_send); + process_messages( + messages, + shared_state_clone, + client_send, + RealtimeDelay::Off, + ); } Err(e) => eprint!("Unable to connect to serialport: {}", e), } @@ -385,6 +400,12 @@ impl SolutionVelocityTabState { } } +// Main Tab Types. +pub enum RealtimeDelay { + On, + Off, +} + // Tracking Signals Tab Types. pub type Cn0Dict = HashMap<(SignalCodes, i16), Deque<(OrderedFloat, f64)>>; pub type Cn0Age = HashMap<(SignalCodes, i16), f64>; @@ -1276,6 +1297,8 @@ mod tests { time::{Duration, SystemTime}, }; const TEST_FILEPATH: &str = "./tests/data/piksi-relay-1min.sbp"; + const TEST_SHORT_FILEPATH: &str = "./tests/data/piksi-relay.sbp"; + const SBP_FILE_SHORT_DURATION_SEC: f64 = 26.1; fn receive_thread(client_recv: mpsc::Receiver>) -> JoinHandle<()> { thread::spawn(move || { @@ -1300,13 +1323,18 @@ mod tests { inner: client_send_, }; let server_state = ServerState::new(); - let filename = TEST_FILEPATH.to_string(); + let filename = TEST_SHORT_FILEPATH.to_string(); receive_thread(client_receive); assert!(!shared_state.is_running()); - server_state.connect_to_file(client_send, shared_state.clone(), filename, true); - sleep(Duration::from_millis(5)); + server_state.connect_to_file( + client_send, + shared_state.clone(), + filename, + /*close_when_done = */ true, + ); + sleep(Duration::from_millis(100)); assert!(shared_state.is_running()); - sleep(Duration::from_secs(5)); + sleep(Duration::from_secs_f64(SBP_FILE_SHORT_DURATION_SEC)); assert!(!shared_state.is_running()); } @@ -1318,17 +1346,22 @@ mod tests { inner: client_send_, }; let server_state = ServerState::new(); - let filename = TEST_FILEPATH.to_string(); + let filename = TEST_SHORT_FILEPATH.to_string(); receive_thread(client_receive); assert!(!shared_state.is_running()); - server_state.connect_to_file(client_send, shared_state.clone(), filename, true); - sleep(Duration::from_millis(5)); + server_state.connect_to_file( + client_send, + shared_state.clone(), + filename, + /*close_when_done = */ true, + ); + sleep(Duration::from_millis(100)); assert!(shared_state.is_running()); shared_state.set_paused(true); - sleep(Duration::from_secs(5)); + sleep(Duration::from_secs_f64(SBP_FILE_SHORT_DURATION_SEC)); assert!(shared_state.is_running()); shared_state.set_paused(false); - sleep(Duration::from_secs(5)); + sleep(Duration::from_secs_f64(SBP_FILE_SHORT_DURATION_SEC)); assert!(!shared_state.is_running()); } @@ -1345,7 +1378,12 @@ mod tests { let handle = receive_thread(client_receive); assert!(!shared_state.is_running()); { - server_state.connect_to_file(client_send, shared_state.clone(), filename, true); + server_state.connect_to_file( + client_send, + shared_state.clone(), + filename, + /*close_when_done = */ true, + ); } sleep(Duration::from_millis(5)); diff --git a/console_backend/tests/data/piksi-relay-5sec.sbp b/console_backend/tests/data/piksi-relay-5sec.sbp new file mode 100644 index 000000000..55504b483 --- /dev/null +++ b/console_backend/tests/data/piksi-relay-5sec.sbp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8245626132f3666e5c02b773024728af5bffae69286aed242baf416940c2cf3 +size 75014 diff --git a/console_backend/tests/mem_benches.rs b/console_backend/tests/mem_benches.rs index 00d621fd4..beed04f11 100644 --- a/console_backend/tests/mem_benches.rs +++ b/console_backend/tests/mem_benches.rs @@ -15,16 +15,16 @@ mod mem_bench_impl { use console_backend::{ process_messages, - types::{ClientSender, SharedState}, + types::{ClientSender, RealtimeDelay, SharedState}, }; const BENCH_FILEPATH: &str = "./tests/data/piksi-relay-1min.sbp"; const MINIMUM_MEM_READINGS: usize = 20; const DIFF_THRESHOLD: f32 = 0.05; - const MAXIMUM_MEM_USAGE_KB: f32 = 30000.0; + const MAXIMUM_MEM_USAGE_KB: f32 = 140000.0; const ABSOLUTE_MINIMUM_MEM_USAGE: f32 = 1000.0; - const MAXIMUM_STANDARD_DEV_RATE_OF_MAXIMUM_MEM: f32 = 0.2; + const MAXIMUM_STANDARD_DEV_RATE_OF_MAXIMUM_MEM: f32 = 0.4; /// Convert a 1D Vector to an ArrayView. /// @@ -101,7 +101,12 @@ mod mem_bench_impl { }; let shared_state = SharedState::new(); shared_state.set_running(true); - process_messages::process_messages(messages, shared_state, client_send); + process_messages::process_messages( + messages, + shared_state, + client_send, + RealtimeDelay::On, + ); } recv_thread.join().expect("join should succeed"); mem_read_thread.join().expect("join should succeed"); diff --git a/utils/bench_runner.py b/utils/bench_runner.py index d4e8cf482..755888fc6 100644 --- a/utils/bench_runner.py +++ b/utils/bench_runner.py @@ -99,8 +99,8 @@ FRONTEND_CPU_BENCHMARKS = { WINDOWS: [ { - NAME: "202010224_192043", - FILE_PATH: "data/202010224_192043.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", KEY_LOCATION: "mean", EXPECTED: 50.0, ERROR_MARGIN_FRAC: 0.05, @@ -108,8 +108,8 @@ ], MACOS: [ { - NAME: "202010224_192043", - FILE_PATH: "data/202010224_192043.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", KEY_LOCATION: "mean", EXPECTED: 12.0, ERROR_MARGIN_FRAC: 0.05, @@ -117,8 +117,8 @@ ], LINUX: [ { - NAME: "202010224_192043", - FILE_PATH: "data/202010224_192043.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", KEY_LOCATION: "mean", EXPECTED: 80.0, ERROR_MARGIN_FRAC: 0.05, @@ -140,8 +140,8 @@ FRONTEND_MEM_BENCHMARKS: Dict[str, List[Dict[str, Any]]] = { WINDOWS: [ { - NAME: "piksi-relay-1min", - FILE_PATH: "data/piksi-relay-1min.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", MAXIMUM_MEAN_MB: 300, MAXIMUM_RATE_OF_MAX_MEAN: 0.05, MAXIMUM_RATE_OF_MAX_STD: 0.3, @@ -149,8 +149,8 @@ ], MACOS: [ { - NAME: "piksi-relay-1min", - FILE_PATH: "data/piksi-relay-1min.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", MAXIMUM_MEAN_MB: 300, MAXIMUM_RATE_OF_MAX_MEAN: 0.05, MAXIMUM_RATE_OF_MAX_STD: 0.3, @@ -158,8 +158,8 @@ ], LINUX: [ { - NAME: "piksi-relay-1min", - FILE_PATH: "data/piksi-relay-1min.sbp", + NAME: "piksi-relay-5sec", + FILE_PATH: "data/piksi-relay-5sec.sbp", MAXIMUM_MEAN_MB: 400, MAXIMUM_RATE_OF_MAX_MEAN: 0.05, MAXIMUM_RATE_OF_MAX_STD: 0.4,