From 9567f8f28f4a13bae607ac72b83db9e1beb94df7 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 31 Mar 2022 11:26:58 +0200 Subject: [PATCH 1/2] Move the crypto benchmarks into a separate crate Avoids issues from circular dev-dependency. --- .gitignore | 1 + Cargo.toml | 4 +-- benchmarks/Cargo.toml | 25 +++++++++++++++++++ .../benches => benchmarks}/README.md | 0 .../benches/crypto_bench.rs | 6 ++--- .../benches/crypto_bench}/keys_claim.json | 0 .../benches/crypto_bench}/keys_query.json | 0 .../keys_query_2000_members.json | 0 crates/matrix-sdk-crypto/Cargo.toml | 24 ++---------------- .../src/session_manager/group_sessions.rs | 4 +-- 10 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 benchmarks/Cargo.toml rename {crates/matrix-sdk-crypto/benches => benchmarks}/README.md (100%) rename {crates/matrix-sdk-crypto => benchmarks}/benches/crypto_bench.rs (97%) rename {crates/matrix-sdk-crypto/benches => benchmarks/benches/crypto_bench}/keys_claim.json (100%) rename {crates/matrix-sdk-crypto/benches => benchmarks/benches/crypto_bench}/keys_query.json (100%) rename {crates/matrix-sdk-crypto/benches => benchmarks/benches/crypto_bench}/keys_query_2000_members.json (100%) diff --git a/.gitignore b/.gitignore index 990f53978..f12193193 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ target master.zip emsdk-* .idea/ +.vscode/ diff --git a/Cargo.toml b/Cargo.toml index f1af4019e..e64827a08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ [workspace] -members = ["crates/*", "xtask"] +members = ["benchmarks", "crates/*", "xtask"] # xtask should only be compiled when invoked explicitly -default-members = ["crates/*"] +default-members = ["benchmarks", "crates/*"] diff --git a/benchmarks/Cargo.toml b/benchmarks/Cargo.toml new file mode 100644 index 000000000..299b58e14 --- /dev/null +++ b/benchmarks/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "benchmarks" +description = "Matrix SDK benchmarks" +edition = "2021" +license = "Apache-2.0" +rust-version = "1.56" +version = "1.0.0" +publish = false + +[dependencies] +criterion = { version = "0.3.4", features = ["async", "async_tokio", "html_reports"] } +matrix-sdk-crypto = { path = "../crates/matrix-sdk-crypto" } +matrix-sdk-sled = { path = "../crates/matrix-sdk-sled", default-features = false, features = ["crypto-store"] } +matrix-sdk-test = { path = "../crates/matrix-sdk-test" } +ruma = { git = "https://github.com/ruma/ruma", rev = "deea762b8" } +serde_json = "1.0.79" +tempfile = "3.2.0" +tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread"] } + +[target.'cfg(target_os = "linux")'.dependencies] +pprof = { version = "0.6.2", features = ["flamegraph", "criterion"] } + +[[bench]] +name = "crypto_bench" +harness = false diff --git a/crates/matrix-sdk-crypto/benches/README.md b/benchmarks/README.md similarity index 100% rename from crates/matrix-sdk-crypto/benches/README.md rename to benchmarks/README.md diff --git a/crates/matrix-sdk-crypto/benches/crypto_bench.rs b/benchmarks/benches/crypto_bench.rs similarity index 97% rename from crates/matrix-sdk-crypto/benches/crypto_bench.rs rename to benchmarks/benches/crypto_bench.rs index 066f32ac4..879756efe 100644 --- a/crates/matrix-sdk-crypto/benches/crypto_bench.rs +++ b/benchmarks/benches/crypto_bench.rs @@ -26,7 +26,7 @@ fn alice_device_id() -> &'static DeviceId { } fn keys_query_response() -> get_keys::v3::Response { - let data = include_bytes!("./keys_query.json"); + let data = include_bytes!("crypto_bench/keys_query.json"); let data: Value = serde_json::from_slice(data).unwrap(); let data = response_from_file(&data); get_keys::v3::Response::try_from_http_response(data) @@ -34,7 +34,7 @@ fn keys_query_response() -> get_keys::v3::Response { } fn keys_claim_response() -> claim_keys::v3::Response { - let data = include_bytes!("./keys_claim.json"); + let data = include_bytes!("crypto_bench/keys_claim.json"); let data: Value = serde_json::from_slice(data).unwrap(); let data = response_from_file(&data); claim_keys::v3::Response::try_from_http_response(data) @@ -42,7 +42,7 @@ fn keys_claim_response() -> claim_keys::v3::Response { } fn huge_keys_query_response() -> get_keys::v3::Response { - let data = include_bytes!("./keys_query_2000_members.json"); + let data = include_bytes!("crypto_bench/keys_query_2000_members.json"); let data: Value = serde_json::from_slice(data).unwrap(); let data = response_from_file(&data); get_keys::v3::Response::try_from_http_response(data) diff --git a/crates/matrix-sdk-crypto/benches/keys_claim.json b/benchmarks/benches/crypto_bench/keys_claim.json similarity index 100% rename from crates/matrix-sdk-crypto/benches/keys_claim.json rename to benchmarks/benches/crypto_bench/keys_claim.json diff --git a/crates/matrix-sdk-crypto/benches/keys_query.json b/benchmarks/benches/crypto_bench/keys_query.json similarity index 100% rename from crates/matrix-sdk-crypto/benches/keys_query.json rename to benchmarks/benches/crypto_bench/keys_query.json diff --git a/crates/matrix-sdk-crypto/benches/keys_query_2000_members.json b/benchmarks/benches/crypto_bench/keys_query_2000_members.json similarity index 100% rename from crates/matrix-sdk-crypto/benches/keys_query_2000_members.json rename to benchmarks/benches/crypto_bench/keys_query_2000_members.json diff --git a/crates/matrix-sdk-crypto/Cargo.toml b/crates/matrix-sdk-crypto/Cargo.toml index a5bf126d3..13bd0901f 100644 --- a/crates/matrix-sdk-crypto/Cargo.toml +++ b/crates/matrix-sdk-crypto/Cargo.toml @@ -72,26 +72,6 @@ http = "0.2.4" indoc = "1.0.3" matches = "0.1.8" matrix-sdk-test = { version = "0.4.0", path = "../matrix-sdk-test" } - -# This is needed for the benchmarks -matrix-sdk-sled = { version = "0.1.0", path = "../matrix-sdk-sled", default-features = false, features = ["crypto-store"] } -[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] -criterion = { version = "0.3.4", features = [ - "async", - "async_tokio", - "html_reports", -] } proptest = "1.0.0" -tempfile = "3.2.0" -tokio = { version = "1.7.1", default-features = false, features = [ - "rt-multi-thread", - "macros", -] } - -[target.'cfg(target_os = "linux")'.dev-dependencies] -pprof = { version = "0.6.2", features = ["flamegraph", "criterion"] } - - -[[bench]] -name = "crypto_bench" -harness = false +# required for async_test macro +tokio = { version = "1.7.1", default-features = false, features = ["macros", "rt-multi-thread"] } diff --git a/crates/matrix-sdk-crypto/src/session_manager/group_sessions.rs b/crates/matrix-sdk-crypto/src/session_manager/group_sessions.rs index 4b49624ad..ab70b59e6 100644 --- a/crates/matrix-sdk-crypto/src/session_manager/group_sessions.rs +++ b/crates/matrix-sdk-crypto/src/session_manager/group_sessions.rs @@ -610,7 +610,7 @@ mod test { } fn keys_query_response() -> get_keys::v3::Response { - let data = include_bytes!("../../benches/keys_query.json"); + let data = include_bytes!("../../../../benchmarks/benches/crypto_bench/keys_query.json"); let data: Value = serde_json::from_slice(data).unwrap(); let data = response_from_file(&data); get_keys::v3::Response::try_from_http_response(data) @@ -618,7 +618,7 @@ mod test { } fn keys_claim_response() -> claim_keys::v3::Response { - let data = include_bytes!("../../benches/keys_claim.json"); + let data = include_bytes!("../../../../benchmarks/benches/crypto_bench/keys_claim.json"); let data: Value = serde_json::from_slice(data).unwrap(); let data = response_from_file(&data); claim_keys::v3::Response::try_from_http_response(data) From e2aab504fb839691541396d2867ace7b56b6594a Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 31 Mar 2022 11:36:17 +0200 Subject: [PATCH 2/2] Move sled state inspector into a separate crate --- Cargo.toml | 4 ++-- crates/matrix-sdk-sled/Cargo.toml | 21 ------------------ labs/sled-state-inspector/Cargo.toml | 17 ++++++++++++++ .../sled-state-inspector/src/main.rs | 14 +++++++----- .../sled-state-inspector}/syntaxes.bin | Bin .../sled-state-inspector}/themes.bin | Bin 6 files changed, 27 insertions(+), 29 deletions(-) create mode 100644 labs/sled-state-inspector/Cargo.toml rename crates/matrix-sdk-sled/bin/state_inspector.rs => labs/sled-state-inspector/src/main.rs (97%) rename {crates/matrix-sdk-sled/bin => labs/sled-state-inspector}/syntaxes.bin (100%) rename {crates/matrix-sdk-sled/bin => labs/sled-state-inspector}/themes.bin (100%) diff --git a/Cargo.toml b/Cargo.toml index e64827a08..795fafab0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ [workspace] -members = ["benchmarks", "crates/*", "xtask"] -# xtask should only be compiled when invoked explicitly +members = ["benchmarks", "crates/*", "labs/*", "xtask"] +# xtask and labs should only be compiled when invoked explicitly default-members = ["benchmarks", "crates/*"] diff --git a/crates/matrix-sdk-sled/Cargo.toml b/crates/matrix-sdk-sled/Cargo.toml index 53cb70739..f1c685e84 100644 --- a/crates/matrix-sdk-sled/Cargo.toml +++ b/crates/matrix-sdk-sled/Cargo.toml @@ -3,24 +3,11 @@ name = "matrix-sdk-sled" version = "0.1.0" edition = "2021" -[[bin]] -name = "state-inspector" -path = "bin/state_inspector.rs" -required-features = ["binary-build"] - [features] default = ["state-store", "crypto-store"] state-store = ["matrix-sdk-base"] crypto-store = ["matrix-sdk-crypto"] -binary-build = [ - "atty", - "clap", - "futures", - "rustyline", - "rustyline-derive", - "syntect", -] [dependencies] futures-core = "0.3.15" @@ -39,14 +26,6 @@ tracing = "0.1.26" anyhow = "1" dashmap = "5.1.0" -# binary-build only -atty = { version = "0.2.14", optional = true } -clap = { version = "3.1.0", optional = true } -futures = { version = "0.3.15", default-features = false, features = ["executor"], optional = true } -rustyline = { version = "9.0.0", optional = true } -rustyline-derive = { version = "0.6.0", optional = true } -syntect = { version = "4.5.0", optional = true } - [dev-dependencies] lazy_static = "1.4" tempfile = "3.2.0" diff --git a/labs/sled-state-inspector/Cargo.toml b/labs/sled-state-inspector/Cargo.toml new file mode 100644 index 000000000..acb455237 --- /dev/null +++ b/labs/sled-state-inspector/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "sled-state-inspector" +version = "0.1.0" +edition = "2021" +publish = false + +[dependencies] +atty = "0.2.14" +clap = "3.1.0" +futures = { version = "0.3.15", default-features = false, features = ["executor"] } +matrix-sdk-base = { path = "../../crates/matrix-sdk-base" } +matrix-sdk-sled = { path = "../../crates/matrix-sdk-sled" } +rustyline = "9.0.0" +rustyline-derive = "0.6.0" +serde = "1.0.136" +serde_json = "1.0.79" +syntect = "4.5.0" diff --git a/crates/matrix-sdk-sled/bin/state_inspector.rs b/labs/sled-state-inspector/src/main.rs similarity index 97% rename from crates/matrix-sdk-sled/bin/state_inspector.rs rename to labs/sled-state-inspector/src/main.rs index c1edeec97..371ff10db 100644 --- a/crates/matrix-sdk-sled/bin/state_inspector.rs +++ b/labs/sled-state-inspector/src/main.rs @@ -3,8 +3,10 @@ use std::{convert::TryFrom, fmt::Debug, sync::Arc}; use atty::Stream; use clap::{Arg, ArgMatches, Command as Argparse}; use futures::executor::block_on; -use matrix_sdk_base::{RoomInfo, Store}; -use matrix_sdk_common::ruma::{events::StateEventType, RoomId, UserId}; +use matrix_sdk_base::{ + ruma::{events::StateEventType, RoomId, UserId}, + RoomInfo, Store, +}; use matrix_sdk_sled::StateStore; use rustyline::{ completion::{Completer, Pair}, @@ -66,7 +68,7 @@ impl InspectorHelper { fn complete_event_types(&self, arg: Option<&&str>) -> Vec { Self::EVENT_TYPES .iter() - .map(|t| Pair { display: t.to_string(), replacement: format!("{} ", t) }) + .map(|&t| Pair { display: t.to_owned(), replacement: format!("{} ", t) }) .filter(|r| if let Some(arg) = arg { r.replacement.starts_with(arg) } else { true }) .collect() } @@ -161,8 +163,8 @@ struct Printer { impl Printer { fn new(json: bool, color: bool) -> Self { - let syntax_set: SyntaxSet = from_binary(include_bytes!("./syntaxes.bin")); - let themes: ThemeSet = from_binary(include_bytes!("./themes.bin")); + let syntax_set: SyntaxSet = from_binary(include_bytes!("../syntaxes.bin")); + let themes: ThemeSet = from_binary(include_bytes!("../themes.bin")); Self { ps: syntax_set.into(), ts: themes.into(), json, color } } @@ -223,7 +225,7 @@ impl Inspector { Some(("list-rooms", _)) => self.list_rooms().await, Some(("get-display-names", args)) => { let room_id = RoomId::parse(args.value_of("room-id").unwrap()).unwrap(); - let display_name = args.value_of("display-name").unwrap().to_string(); + let display_name = args.value_of("display-name").unwrap().to_owned(); self.get_display_name_owners(room_id, display_name).await; } Some(("get-state", args)) => { diff --git a/crates/matrix-sdk-sled/bin/syntaxes.bin b/labs/sled-state-inspector/syntaxes.bin similarity index 100% rename from crates/matrix-sdk-sled/bin/syntaxes.bin rename to labs/sled-state-inspector/syntaxes.bin diff --git a/crates/matrix-sdk-sled/bin/themes.bin b/labs/sled-state-inspector/themes.bin similarity index 100% rename from crates/matrix-sdk-sled/bin/themes.bin rename to labs/sled-state-inspector/themes.bin