Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: remove unnecessary allocation when writing http dates #3261

Merged
merged 5 commits into from
Feb 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- { name: macOS, os: macos-latest, triple: x86_64-apple-darwin }
- { name: Windows, os: windows-latest, triple: x86_64-pc-windows-msvc }
version:
- { name: msrv, version: 1.68.0 }
- { name: msrv, version: 1.70.0 }
- { name: stable, version: stable }

name: ${{ matrix.target.name }} / ${{ matrix.version.name }}
Expand Down Expand Up @@ -54,14 +54,10 @@ jobs:
with:
tool: cargo-hack,cargo-ci-cache-clean

- name: workaround MSRV issues
if: matrix.version.name == 'msrv'
run: |
cargo update -p=ciborium --precise=0.2.1
cargo update -p=ciborium-ll --precise=0.2.1
cargo update -p=clap --precise=4.3.24
cargo update -p=clap_lex --precise=0.5.0
cargo update -p=anstyle --precise=1.0.2
# - name: workaround MSRV issues
# if: matrix.version.name == 'msrv'
# run: |
# cargo update -p=anstyle --precise=1.0.2

- name: check minimal
run: cargo ci-check-min
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ members = [
[workspace.package]
license = "MIT OR Apache-2.0"
edition = "2021"
rust-version = "1.68"
rust-version = "1.70"

[profile.dev]
# Disabling debug info speeds up builds a bunch and we don't rely on it for debugging that much.
Expand Down
2 changes: 2 additions & 0 deletions actix-files/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 0.6.5

- Fix handling of special characters in filenames.
Expand Down
2 changes: 1 addition & 1 deletion actix-files/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[![crates.io](https://img.shields.io/crates/v/actix-files?label=latest)](https://crates.io/crates/actix-files)
[![Documentation](https://docs.rs/actix-files/badge.svg?version=0.6.5)](https://docs.rs/actix-files/0.6.5)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![License](https://img.shields.io/crates/l/actix-files.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-files/0.6.5/status.svg)](https://deps.rs/crate/actix-files/0.6.5)
Expand Down
2 changes: 2 additions & 0 deletions actix-http-test/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 3.2.0

- Minimum supported Rust version (MSRV) is now 1.68 due to transitive `time` dependency.
Expand Down
7 changes: 1 addition & 6 deletions actix-http-test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,11 @@

[![crates.io](https://img.shields.io/crates/v/actix-http-test?label=latest)](https://crates.io/crates/actix-http-test)
[![Documentation](https://docs.rs/actix-http-test/badge.svg?version=3.2.0)](https://docs.rs/actix-http-test/3.2.0)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-http-test)
<br>
[![Dependency Status](https://deps.rs/crate/actix-http-test/3.2.0/status.svg)](https://deps.rs/crate/actix-http-test/3.2.0)
[![Download](https://img.shields.io/crates/d/actix-http-test.svg)](https://crates.io/crates/actix-http-test)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-http-test)
- Minimum Supported Rust Version (MSRV): 1.68
4 changes: 4 additions & 0 deletions actix-http/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

### Changed

- Minimum supported Rust version (MSRV) is now 1.70.

## 3.6.0

### Added
Expand Down
5 changes: 5 additions & 0 deletions actix-http/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ actix-web = "4"

async-stream = "0.3"
criterion = { version = "0.5", features = ["html_reports"] }
divan = "0.1.8"
env_logger = "0.10"
futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] }
memchr = "2.4"
Expand Down Expand Up @@ -153,3 +154,7 @@ required-features = ["http2", "rustls-0_22"]
name = "response-body-compression"
harness = false
required-features = ["compress-brotli", "compress-gzip", "compress-zstd"]

[[bench]]
name = "date-formatting"
harness = false
7 changes: 1 addition & 6 deletions actix-http/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[![crates.io](https://img.shields.io/crates/v/actix-http?label=latest)](https://crates.io/crates/actix-http)
[![Documentation](https://docs.rs/actix-http/badge.svg?version=3.6.0)](https://docs.rs/actix-http/3.6.0)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-http.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-http/3.6.0/status.svg)](https://deps.rs/crate/actix-http/3.6.0)
Expand All @@ -15,11 +15,6 @@

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-http)
- Minimum Supported Rust Version (MSRV): 1.68

## Examples

```rust
Expand Down
20 changes: 20 additions & 0 deletions actix-http/benches/date-formatting.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
use std::time::SystemTime;

use actix_http::header::HttpDate;
use divan::{black_box, AllocProfiler, Bencher};

#[global_allocator]
static ALLOC: AllocProfiler = AllocProfiler::system();

#[divan::bench]
fn date_formatting(b: Bencher<'_, '_>) {
let now = SystemTime::now();

b.bench(|| {
black_box(HttpDate::from(black_box(now)).to_string());
})
}

fn main() {
divan::main();
}
2 changes: 1 addition & 1 deletion actix-http/src/date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl Date {

fn update(&mut self) {
self.pos = 0;
write!(self, "{}", httpdate::fmt_http_date(SystemTime::now())).unwrap();
write!(self, "{}", httpdate::HttpDate::from(SystemTime::now())).unwrap();
}
}

Expand Down
5 changes: 2 additions & 3 deletions actix-http/src/header/shared/http_date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ impl FromStr for HttpDate {

impl fmt::Display for HttpDate {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let date_str = httpdate::fmt_http_date(self.0);
f.write_str(&date_str)
httpdate::HttpDate::from(self.0).fmt(f)
}
}

Expand All @@ -37,7 +36,7 @@ impl TryIntoHeaderValue for HttpDate {
let mut wrt = MutWriter(&mut buf);

// unwrap: date output is known to be well formed and of known length
write!(wrt, "{}", httpdate::fmt_http_date(self.0)).unwrap();
write!(wrt, "{}", self).unwrap();

HeaderValue::from_maybe_shared(buf.split().freeze())
}
Expand Down
2 changes: 2 additions & 0 deletions actix-multipart-derive/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 0.6.1

- Update `syn` dependency to `2`.
Expand Down
7 changes: 1 addition & 6 deletions actix-multipart-derive/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,11 @@

[![crates.io](https://img.shields.io/crates/v/actix-multipart-derive?label=latest)](https://crates.io/crates/actix-multipart-derive)
[![Documentation](https://docs.rs/actix-multipart-derive/badge.svg?version=0.6.1)](https://docs.rs/actix-multipart-derive/0.6.1)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-multipart-derive.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-multipart-derive/0.6.1/status.svg)](https://deps.rs/crate/actix-multipart-derive/0.6.1)
[![Download](https://img.shields.io/crates/d/actix-multipart-derive.svg)](https://crates.io/crates/actix-multipart-derive)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-multipart-derive)
- Minimum Supported Rust Version (MSRV): 1.68
2 changes: 1 addition & 1 deletion actix-multipart-derive/tests/trybuild.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#[rustversion::stable(1.68)] // MSRV
#[rustversion::stable(1.70)] // MSRV
#[test]
fn compile_macros() {
let t = trybuild::TestCases::new();
Expand Down
2 changes: 2 additions & 0 deletions actix-multipart/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 0.6.1

- Minimum supported Rust version (MSRV) is now 1.68 due to transitive `time` dependency.
Expand Down
7 changes: 1 addition & 6 deletions actix-multipart/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,11 @@

[![crates.io](https://img.shields.io/crates/v/actix-multipart?label=latest)](https://crates.io/crates/actix-multipart)
[![Documentation](https://docs.rs/actix-multipart/badge.svg?version=0.6.1)](https://docs.rs/actix-multipart/0.6.1)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-multipart.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-multipart/0.6.1/status.svg)](https://deps.rs/crate/actix-multipart/0.6.1)
[![Download](https://img.shields.io/crates/d/actix-multipart.svg)](https://crates.io/crates/actix-multipart)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-multipart)
- Minimum Supported Rust Version (MSRV): 1.68
2 changes: 2 additions & 0 deletions actix-router/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 0.5.2

- Minimum supported Rust version (MSRV) is now 1.68 due to transitive `time` dependency.
Expand Down
2 changes: 1 addition & 1 deletion actix-router/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[![crates.io](https://img.shields.io/crates/v/actix-router?label=latest)](https://crates.io/crates/actix-router)
[![Documentation](https://docs.rs/actix-router/badge.svg?version=0.5.2)](https://docs.rs/actix-router/0.5.2)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-router.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-router/0.5.2/status.svg)](https://deps.rs/crate/actix-router/0.5.2)
Expand Down
2 changes: 2 additions & 0 deletions actix-test/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 0.1.3

- Add `TestServerConfig::rustls_0_22()` method for Rustls v0.22 support behind new `rustls-0_22` crate feature.
Expand Down
2 changes: 2 additions & 0 deletions actix-web-actors/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 4.3.0

- Minimum supported Rust version (MSRV) is now 1.68 due to transitive `time` dependency.
Expand Down
7 changes: 1 addition & 6 deletions actix-web-actors/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,11 @@

[![crates.io](https://img.shields.io/crates/v/actix-web-actors?label=latest)](https://crates.io/crates/actix-web-actors)
[![Documentation](https://docs.rs/actix-web-actors/badge.svg?version=4.3.0)](https://docs.rs/actix-web-actors/4.3.0)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![License](https://img.shields.io/crates/l/actix-web-actors.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-web-actors/4.3.0/status.svg)](https://deps.rs/crate/actix-web-actors/4.3.0)
[![Download](https://img.shields.io/crates/d/actix-web-actors.svg)](https://crates.io/crates/actix-web-actors)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-web-actors)
- Minimum Supported Rust Version (MSRV): 1.68
2 changes: 2 additions & 0 deletions actix-web-codegen/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 4.2.2

- Fix regression when declaring `wrap` attribute using an expression.
Expand Down
7 changes: 1 addition & 6 deletions actix-web-codegen/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[![crates.io](https://img.shields.io/crates/v/actix-web-codegen?label=latest)](https://crates.io/crates/actix-web-codegen)
[![Documentation](https://docs.rs/actix-web-codegen/badge.svg?version=4.2.2)](https://docs.rs/actix-web-codegen/4.2.2)
![Version](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![Version](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![License](https://img.shields.io/crates/l/actix-web-codegen.svg)
<br />
[![dependency status](https://deps.rs/crate/actix-web-codegen/4.2.2/status.svg)](https://deps.rs/crate/actix-web-codegen/4.2.2)
Expand All @@ -15,11 +15,6 @@

<!-- prettier-ignore-end -->

## Documentation & Resources

- [API Documentation](https://docs.rs/actix-web-codegen)
- Minimum Supported Rust Version (MSRV): 1.68

## Compile Testing

Uses the [`trybuild`] crate. All compile fail tests should include a stderr file generated by `trybuild`. See the [workflow section](https://github.com/dtolnay/trybuild#workflow) of the trybuild docs for info on how to do this.
Expand Down
2 changes: 1 addition & 1 deletion actix-web-codegen/tests/trybuild.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#[rustversion::stable(1.68)] // MSRV
#[rustversion::stable(1.70)] // MSRV
#[test]
fn compile_macros() {
let t = trybuild::TestCases::new();
Expand Down
4 changes: 4 additions & 0 deletions actix-web/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

### Changed

- Minimum supported Rust version (MSRV) is now 1.70.

## 4.5.1

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions actix-web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

[![crates.io](https://img.shields.io/crates/v/actix-web?label=latest)](https://crates.io/crates/actix-web)
[![Documentation](https://docs.rs/actix-web/badge.svg?version=4.5.1)](https://docs.rs/actix-web/4.5.1)
![MSRV](https://img.shields.io/badge/rustc-1.68+-ab6000.svg)
![MSRV](https://img.shields.io/badge/rustc-1.70+-ab6000.svg)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-web.svg)
[![Dependency Status](https://deps.rs/crate/actix-web/4.5.1/status.svg)](https://deps.rs/crate/actix-web/4.5.1)
<br />
Expand Down Expand Up @@ -37,7 +37,7 @@
- SSL support using OpenSSL or Rustls
- Middlewares ([Logger, Session, CORS, etc](https://actix.rs/docs/middleware/))
- Integrates with the [`awc` HTTP client](https://docs.rs/awc/)
- Runs on stable Rust 1.68+
- Runs on stable Rust 1.70+

## Documentation

Expand Down
2 changes: 2 additions & 0 deletions awc/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Minimum supported Rust version (MSRV) is now 1.70.

## 3.4.0

- Add `rustls-0_22-webpki-roots` and `rustls-0_22-native-roots` crate feature.
Expand Down
8 changes: 3 additions & 5 deletions awc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,11 @@

<!-- prettier-ignore-end -->

## Documentation & Resources
## Examples

- [API Documentation](https://docs.rs/awc)
- [Example Project](https://github.com/actix/examples/tree/master/https-tls/awc-https)
- Minimum Supported Rust Version (MSRV): 1.68
[Example project using TLS-enabled client →](https://github.com/actix/examples/tree/master/https-tls/awc-https)

## Example
Basic usage:

```rust
use actix_rt::System;
Expand Down
Loading