-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdwrite_benchmark.rs
93 lines (81 loc) · 3.66 KB
/
dwrite_benchmark.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use criterion::{criterion_group, criterion_main, Criterion};
use dwrite_benchmarks::*;
use std::{ffi::OsStr, os::windows::prelude::OsStrExt};
const FONT_FILE: &str = "OpenSans-Regular.ttf";
fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("DWriteCreateFactory", |b| {
b.iter(|| unsafe { create_factory() })
});
c.bench_function("IDWriteFactory.CreateTextFormat", |b| {
let factory = unsafe { create_factory() };
let font_family_name = utf16_str("Times New Roman").as_ptr();
let locale_name = utf16_str("en-us").as_ptr();
b.iter(|| unsafe { create_text_format(factory, font_family_name, locale_name) });
});
c.bench_function("IDWriteFactory.CreateNumberSubstitution", |b| {
let factory = unsafe { create_factory() };
let locale_name = utf16_str("en-us").as_ptr();
b.iter(|| unsafe { create_number_substituion(factory, locale_name) });
});
c.bench_function("IDWriteFactory.CreateFontFileReference", |b| {
let factory = unsafe { create_factory() };
let font_file_name_ptr = utf16_str(FONT_FILE).as_ptr();
b.iter(|| unsafe { create_font_file(factory, font_file_name_ptr) });
});
c.bench_function("IDWriteFactory.CreateFontFace", |b| {
let factory = unsafe { create_factory() };
let font_file_name_ptr = utf16_str(FONT_FILE).as_ptr();
let font_file = unsafe { create_font_file(factory, font_file_name_ptr) };
b.iter(|| unsafe { create_font_face(factory, &font_file) });
});
c.bench_function("IDWriteFactory.CreateTextAnalyzer", |b| {
let factory = unsafe { create_factory() };
b.iter(|| unsafe { create_text_analyzer(factory) });
});
// TODO / FIXME: Segmentation fault
/*c.bench_function("IDWriteTextAnalyzer.GetGlyphs", |b| {
let factory = unsafe { create_factory() };
let analyzer = unsafe { create_text_analyzer(factory) };
let locale_name = utf16_str("en-us").as_ptr();
let font_file_name_ptr = utf16_str(FONT_FILE).as_ptr();
let font_file = unsafe { create_font_file(factory, font_file_name_ptr) };
let font_face = unsafe { create_font_face(factory, &font_file) };
let number_substition = unsafe { create_number_substituion(factory, locale_name) };
let text = "Lorem ipsum dolor sit amet";
let text_ptr = utf16_str(text).as_mut_ptr();
let text_len = text.len() as u32;
b.iter(|| unsafe {
analyzer_get_glyphs(
analyzer,
text_ptr,
text_len,
font_face,
locale_name,
number_substition,
)
});
});*/
// TODO / FIXME: Segmentation fault
/*c.bench_function("IDWriteTextAnalyzer.GetGlyphPlacements", |b| {
let factory = unsafe { create_factory() };
let analyzer = unsafe { create_text_analyzer(factory) };
let locale_name = utf16_str("en-us").as_ptr();
let font_file_name_ptr = utf16_str(FONT_FILE).as_ptr();
let font_file = unsafe { create_font_file(factory, font_file_name_ptr) };
let font_face = unsafe { create_font_face(factory, &font_file) };
let text = "Lorem ipsum dolor sit amet";
let text_ptr = utf16_str(text).as_mut_ptr();
let text_len = text.len() as u32;
b.iter(|| unsafe {
analyzer_get_glyph_placements(analyzer, text_ptr, text_len, font_face, locale_name);
});
});*/
}
fn utf16_str(s: &str) -> Vec<u16> {
OsStr::new(s)
.encode_wide()
.chain(Some(0).into_iter())
.collect::<Vec<_>>()
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);