Add benchmark for text layout and tesselation
This commit is contained in:
parent
f5431f308a
commit
1c415bd8fe
4 changed files with 46 additions and 4 deletions
|
@ -1,5 +1,7 @@
|
||||||
use criterion::{criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
|
||||||
|
use egui_demo_lib::LOREM_IPSUM_LONG;
|
||||||
|
|
||||||
pub fn criterion_benchmark(c: &mut Criterion) {
|
pub fn criterion_benchmark(c: &mut Criterion) {
|
||||||
let raw_input = egui::RawInput::default();
|
let raw_input = egui::RawInput::default();
|
||||||
|
|
||||||
|
@ -47,12 +49,45 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||||
egui::CentralPanel::default().show(&ctx, |ui| {
|
egui::CentralPanel::default().show(&ctx, |ui| {
|
||||||
c.bench_function("label", |b| {
|
c.bench_function("label", |b| {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
ui.label(egui_demo_lib::LOREM_IPSUM_LONG);
|
ui.label(LOREM_IPSUM_LONG);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
let _ = ctx.end_frame();
|
let _ = ctx.end_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let pixels_per_point = 1.0;
|
||||||
|
let wrap_width = 512.0;
|
||||||
|
let text_style = egui::TextStyle::Body;
|
||||||
|
let fonts = egui::paint::text::Fonts::from_definitions(
|
||||||
|
pixels_per_point,
|
||||||
|
egui::FontDefinitions::default(),
|
||||||
|
);
|
||||||
|
let font = &fonts[text_style];
|
||||||
|
c.bench_function("text layout", |b| {
|
||||||
|
b.iter(|| font.layout_multiline(LOREM_IPSUM_LONG.to_owned(), wrap_width))
|
||||||
|
});
|
||||||
|
|
||||||
|
let galley = font.layout_multiline(LOREM_IPSUM_LONG.to_owned(), wrap_width);
|
||||||
|
let mut tesselator = egui::paint::Tessellator::from_options(Default::default());
|
||||||
|
let mut mesh = egui::paint::Mesh::default();
|
||||||
|
c.bench_function("tesselate text", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
let fake_italics = false;
|
||||||
|
tesselator.tessellate_text(
|
||||||
|
&fonts,
|
||||||
|
egui::Pos2::ZERO,
|
||||||
|
&galley,
|
||||||
|
text_style,
|
||||||
|
egui::Color32::WHITE,
|
||||||
|
fake_italics,
|
||||||
|
&mut mesh,
|
||||||
|
);
|
||||||
|
mesh.clear();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group!(benches, criterion_benchmark);
|
criterion_group!(benches, criterion_benchmark);
|
||||||
|
|
|
@ -63,7 +63,7 @@ pub use {
|
||||||
shape::Shape,
|
shape::Shape,
|
||||||
stats::PaintStats,
|
stats::PaintStats,
|
||||||
stroke::Stroke,
|
stroke::Stroke,
|
||||||
tessellator::TessellationOptions,
|
tessellator::{TessellationOptions, Tessellator},
|
||||||
text::{Galley, TextStyle},
|
text::{Galley, TextStyle},
|
||||||
texture_atlas::{Texture, TextureAtlas},
|
texture_atlas::{Texture, TextureAtlas},
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,6 +45,13 @@ impl Mesh {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Restore to default state, but without freeing memory.
|
||||||
|
pub fn clear(&mut self) {
|
||||||
|
self.indices.clear();
|
||||||
|
self.vertices.clear();
|
||||||
|
self.vertices = Default::default();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn bytes_used(&self) -> usize {
|
pub fn bytes_used(&self) -> usize {
|
||||||
std::mem::size_of::<Self>()
|
std::mem::size_of::<Self>()
|
||||||
+ self.vertices.len() * std::mem::size_of::<Vertex>()
|
+ self.vertices.len() * std::mem::size_of::<Vertex>()
|
||||||
|
|
|
@ -218,8 +218,8 @@ impl Font {
|
||||||
/// `\n` will (intentionally) show up as the replacement character.
|
/// `\n` will (intentionally) show up as the replacement character.
|
||||||
fn glyph_info(&self, c: char) -> (FontIndex, GlyphInfo) {
|
fn glyph_info(&self, c: char) -> (FontIndex, GlyphInfo) {
|
||||||
{
|
{
|
||||||
if let Some(glyph_info) = self.glyph_info_cache.read().get(&c) {
|
if let Some(font_index_glyph_info) = self.glyph_info_cache.read().get(&c) {
|
||||||
return *glyph_info;
|
return *font_index_glyph_info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue