From 35cf1937de72efa465ff15ef36afa2cc7783b80d Mon Sep 17 00:00:00 2001 From: kennytm Date: Mon, 11 Dec 2017 00:38:20 +0800 Subject: [PATCH] Add test case for rust-lang/rust#46449 --- .../issue-46449/0-io-error-6144.patch | 13 ++++++++++ .../benchmarks/issue-46449/1-u32-3072.patch | 15 ++++++++++++ .../benchmarks/issue-46449/2-u8-3072.patch | 13 ++++++++++ .../benchmarks/issue-46449/3-empty-3072.patch | 13 ++++++++++ .../issue-46449/4-static-str-6144.patch | 15 ++++++++++++ collector/benchmarks/issue-46449/Cargo.lock | 14 +++++++++++ collector/benchmarks/issue-46449/Cargo.toml | 6 +++++ collector/benchmarks/issue-46449/README.md | 10 ++++++++ collector/benchmarks/issue-46449/src/lib.rs | 24 +++++++++++++++++++ 9 files changed, 123 insertions(+) create mode 100644 collector/benchmarks/issue-46449/0-io-error-6144.patch create mode 100644 collector/benchmarks/issue-46449/1-u32-3072.patch create mode 100644 collector/benchmarks/issue-46449/2-u8-3072.patch create mode 100644 collector/benchmarks/issue-46449/3-empty-3072.patch create mode 100644 collector/benchmarks/issue-46449/4-static-str-6144.patch create mode 100644 collector/benchmarks/issue-46449/Cargo.lock create mode 100644 collector/benchmarks/issue-46449/Cargo.toml create mode 100644 collector/benchmarks/issue-46449/README.md create mode 100644 collector/benchmarks/issue-46449/src/lib.rs diff --git a/collector/benchmarks/issue-46449/0-io-error-6144.patch b/collector/benchmarks/issue-46449/0-io-error-6144.patch new file mode 100644 index 000000000..30c94739d --- /dev/null +++ b/collector/benchmarks/issue-46449/0-io-error-6144.patch @@ -0,0 +1,13 @@ +diff --git a/src/lib.rs b/src/lib.rs +index 4b9db94..c44dea6 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -2,7 +2,7 @@ extern crate futures; + + use futures::{Future, Poll}; + +-const BUFFER_SIZE: usize = 1; ++const BUFFER_SIZE: usize = 6144; + pub struct Error(::std::io::Error); + + struct Dummy(T); diff --git a/collector/benchmarks/issue-46449/1-u32-3072.patch b/collector/benchmarks/issue-46449/1-u32-3072.patch new file mode 100644 index 000000000..f0d676dc7 --- /dev/null +++ b/collector/benchmarks/issue-46449/1-u32-3072.patch @@ -0,0 +1,15 @@ +diff --git a/src/lib.rs b/src/lib.rs +index c44dea6..b555f05 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -2,8 +2,8 @@ extern crate futures; + + use futures::{Future, Poll}; + +-const BUFFER_SIZE: usize = 6144; +-pub struct Error(::std::io::Error); ++const BUFFER_SIZE: usize = 3072; ++pub struct Error(u32); + + struct Dummy(T); + impl Future for Dummy { diff --git a/collector/benchmarks/issue-46449/2-u8-3072.patch b/collector/benchmarks/issue-46449/2-u8-3072.patch new file mode 100644 index 000000000..f92cc45c2 --- /dev/null +++ b/collector/benchmarks/issue-46449/2-u8-3072.patch @@ -0,0 +1,13 @@ +diff --git a/src/lib.rs b/src/lib.rs +index f8f91d6..b555f05 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -3,7 +3,7 @@ extern crate futures; + use futures::{Future, Poll}; + + const BUFFER_SIZE: usize = 3072; +-pub struct Error(u32); ++pub struct Error(u8); + + struct Dummy(T); + impl Future for Dummy { diff --git a/collector/benchmarks/issue-46449/3-empty-3072.patch b/collector/benchmarks/issue-46449/3-empty-3072.patch new file mode 100644 index 000000000..0f4e6cb8d --- /dev/null +++ b/collector/benchmarks/issue-46449/3-empty-3072.patch @@ -0,0 +1,13 @@ +diff --git a/src/lib.rs b/src/lib.rs +index f8f91d6..72382a0 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -3,7 +3,7 @@ extern crate futures; + use futures::{Future, Poll}; + + const BUFFER_SIZE: usize = 3072; +-pub struct Error(u8); ++pub struct Error; + + struct Dummy(T); + impl Future for Dummy { diff --git a/collector/benchmarks/issue-46449/4-static-str-6144.patch b/collector/benchmarks/issue-46449/4-static-str-6144.patch new file mode 100644 index 000000000..1a3ae1c46 --- /dev/null +++ b/collector/benchmarks/issue-46449/4-static-str-6144.patch @@ -0,0 +1,15 @@ +diff --git a/src/lib.rs b/src/lib.rs +index 72382a0..5d8fc67 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -2,8 +2,8 @@ extern crate futures; + + use futures::{Future, Poll}; + +-const BUFFER_SIZE: usize = 3072; +-pub struct Error; ++const BUFFER_SIZE: usize = 6144; ++pub struct Error(&'static str); + + struct Dummy(T); + impl Future for Dummy { diff --git a/collector/benchmarks/issue-46449/Cargo.lock b/collector/benchmarks/issue-46449/Cargo.lock new file mode 100644 index 000000000..e3f5bbe94 --- /dev/null +++ b/collector/benchmarks/issue-46449/Cargo.lock @@ -0,0 +1,14 @@ +[[package]] +name = "futures" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "issue-46649-byte-filling-slowing-down-sroa" +version = "0.1.0" +dependencies = [ + "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "118b49cac82e04121117cbd3121ede3147e885627d82c4546b87c702debb90c1" diff --git a/collector/benchmarks/issue-46449/Cargo.toml b/collector/benchmarks/issue-46449/Cargo.toml new file mode 100644 index 000000000..a6cadf023 --- /dev/null +++ b/collector/benchmarks/issue-46449/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "issue-46649-byte-filling-slowing-down-sroa" +version = "0.1.0" + +[dependencies] +futures = "=0.1.17" diff --git a/collector/benchmarks/issue-46449/README.md b/collector/benchmarks/issue-46449/README.md new file mode 100644 index 000000000..ccae8e87d --- /dev/null +++ b/collector/benchmarks/issue-46449/README.md @@ -0,0 +1,10 @@ +Performance test to track . + +| Patch | 1.22.1 | 1.23.0-beta.2 | Note | +|-------------------|---------------|---------------|---------------------------------------------------------------| +| (baseline) | Fast (~1s) | Fast (~1s) | Make the depedencies available. Should finish very quickly. | +| 0-io-error-6144 | Fast (~1s) | Slow (~16s) | This is the reduced test case of the original bug report | +| 1-u32-3072 | Slow (~21s) | Fast (~1s) | Length reduced to 3072 to avoid taking too much time. | +| 2-u8-3072 | Slow (~21s) | Fast (~1s) | | +| 3-empty-3072 | Slow (~20s) | Slow (~27s) | | +| 4-static-str-6144 | Slow (~22s) | Medium (~8s) | Length increased back to 6144 as this is faster. | diff --git a/collector/benchmarks/issue-46449/src/lib.rs b/collector/benchmarks/issue-46449/src/lib.rs new file mode 100644 index 000000000..435ded8f6 --- /dev/null +++ b/collector/benchmarks/issue-46449/src/lib.rs @@ -0,0 +1,24 @@ +extern crate futures; + +use futures::{Future, Poll}; + +const BUFFER_SIZE: usize = 1; +pub struct Error(::std::io::Error); + +struct Dummy(T); +impl Future for Dummy { + type Item = T; + type Error = Error; + fn poll(&mut self) -> Poll { + loop {} + } +} + +pub fn run() -> Box> { + let c2s = Dummy([0u8; BUFFER_SIZE]).then(move |_| Ok(0)); + let s2c = Dummy(()).then(move |_| Ok(0)); + let fut = c2s.select(s2c) + .and_then(move |_| Ok(())) + .map_err(|(err, _)| err); + Box::new(fut) +}