Add benchmarks to accurately gauge improvements
Signed-off-by: John Nunley <dev@notgull.net>
This commit is contained in:
parent
64e469718b
commit
99d3d71a0f
2 changed files with 263 additions and 0 deletions
|
|
@ -47,7 +47,14 @@ wasm-web = ["sys-locale?/js"]
|
|||
warn_on_missing_glyphs = []
|
||||
fontconfig = ["fontdb/fontconfig"]
|
||||
|
||||
[[bench]]
|
||||
name = "layout"
|
||||
harness = false
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
"examples/*",
|
||||
]
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = { version = "0.5.1", default-features = false, features = ["cargo_bench_support"] }
|
||||
|
|
|
|||
256
benches/layout.rs
Normal file
256
benches/layout.rs
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
use cosmic_text as ct;
|
||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||
|
||||
fn load_font_system(c: &mut Criterion) {
|
||||
c.bench_function("load FontSystem", |b| {
|
||||
b.iter(|| black_box(ct::FontSystem::new()))
|
||||
});
|
||||
}
|
||||
|
||||
fn layout(c: &mut Criterion) {
|
||||
let mut fs = ct::FontSystem::new();
|
||||
let mut buffer = ct::Buffer::new(&mut fs, ct::Metrics::new(10.0, 10.0));
|
||||
buffer.set_size(&mut fs, 80.0, f32::MAX);
|
||||
|
||||
for (wrap_name, wrap) in &[
|
||||
("None", ct::Wrap::None),
|
||||
("Glyph", ct::Wrap::Glyph),
|
||||
("Word", ct::Wrap::Word),
|
||||
] {
|
||||
for (shape_name, shape) in &[
|
||||
("Simple", ct::Shaping::Basic),
|
||||
("Advanced", ct::Shaping::Advanced),
|
||||
] {
|
||||
let mut group = c.benchmark_group(format!("Wrap({wrap_name}, {shape_name})"));
|
||||
buffer.set_wrap(&mut fs, *wrap);
|
||||
|
||||
let mut run_on_text = |text: &str| {
|
||||
buffer.lines.clear();
|
||||
buffer.set_text(&mut fs, text, ct::Attrs::new(), *shape);
|
||||
buffer.shape_until_scroll(&mut fs);
|
||||
};
|
||||
|
||||
group.bench_function("small amount of text", |b| {
|
||||
b.iter(|| {
|
||||
run_on_text("Hello, world!");
|
||||
});
|
||||
});
|
||||
|
||||
group.bench_function("large amount of text", |b| {
|
||||
b.iter(|| {
|
||||
run_on_text(FIRST_CHAPTER_OF_MOBY_DICK);
|
||||
});
|
||||
});
|
||||
|
||||
group.bench_function("arabic text", |b| {
|
||||
b.iter(|| {
|
||||
run_on_text(include_str!("../sample/arabic.txt"));
|
||||
})
|
||||
});
|
||||
|
||||
// Reduce the sample count for these next ones.
|
||||
// If we can optimize the layout for these, remove this line.
|
||||
group.sample_size(10);
|
||||
|
||||
group.bench_function("hebrew text", |b| {
|
||||
b.iter(|| {
|
||||
run_on_text(include_str!("../sample/hebrew.txt"));
|
||||
})
|
||||
});
|
||||
|
||||
group.bench_function("emoji text", |b| {
|
||||
b.iter(|| {
|
||||
run_on_text(include_str!("../sample/emoji.txt"));
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
criterion_group!(benches, layout, load_font_system);
|
||||
|
||||
criterion_main!(benches);
|
||||
|
||||
const FIRST_CHAPTER_OF_MOBY_DICK: &str = r#"
|
||||
Call me Ishmael. Some years ago- never mind how long precisely- having little
|
||||
or no money in my purse, and nothing particular to interest me on shore, I
|
||||
thought I would sail about a little and see the watery part of the world. It is
|
||||
a way I have of driving off the spleen and regulating the circulation. Whenever
|
||||
I find myself growing grim about the mouth; whenever it is a damp, drizzly
|
||||
November in my soul; whenever I find myself involuntarily pausing before coffin
|
||||
warehouses, and bringing up the rear of every funeral I meet; and especially
|
||||
whenever my hypos get such an upper hand of me, that it requires a strong moral
|
||||
principle to prevent me from deliberately stepping into the street, and
|
||||
methodically knocking people’s hats off- then, I account it high time to get
|
||||
to sea as soon as I can. This is my substitute for pistol and ball. With a
|
||||
philosophical flourish Cato throws himself upon his sword; I quietly take to
|
||||
the ship. There is nothing surprising in this. If they but knew it, almost all
|
||||
men in their degree, some time or other, cherish very nearly the same feelings
|
||||
towards the ocean with me.
|
||||
|
||||
There now is your insular city of the Manhattoes, belted round by wharves as
|
||||
Indian isles by coral reefs- commerce surrounds it with her surf. Right and
|
||||
left, the streets take you waterward. Its extreme downtown is the battery,
|
||||
where that noble mole is washed by waves, and cooled by breezes, which a few
|
||||
hours previous were out of sight of land. Look at the crowds of water-gazers
|
||||
there.
|
||||
|
||||
Circumambulate the city of a dreamy Sabbath afternoon. Go from Corlears Hook to
|
||||
Coenties Slip, and from thence, by Whitehall, northward. What do you see?-
|
||||
Posted like silent sentinels all around the town, stand thousands upon
|
||||
thousands of mortal men fixed in ocean reveries. Some leaning against the
|
||||
spiles; some seated upon the pier-heads; some looking over the bulwarks of
|
||||
ships from China; some high aloft in the rigging, as if striving to get a still
|
||||
better seaward peep. But these are all landsmen; of week days pent up in lath
|
||||
and plaster- tied to counters, nailed to benches, clinched to desks. How then
|
||||
is this? Are the green fields gone? What do they here?
|
||||
|
||||
But look! here come more crowds, pacing straight for the water, and seemingly
|
||||
bound for a dive. Strange! Nothing will content them but the extremest limit of
|
||||
the land; loitering under the shady lee of yonder warehouses will not suffice.
|
||||
No. They must get just as nigh the water as they possibly can without falling
|
||||
And there they stand- miles of them- leagues. Inlanders all, they come from
|
||||
lanes and alleys, streets avenues- north, east, south, and west. Yet here they
|
||||
all unite. Tell me, does the magnetic virtue of the needles of the compasses of
|
||||
all those ships attract them thither?
|
||||
|
||||
Once more. Say you are in the country; in some high land of lakes. Take almost
|
||||
any path you please, and ten to one it carries you down in a dale, and leaves
|
||||
you there by a pool in the stream. There is magic in it. Let the most
|
||||
absent-minded of men be plunged in his deepest reveries- stand that man on his
|
||||
legs, set his feet a-going, and he will infallibly lead you to water, if water
|
||||
there be in all that region. Should you ever be athirst in the great American
|
||||
desert, try this experiment, if your caravan happen to be supplied with a
|
||||
metaphysical professor. Yes, as every one knows, meditation and water are
|
||||
wedded for ever.
|
||||
|
||||
But here is an artist. He desires to paint you the dreamiest, shadiest,
|
||||
quietest, most enchanting bit of romantic landscape in all the valley of the
|
||||
Saco. What is the chief element he employs? There stand his trees, each with a
|
||||
hollow trunk, as if a hermit and a crucifix were within; and here sleeps his
|
||||
meadow, and there sleep his cattle; and up from yonder cottage goes a sleepy
|
||||
smoke. Deep into distant woodlands winds a mazy way, reaching to overlapping
|
||||
spurs of mountains bathed in their hill-side blue. But though the picture lies
|
||||
thus tranced, and though this pine-tree shakes down its sighs like leaves upon
|
||||
this shepherd’s head, yet all were vain, unless the shepherd’s eye were
|
||||
fixed upon the magic stream before him. Go visit the Prairies in June, when for
|
||||
scores on scores of miles you wade knee-deep among Tiger-lilies- what is the
|
||||
one charm wanting?- Water- there is not a drop of water there! Were Niagara but
|
||||
a cataract of sand, would you travel your thousand miles to see it? Why did the
|
||||
poor poet of Tennessee, upon suddenly receiving two handfuls of silver,
|
||||
deliberate whether to buy him a coat, which he sadly needed, or invest his
|
||||
money in a pedestrian trip to Rockaway Beach? Why is almost every robust
|
||||
healthy boy with a robust healthy soul in him, at some time or other crazy to
|
||||
go to sea? Why upon your first voyage as a passenger, did you yourself feel
|
||||
such a mystical vibration, when first told that you and your ship were now out
|
||||
of sight of land? Why did the old Persians hold the sea holy? Why did the
|
||||
Greeks give it a separate deity, and own brother of Jove? Surely all this is
|
||||
not without meaning. And still deeper the meaning of that story of Narcissus,
|
||||
who because he could not grasp the tormenting, mild image he saw in the
|
||||
fountain, plunged into it and was drowned. But that same image, we ourselves
|
||||
see in all rivers and oceans. It is the image of the ungraspable phantom of
|
||||
life; and this is the key to it all.
|
||||
|
||||
Now, when I say that I am in the habit of going to sea whenever I begin to grow
|
||||
hazy about the eyes, and begin to be over conscious of my lungs, I do not mean
|
||||
to have it inferred that I ever go to sea as a passenger. For to go as a
|
||||
passenger you must needs have a purse, and a purse is but a rag unless you have
|
||||
something in it. Besides, passengers get sea-sick- grow quarrelsome- don’t
|
||||
sleep of nights- do not enjoy themselves much, as a general thing;- no, I never
|
||||
go as a passenger; nor, though I am something of a salt, do I ever go to sea as
|
||||
a Commodore, or a Captain, or a Cook. I abandon the glory and distinction of
|
||||
such offices to those who like them. For my part, I abominate all honorable
|
||||
respectable toils, trials, and tribulations of every kind whatsoever. It is
|
||||
quite as much as I can do to take care of myself, without taking care of ships,
|
||||
barques, brigs, schooners, and what not. And as for going as cook,- though I
|
||||
confess there is considerable glory in that, a cook being a sort of officer on
|
||||
ship-board- yet, somehow, I never fancied broiling fowls;- though once broiled,
|
||||
judiciously buttered, and judgmatically salted and peppered, there is no one
|
||||
who will speak more respectfully, not to say reverentially, of a broiled fowl
|
||||
than I will. It is out of the idolatrous dotings of the old Egyptians upon
|
||||
broiled ibis and roasted river horse, that you see the mummies of those
|
||||
creatures in their huge bakehouses the pyramids.
|
||||
|
||||
No, when I go to sea, I go as a simple sailor, right before the mast, plumb
|
||||
down into the fore-castle, aloft there to the royal mast-head. True, they
|
||||
rather order me about some, and make me jump from spar to spar, like a
|
||||
grasshopper in a May meadow. And at first, this sort of thing is unpleasant
|
||||
enough. It touches one’s sense of honor, particularly if you come of an old
|
||||
established family in the land, the Van Rensselaers, or Randolphs, or
|
||||
Hardicanutes. And more than all, if just previous to putting your hand into the
|
||||
tar-pot, you have been lording it as a country schoolmaster, making the tallest
|
||||
boys stand in awe of you. The transition is a keen one, I assure you, from a
|
||||
schoolmaster to a sailor, and requires a strong decoction of Seneca and the
|
||||
Stoics to enable you to grin and bear it. But even this wears off in time.
|
||||
|
||||
What of it, if some old hunks of a sea-captain orders me to get a broom and
|
||||
sweep down the decks? What does that indignity amount to, weighed, I mean, in
|
||||
the scales of the New Testament? Do you think the archangel Gabriel thinks
|
||||
anything the less of me, because I promptly and respectfully obey that old
|
||||
hunks in that particular instance? Who ain’t a slave? Tell me that. Well,
|
||||
then, however the old sea-captains may order me about- however they may thump
|
||||
and punch me about, I have the satisfaction of knowing that it is all right;
|
||||
that everybody else is one way or other served in much the same way- either in
|
||||
a physical or metaphysical point of view, that is; and so the universal thump
|
||||
is passed round, and all hands should rub each other’s shoulder-blades, and
|
||||
be content.
|
||||
|
||||
Again, I always go to sea as a sailor, because they make a point of paying me
|
||||
for my trouble, whereas they never pay passengers a single penny that I ever
|
||||
heard of. On the contrary, passengers themselves must pay. And there is all the
|
||||
difference in the world between paying and being paid. The act of paying is
|
||||
perhaps the most uncomfortable infliction that the two orchard thieves entailed
|
||||
upon us. But being paid,- what will compare with it? The urbane activity with
|
||||
which a man receives money is really marvellous, considering that we so
|
||||
earnestly believe money to be the root of all earthly ills, and that on no
|
||||
account can a monied man enter heaven. Ah! how cheerfully we consign ourselves
|
||||
to perdition!
|
||||
|
||||
Finally, I always go to sea as a sailor, because of the wholesome exercise and
|
||||
pure air of the fore-castle deck. For as in this world, head winds are far more
|
||||
prevalent than winds from astern (that is, if you never violate the Pythagorean
|
||||
maxim), so for the most part the Commodore on the quarter-deck gets his
|
||||
atmosphere at second hand from the sailors on the forecastle. He thinks he
|
||||
breathes it first; but not so. In much the same way do the commonalty lead
|
||||
their leaders in many other things, at the same time that the leaders little
|
||||
suspect it. But wherefore it was that after having repeatedly smelt the sea as
|
||||
a merchant sailor, I should now take it into my head to go on a whaling voyage;
|
||||
this the invisible police officer of the Fates, who has the constant
|
||||
surveillance of me, and secretly dogs me, and influences me in some
|
||||
unaccountable way- he can better answer than any one else. And, doubtless, my
|
||||
going on this whaling voyage, formed part of the grand programme of Providence
|
||||
that was drawn up a long time ago. It came in as a sort of brief interlude and
|
||||
solo between more extensive performances. I take it that this part of the bill
|
||||
must have run something like this:
|
||||
|
||||
“Grand Contested Election for the Presidency of the United States.“WHALING
|
||||
VOYAGE BY ONE ISHMAEL.” “BLOODY BATTLE IN AFFGHANISTAN.”
|
||||
|
||||
Though I cannot tell why it was exactly that those stage managers, the Fates,
|
||||
put me down for this shabby part of a whaling voyage, when others were set down
|
||||
for magnificent parts in high tragedies, and short and easy parts in genteel
|
||||
comedies, and jolly parts in farces- though I cannot tell why this was exactly;
|
||||
yet, now that I recall all the circumstances, I think I can see a little into
|
||||
the springs and motives which being cunningly presented to me under various
|
||||
disguises, induced me to set about performing the part I did, besides cajoling
|
||||
me into the delusion that it was a choice resulting from my own unbiased
|
||||
freewill and discriminating judgment.
|
||||
|
||||
Chief among these motives was the overwhelming idea of the great whale himself.
|
||||
Such a portentous and mysterious monster roused all my curiosity. Then the wild
|
||||
and distant seas where he rolled his island bulk; the undeliverable, nameless
|
||||
perils of the whale; these, with all the attending marvels of a thousand
|
||||
Patagonian sights and sounds, helped to sway me to my wish. With other men,
|
||||
perhaps, such things would not have been inducements; but as for me, I am
|
||||
tormented with an everlasting itch for things remote. I love to sail forbidden
|
||||
seas, and land on barbarous coasts. Not ignoring what is good, I am quick to
|
||||
perceive a horror, and could still be social with it- would they let me- since
|
||||
it is but well to be on friendly terms with all the inmates of the place one
|
||||
lodges in.
|
||||
|
||||
By reason of these things, then, the whaling voyage was welcome; the great
|
||||
flood-gates of the wonder-world swung open, and in the wild conceits that
|
||||
swayed me to my purpose, two and two there floated into my inmost soul, endless
|
||||
processions of the whale, and, mid most of them all, one grand hooded phantom,
|
||||
like a snow hill in the air.
|
||||
"#;
|
||||
Loading…
Add table
Add a link
Reference in a new issue