diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs index 010862ac0..64c59d705 100644 --- a/benches/benchmarks.rs +++ b/benches/benchmarks.rs @@ -2,40 +2,43 @@ use std::cell::RefCell; use std::rc::Rc; use criterion::{criterion_group, criterion_main, Criterion}; -use fontdock::fs::{FsIndex, FsProvider}; +use fontdock::fs::{FsIndex, FsSource}; +use futures_executor::block_on; use typstc::eval::{eval, State}; use typstc::font::FontLoader; +use typstc::layout::layout; use typstc::parse::parse; use typstc::typeset; const FONT_DIR: &str = "fonts"; const COMA: &str = include_str!("../tests/coma.typ"); -fn parse_benchmark(c: &mut Criterion) { - c.bench_function("parse-coma", |b| b.iter(|| parse(COMA))); -} - -fn eval_benchmark(c: &mut Criterion) { - let tree = parse(COMA).output; +fn benchmarks(c: &mut Criterion) { let state = State::default(); - c.bench_function("eval-coma", |b| b.iter(|| eval(&tree, state.clone()))); -} -fn typeset_benchmark(c: &mut Criterion) { let mut index = FsIndex::new(); index.search_dir(FONT_DIR); - let (descriptors, files) = index.into_vecs(); - let provider = FsProvider::new(files); - let loader = FontLoader::new(Box::new(provider), descriptors); - let loader = Rc::new(RefCell::new(loader)); + let (files, descriptors) = index.into_vecs(); + let loader = Rc::new(RefCell::new(FontLoader::new( + Box::new(FsSource::new(files)), + descriptors, + ))); - let state = State::default(); + let tree = parse(COMA).output; + let document = eval(&tree, state.clone()).output; + let _ = block_on(layout(&document, Rc::clone(&loader))); + + c.bench_function("parse-coma", |b| b.iter(|| parse(COMA))); + c.bench_function("eval-coma", |b| b.iter(|| eval(&tree, state.clone()))); + c.bench_function("layout-coma", |b| { + b.iter(|| block_on(layout(&document, Rc::clone(&loader)))) + }); c.bench_function("typeset-coma", |b| { - b.iter(|| typeset(COMA, state.clone(), Rc::clone(&loader))) + b.iter(|| block_on(typeset(COMA, state.clone(), Rc::clone(&loader)))) }); } -criterion_group!(benches, parse_benchmark, eval_benchmark, typeset_benchmark); +criterion_group!(benches, benchmarks); criterion_main!(benches); diff --git a/main/src/main.rs b/main/src/main.rs index c2bc6d132..832849b84 100644 --- a/main/src/main.rs +++ b/main/src/main.rs @@ -4,7 +4,7 @@ use std::io::BufWriter; use std::path::{Path, PathBuf}; use std::rc::Rc; -use fontdock::fs::{FsIndex, FsProvider}; +use fontdock::fs::{FsIndex, FsSource}; use futures_executor::block_on; use typstc::diag::{Feedback, Pass}; @@ -38,10 +38,11 @@ fn main() { index.search_dir("fonts"); index.search_os(); - let (descriptors, files) = index.into_vecs(); - let provider = FsProvider::new(files); - let loader = FontLoader::new(Box::new(provider), descriptors); - let loader = Rc::new(RefCell::new(loader)); + let (files, descriptors) = index.into_vecs(); + let loader = Rc::new(RefCell::new(FontLoader::new( + Box::new(FsSource::new(files)), + descriptors, + ))); let state = State::default(); let Pass { diff --git a/src/font.rs b/src/font.rs index 9901ff1c8..513c31f15 100644 --- a/src/font.rs +++ b/src/font.rs @@ -3,17 +3,17 @@ use std::cell::RefCell; use std::rc::Rc; -use fontdock::{ContainsChar, FaceFromVec, FontProvider}; +use fontdock::{ContainsChar, FaceFromVec, FontSource}; use ttf_parser::Face; -/// A reference-counted shared font loader backed by a dynamic font provider. +/// A reference-counted shared font loader backed by a dynamic font source. pub type SharedFontLoader = Rc>; -/// A font loader backed by a dynamic provider. -pub type FontLoader = fontdock::FontLoader>; +/// A font loader backed by a dynamic source. +pub type FontLoader = fontdock::FontLoader>; -/// The dynamic font provider backing the font loader. -pub type DynProvider = dyn FontProvider; +/// The dynamic font source. +pub type DynSource = dyn FontSource; /// An owned font face. pub struct OwnedFace { diff --git a/src/layout/text.rs b/src/layout/text.rs index 7d8386a16..a4156fd3f 100644 --- a/src/layout/text.rs +++ b/src/layout/text.rs @@ -35,8 +35,7 @@ impl Layout for Text { self.dir, &self.families, self.variant, - ) - .await, + ), self.aligns, )] } diff --git a/src/shaping.rs b/src/shaping.rs index 5c718acb8..83cc0cf11 100644 --- a/src/shaping.rs +++ b/src/shaping.rs @@ -61,7 +61,7 @@ impl Debug for Shaped { /// Shape text into a box containing [`Shaped`] runs. /// /// [`Shaped`]: struct.Shaped.html -pub async fn shape( +pub fn shape( loader: &mut FontLoader, text: &str, font_size: Length, @@ -84,7 +84,7 @@ pub async fn shape( for c in chars { let query = FaceQuery { fallback: fallback.iter(), variant, c }; - if let Some((id, owned_face)) = loader.query(query).await { + if let Some((id, owned_face)) = loader.query(query) { let face = owned_face.get(); let (glyph, width) = match lookup_glyph(face, c, font_size) { Some(v) => v, diff --git a/tests/test_typeset.rs b/tests/test_typeset.rs index e70447459..df2e7b363 100644 --- a/tests/test_typeset.rs +++ b/tests/test_typeset.rs @@ -6,7 +6,7 @@ use std::io::BufWriter; use std::path::Path; use std::rc::Rc; -use fontdock::fs::{FsIndex, FsProvider}; +use fontdock::fs::{FsIndex, FsSource}; use futures_executor::block_on; use raqote::{DrawTarget, PathBuilder, SolidSource, Source, Transform, Vector}; use ttf_parser::OutlineBuilder; @@ -59,10 +59,11 @@ fn main() { let mut index = FsIndex::new(); index.search_dir(FONT_DIR); - let (descriptors, files) = index.into_vecs(); - let provider = FsProvider::new(files); - let loader = FontLoader::new(Box::new(provider), descriptors); - let loader = Rc::new(RefCell::new(loader)); + let (files, descriptors) = index.into_vecs(); + let loader = Rc::new(RefCell::new(FontLoader::new( + Box::new(FsSource::new(files)), + descriptors, + ))); for (name, path, src) in filtered { test(&name, &src, &path, &loader)