Use bytes crate as buffer

This commit is contained in:
Juan Aguilar Santillana 2020-06-16 06:46:37 +00:00
parent 86658d4a96
commit 3a6ef334d4
3 changed files with 78 additions and 84 deletions

132
benches/Cargo.lock generated
View File

@ -11,9 +11,9 @@ dependencies = [
[[package]]
name = "adler32"
version = "1.0.4"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
[[package]]
name = "aho-corasick"
@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1012c270085fa35ece6a48a569544fde85b6d9ee41074c7b706cc912a03f939"
dependencies = [
"askama_shared",
"nom 5.1.1",
"nom 5.1.2",
"proc-macro2",
"quote",
"syn",
@ -134,13 +134,14 @@ checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
[[package]]
name = "backtrace"
version = "0.3.48"
version = "0.3.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0df2f85c8a2abbe3b7d7e748052fdd9b76a0458fdeb16ad4223f5eca78c7c130"
checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c"
dependencies = [
"addr2line",
"cfg-if",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
]
@ -153,9 +154,9 @@ checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
[[package]]
name = "base64"
version = "0.12.1"
version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42"
checksum = "e223af0dc48c96d4f8342ec01a4974f139df863896b316681efd36742f22cc67"
[[package]]
name = "benches"
@ -222,6 +223,12 @@ version = "1.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
[[package]]
name = "bytes"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
[[package]]
name = "cast"
version = "0.2.3"
@ -384,12 +391,13 @@ dependencies = [
[[package]]
name = "crossbeam-queue"
version = "0.2.2"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab6bffe714b6bb07e42f201352c34f51fefd355ace793f9e638ebd52d23f98d2"
checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
dependencies = [
"cfg-if",
"crossbeam-utils",
"maybe-uninit",
]
[[package]]
@ -663,9 +671,9 @@ checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c"
[[package]]
name = "hermit-abi"
version = "0.1.13"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71"
checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909"
dependencies = [
"libc",
]
@ -800,9 +808,9 @@ dependencies = [
[[package]]
name = "miniz_oxide"
version = "0.3.6"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
dependencies = [
"adler32",
]
@ -819,9 +827,9 @@ dependencies = [
[[package]]
name = "nom"
version = "5.1.1"
version = "5.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
dependencies = [
"memchr",
"version_check 0.9.2",
@ -829,9 +837,9 @@ dependencies = [
[[package]]
name = "num-integer"
version = "0.1.42"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
dependencies = [
"autocfg",
"num-traits",
@ -839,9 +847,9 @@ dependencies = [
[[package]]
name = "num-traits"
version = "0.2.11"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
dependencies = [
"autocfg",
]
@ -858,9 +866,9 @@ dependencies = [
[[package]]
name = "object"
version = "0.19.0"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2"
checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"
[[package]]
name = "onig"
@ -886,9 +894,9 @@ dependencies = [
[[package]]
name = "oorandom"
version = "11.1.1"
version = "11.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94af325bc33c7f60191be4e2c984d48aaa21e2854f473b85398344b60c9b6358"
checksum = "a170cebd8021a008ea92e4db85a72f80b35df514ec664b296fdcbb654eac0b2c"
[[package]]
name = "pkg-config"
@ -902,7 +910,7 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd"
dependencies = [
"base64 0.12.1",
"base64 0.12.2",
"chrono",
"indexmap",
"line-wrap",
@ -960,9 +968,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.6"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea"
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
dependencies = [
"proc-macro2",
]
@ -1010,10 +1018,11 @@ dependencies = [
[[package]]
name = "rayon"
version = "1.3.0"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080"
dependencies = [
"autocfg",
"crossbeam-deque",
"either",
"rayon-core",
@ -1021,9 +1030,9 @@ dependencies = [
[[package]]
name = "rayon-core"
version = "1.7.0"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280"
dependencies = [
"crossbeam-deque",
"crossbeam-queue",
@ -1078,9 +1087,9 @@ checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8"
[[package]]
name = "remove_dir_all"
version = "0.5.2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
dependencies = [
"winapi",
]
@ -1181,18 +1190,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
version = "1.0.111"
version = "1.0.112"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9124df5b40cbd380080b2cc6ab894c040a3070d995f5c9dc77e18c34a8ae37d"
checksum = "736aac72d1eafe8e5962d1d1c3d99b0df526015ba40915cb3c49d042e92ec243"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.111"
version = "1.0.112"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f2c3ac8e6ca1e9c80b8be1023940162bf81ae3cffbb1809474152f2ce1eb250"
checksum = "bf0343ce212ac0d3d6afd9391ac8e9c9efe06b533c8d33f660f6390cc4093f57"
dependencies = [
"proc-macro2",
"quote",
@ -1201,9 +1210,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.53"
version = "1.0.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2"
checksum = "ec2c5d7e739bc07a3e73381a39d61fdb5f671c60c1df26a130690665803d8226"
dependencies = [
"itoa",
"ryu",
@ -1230,9 +1239,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]]
name = "syn"
version = "1.0.30"
version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93a56fabc59dce20fe48b6c832cc249c713e7ed88fa28b0ee0a3bfcaae5fe4e2"
checksum = "b5304cfdf27365b7585c25d4af91b35016ed21ef88f17ced89c7093b43dba8b6"
dependencies = [
"proc-macro2",
"quote",
@ -1357,18 +1366,18 @@ checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
[[package]]
name = "v_escape"
version = "0.9.2"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cad47b72883380358c04f5771d29e3312df13375cb12a9c36ac469b1316e4c6"
checksum = "9b90e2c1bf53e87c761e39031b5eb6cc05c66dc691f011075b3514593e846600"
dependencies = [
"v_escape_derive",
]
[[package]]
name = "v_escape_derive"
version = "0.7.0"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3ca1bd1654394f99e5a7360c93fe36bfece483b166970e44fa712d10c49becd"
checksum = "a863d20185db05c32432e6391c1812d44935ba7c9937fb9ff659fa87883d6956"
dependencies = [
"nom 4.2.3",
"proc-macro2",
@ -1388,9 +1397,9 @@ dependencies = [
[[package]]
name = "v_htmlescape"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df14628045454a33708f240f554caf3f4d30699de40ec813af51f286f924cbd4"
checksum = "5079f410fbdd6b7aafe03012fb0c0c3e991276e724db25e23c6b1c2f3d99965e"
dependencies = [
"cfg-if",
"v_escape",
@ -1543,19 +1552,18 @@ dependencies = [
[[package]]
name = "yarte"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78bddb9840b1bbdd2617bfb72ab57f89630b84cd2c57c22b5ff2bc4c9fda07a9"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"bytes",
"yarte_derive",
"yarte_helpers",
]
[[package]]
name = "yarte_codegen"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f28c1adc3182bac8062eee8f3cf3413dd4341644c218fc555e000bece67e3a7"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"proc-macro2",
"quote",
@ -1566,9 +1574,8 @@ dependencies = [
[[package]]
name = "yarte_derive"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d751cb27f08da1436f33175e559da5a91f48e22ba6f0ea086f91a6b3ff10c61"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"prettyprint",
"proc-macro2",
@ -1584,9 +1591,8 @@ dependencies = [
[[package]]
name = "yarte_helpers"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc1321a1916ff355aa8059a1c6031520adffd0688b4d0778ba5b42ea939bfb86"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"dtoa",
"itoa",
@ -1597,9 +1603,8 @@ dependencies = [
[[package]]
name = "yarte_hir"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28860d9e257c16acc13d9686d098f0f8806752fc94389c2b0fd633aa8b2dbb46"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"derive_more",
"proc-macro2",
@ -1613,9 +1618,8 @@ dependencies = [
[[package]]
name = "yarte_parser"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82da989bca8b3496c64082cde17e47e49aad1f28b387c19f48762ac3e114e7b3"
version = "0.10.0"
source = "git+https://github.com/botika/yarte#dbd1a379fc333e995bfc2c055761fea48f566808"
dependencies = [
"annotate-snippets",
"derive_more",

View File

@ -10,7 +10,7 @@ horrorshow = "0.8.3"
markup = "0.4.1"
askama = "0.9.0"
criterion = "0.3.2"
yarte = { version = "0.9.8", features = ["fixed"] }
yarte = { git = "https://github.com/botika/yarte", features = ["bytes_buff"] }
sailfish = { path = "../sailfish" }
sailfish-macros = { path = "../sailfish-macros" }
fomat-macros = "0.3.1"

View File

@ -1,6 +1,4 @@
use std::mem::MaybeUninit;
use yarte::TemplateFixed;
use yarte::TemplateBytes;
pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) {
let mut table = Vec::with_capacity(*size);
@ -11,24 +9,20 @@ pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) {
}
table.push(inner);
}
let ctx = BigTable { table };
let t = BigTable { table };
b.iter(|| {
unsafe {
let mut buf: [u8; 109915] = MaybeUninit::uninit().assume_init();
let b = ctx.call(&mut buf).unwrap();
let _ = &buf[..b];
}
t.call(109915).unwrap()
});
}
#[derive(TemplateFixed)]
#[template(path = "big-table.hbs")]
#[derive(TemplateBytes)]
#[template(path = "big-table")]
struct BigTable {
table: Vec<Vec<usize>>,
}
pub fn teams(b: &mut criterion::Bencher<'_>) {
let teams = Teams {
let t = Teams {
year: 2015,
teams: vec![
Team {
@ -51,16 +45,12 @@ pub fn teams(b: &mut criterion::Bencher<'_>) {
],
};
b.iter(|| {
unsafe {
let mut buf: [u8; 239] = MaybeUninit::uninit().assume_init();
let b = teams.call(&mut buf).unwrap();
let _ = &buf[..b];
}
t.call(239).unwrap()
});
}
#[derive(TemplateFixed)]
#[template(path = "teams.hbs")]
#[derive(TemplateBytes)]
#[template(path = "teams")]
struct Teams {
year: u16,
teams: Vec<Team>,