Benches: Add picture and encoder to create_tag benchmark

This commit is contained in:
Serial 2023-10-23 12:49:41 -04:00 committed by Alex
parent af3b98d441
commit 66c63afb97
2 changed files with 97 additions and 19 deletions

BIN
benches/assets/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

View file

@ -5,12 +5,14 @@ use lofty::iff::aiff::AIFFTextChunks;
use lofty::iff::wav::RIFFInfoList;
use lofty::mp4::Ilst;
use lofty::ogg::VorbisComments;
use lofty::{Accessor, TagExt};
use lofty::{Accessor, MimeType, Picture, PictureType, TagExt};
use criterion::{criterion_group, criterion_main, Criterion};
const ENCODER: &str = "Lavf57.56.101";
macro_rules! bench_tag_write {
($c:ident, [$(($NAME:literal, $tag:ty)),+ $(,)?]) => {
($c:ident, [$(($NAME:literal, $tag:ty, |$tag_:ident| $extra_block:block)),+ $(,)?]) => {
let mut g = $c.benchmark_group("Tag writing");
$(
@ -18,17 +20,16 @@ macro_rules! bench_tag_write {
$NAME,
|b| b.iter(|| {
let mut v = Vec::new();
let mut tag = <$tag>::default();
let mut $tag_ = <$tag>::default();
tag.set_artist(String::from("Dave Eddy"));
tag.set_title(String::from("TempleOS Hymn Risen (Remix)"));
tag.set_album(String::from("Summer"));
tag.set_year(2017);
tag.set_track_number(1);
tag.set_genre(String::from("Electronic"));
// TODO: Front cover
// TODO: Encoder
tag.dump_to(&mut v).unwrap();
$tag_.set_artist(String::from("Dave Eddy"));
$tag_.set_title(String::from("TempleOS Hymn Risen (Remix)"));
$tag_.set_album(String::from("Summer"));
$tag_.set_year(2017);
$tag_.set_track(1);
$tag_.set_genre(String::from("Electronic"));
$extra_block
$tag_.dump_to(&mut v).unwrap();
})
);
)+
@ -39,13 +40,90 @@ fn bench_write(c: &mut Criterion) {
bench_tag_write!(
c,
[
("AIFF Text Chunks", AIFFTextChunks),
("APEv2", ApeTag),
("ID3v2", Id3v2Tag),
("ID3v1", Id3v1Tag),
("MP4 Ilst", Ilst),
("RIFF INFO", RIFFInfoList),
("Vorbis Comments", VorbisComments),
("AIFF Text Chunks", AIFFTextChunks, |tag| {}),
("APEv2", ApeTag, |tag| {
use lofty::ape::ApeItem;
use lofty::ItemValue;
let picture = Picture::new_unchecked(
PictureType::CoverFront,
MimeType::Jpeg,
None,
include_bytes!("assets/cover.jpg").to_vec(),
);
tag.insert(
ApeItem::new(
String::from("Cover (Front)"),
ItemValue::Binary(picture.as_ape_bytes()),
)
.unwrap(),
);
tag.insert(
ApeItem::new(
String::from("Encoder"),
ItemValue::Text(String::from(ENCODER)),
)
.unwrap(),
);
}),
("ID3v2", Id3v2Tag, |tag| {
use lofty::id3::v2::{Frame, FrameFlags, TextInformationFrame};
use lofty::TextEncoding;
let picture = Picture::new_unchecked(
PictureType::CoverFront,
MimeType::Jpeg,
None,
include_bytes!("assets/cover.jpg").to_vec(),
);
tag.insert_picture(picture);
tag.insert(
Frame::new(
"TSSE",
TextInformationFrame {
encoding: TextEncoding::Latin1,
value: String::from(ENCODER),
},
FrameFlags::default(),
)
.unwrap(),
);
}),
("ID3v1", Id3v1Tag, |tag| {}),
("MP4 Ilst", Ilst, |tag| {
use lofty::mp4::{Atom, AtomData, AtomIdent};
let picture = Picture::new_unchecked(
PictureType::CoverFront,
MimeType::Jpeg,
None,
include_bytes!("assets/cover.jpg").to_vec(),
);
tag.insert_picture(picture);
tag.insert(Atom::new(
AtomIdent::Fourcc(*b"\xa9too"),
AtomData::UTF8(String::from(ENCODER)),
));
}),
("RIFF INFO", RIFFInfoList, |tag| {
tag.insert(String::from("ISFT"), String::from(ENCODER));
}),
("Vorbis Comments", VorbisComments, |tag| {
use lofty::ogg::OggPictureStorage;
let picture = Picture::new_unchecked(
PictureType::CoverFront,
MimeType::Jpeg,
None,
include_bytes!("assets/cover.jpg").to_vec(),
);
let _ = tag.insert_picture(picture, None).unwrap();
tag.push(String::from("ENCODER"), String::from(ENCODER));
}),
]
);
}