123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include <vector>
- #include "bench/Benchmark.h"
- #include "include/core/SkFont.h"
- #include "include/core/SkTypeface.h"
- #include "src/core/SkMakeUnique.h"
- #include "src/core/SkUtils.h"
- #include "src/utils/SkUTF.h"
- // From Project Guttenberg. This is UTF-8 text.
- static const char* atext[] = {
- "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 down-town 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 glasses!",
- "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",
- "in. And there they stand--miles of them--leagues. Inlanders all, they come",
- "from lanes and alleys, streets and 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 bake-houses the pyramids. No, when I go to sea, I go as a simple",
- "sailor, right before the mast, plumb down into the forecastle, 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 the 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 aint 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."
- };
- static const char* ctext[] = {
- "第一回",
- "胡秀才告狀鳴冤 施賢臣得夢訪案",
- "",
- " 話說江都縣有一秀才,姓胡,名登舉。他的父母為人所殺,頭顱不見。胡登舉合家",
- "嚇得膽裂魂飛,慌忙出門,去稟縣主。",
- "",
- " 跑到縣衙,正遇升堂,就進去喊冤。走至堂上,打了一躬,手舉呈詞,口稱:「父",
- "師在上,門生禍從天降。叩稟老父師,即賜嚴拿。」說著,將呈詞遞上。書吏接過,鋪",
- "在公案。施公靜心細閱。上寫:具呈生員胡登舉,祖居江都縣。生父曾作翰林,告老家",
- "居,廣行善事,憐恤窮苦,並無苛刻待人之事。不意於某日夜間,生父母閉戶安眠。至",
- "天曉,生往請安,父母俱不言語。生情急,踢開門戶,見父母屍身俱在牀上,兩個人頭",
- ",並沒蹤影。生忝居學校,父母如此死法,何以身列校庠對雙親而無愧乎?為此具呈,",
- "嚎叩老父師大人恩准,速賜拿獲兇手,庶生冤仇得雪。感戴無既。沾仁。上呈。",
- "",
- " 施公看罷,不由點頭,暗暗吃驚,想道:「夤夜入院,非奸即盜。胡翰林夫婦年老",
- "被殺,而不竊去財物,且將人頭拿去,其中情由,顯係仇謀。此宗無題文章,令人如何",
- "做法?」為難良久,說道:「即委捕廳四老爺,前去驗屍。你只管入殮,自有頭緒結斷",
- "。」胡秀才一聽,只得含淚下堂,出衙回家,伺候驗屍。",
- "",
- " 且說施公吩咐速去知會四衙,往胡家驗屍呈報,把呈詞收入袖內,吩咐退堂。進內",
- "書房坐下,長隨送茶畢,用過了飯,把呈詞取出,鋪在案上翻閱。低頭細想,此案難結",
- "。欠身伸手,在書架上拿了古書一部,係《拍案稱奇》,放在桌上要看;對證此案,即",
- "日好斷這沒頭之事。將《拍案稱奇》,自頭至尾看完,又取了一部,係海瑞參拿嚴嵩的",
- "故事。不覺困倦,放下書本,伏於書案之上,朦朧打睡。夢中看見外邊牆頭之下,有群",
- "黃雀兒九隻,點頭搖尾,唧哩喳啦,不住亂叫。施公一見,心中甚驚。又聽見地上哼哼",
- "唧唧的豬叫;原來是油光兒的七個小豬兒,望著賢臣亂叫。施公夢中稱奇,方要去細看",
- ",那九隻黃雀兒,一齊飛下牆來,與地下七個小豬兒,點頭亂噪。那七個小豬兒,站起",
- "身來,望黃雀拱抓,口內哼哼亂叫。雀噪豬叫,偶然起了一陣怪風,把豬雀都裹了去了",
- "。施公夢中一聲驚覺,大叫說:「奇怪的事!」施安在旁邊站立,見主人如此驚叫,不",
- "知何故,連忙叫:「老爺醒來!醒來!」施公聽言,抬頭睜眼,沉吟多時。想夢中之事",
- ",說:「奇哉!怪哉!」就問施安這天有多時了。施安答道:「日色西沉了。」施公點",
- "頭,又問:「方才你可見些什麼東西沒有?」施安說:「並沒見什麼東西,倒有一陣風",
- "刮過牆去。」施公聞言,心中細想,這九隻黃雀、七個小豬奇怪,想來內有曲情。將書",
- "擱在架上,前思後想,一夜未睡。直到天明,淨面整衣,吩咐傳梆升堂。坐下,抽籤叫",
- "快頭英公然、張子仁上來。二人走至堂上,跪下叩頭。施公就將昨日夢見九隻黃雀、七",
- "個小豬為題出簽差人,說:「限你二人五日之期,將九黃、七豬拿來,如若遲延,重責",
- "不饒。」將簽遞於二人。二人跪趴半步,口稱:「老爺容稟:小的們請個示來。",
- "",
- " 這九黃、七豬,是兩個人名,還是兩個物名,現在何處?求老爺吩咐明白,小的們",
- "好去訪拿。」言罷叩頭。施公一聽,說道:「無用奴才,連個九黃、七豬都不知道,還",
- "在本縣應役麼?分明偷閒躲懶,安心抗差玩法。」吩咐:「給我拉下去打!」兩邊發喊",
- "按倒,每人打了十五板。二人跪下叩頭,復又討示,叫聲:「老爺,究竟吩咐明白,待",
- "小的們好去拿人。」施公聞言,心中不由大怒,說:「好大膽的奴才!本縣深知你二人",
- "久慣應役,極會搪塞,如敢再行囉唣,定加重責!」二人聞言,萬分無奈,站起退下去",
- ",訪拿九黃、七豬而去。施公也隨退堂。",
- "",
- " 施公一連五日,假裝有恙,並未升堂。到了第六日,一早吩咐點鼓升堂,坐下。衙",
- "役人等伺候。只見一人走至公堂案下,手捧呈詞,口稱:「父師,門生胡登舉父母被殺",
- "之冤,求父師明鑒。倘遲久不獲,兇犯走脫難捉。且生員讀書一場,豈不有愧?如門生",
- "另去投呈伸冤,老父台那時休怨!」言罷一躬,將呈遞上。施公帶笑道:「賢契不必急",
- "躁。本縣已經差人明捕暗訪,專拿形跡可疑之人,審得自然替你申冤。」胡登舉無奈,",
- "說道:「父台!速替門生伸冤,感恩不盡!」施公說:「賢契請回,催呈留下。」胡登",
- "舉打躬下堂,出衙回家。且說施公為難多會,方要提胡宅管家的審問,只見公差英公然",
- "、張子仁上堂,跪下回稟:「小的二人,並訪不著九黃、七豬,求老爺寬限。」",
- "",
- " 施公聞言,激惱成怒,喝叫左右拉下,每人打十五大板。不容分說,只打的哀求不",
- "止,鮮血直流。打完提褲,戰戰兢兢,跪在地下,口尊:「老爺,叩討明示,以便好去",
- "捉人。」施公聞言無奈,硬著心腸說道:「再寬你們三日限期,如其再不捉拿兇犯,定",
- "行處死!」二差聞言,篩糠打戰,只是磕頭,如雞食碎米一般。施公又說:「你們不必",
- "多說,快快去捕要緊。」施公想二役兩次受刑,亦覺心中不忍,退堂進內。可憐二人還",
- "在下面叩頭,大叫:「老爺,可憐小的們性命罷!」言畢,又是咚咚的叩頭。縣堂上未",
- "散的三班六房之人,見二人這樣,個個兔死狐悲,歎惜不止,一齊說:「罷呀!起來罷",
- "!老爺進去了,還求那個?」二人聞言,抬頭不看見老爺,忍氣站起,腿帶棒傷,身形",
- "晃亂。旁邊上來四個人,用手挽架下堂。"};
- class UtfToGlyph : public Benchmark {
- public:
- UtfToGlyph(SkTextEncoding encoding, const char* (*text), int lineCount, const char* name)
- : fEncoding{encoding}
- , fText{text}
- , fLineCount{lineCount}
- , fName{name} { }
- protected:
- const char* onGetName() override {
- return fName;
- }
- bool isSuitableFor(Backend backend) override {
- return backend == kNonRendering_Backend;
- }
- void onDelayedSetup() override {
- int maxGlyphs = 0;
- for (int i = 0; i < fLineCount; i++) {
- fLines.emplace_back(this->convertLine(i));
- maxGlyphs = std::max(maxGlyphs, fLines.back()->glyphCount);
- }
- fGlyphIds.insert(fGlyphIds.begin(), maxGlyphs, 0);
- fTypeface = SkTypeface::MakeFromName("monospace", SkFontStyle());
- }
- void onDraw(int loops, SkCanvas* canvas) override {
- SkFont font(fTypeface);
- // Do more loops to reduce variance.
- for (int i = 0; i < loops * 3; ++i) {
- for (auto& line : fLines) {
- font.textToGlyphs(line->utf.data(), line->utf.size(), fEncoding,
- fGlyphIds.data(), line->glyphCount);
- }
- }
- }
- private:
- struct Line {
- int glyphCount = 0;
- std::vector<char> utf;
- };
- std::unique_ptr<Line> convertLine(int lineIndex) {
- std::unique_ptr<Line> result = skstd::make_unique<Line>();
- const char* cursor = fText[lineIndex];
- size_t len = strlen(cursor);
- const char* end = cursor + len;
- result->glyphCount = SkUTF::CountUTF8(cursor, len);
- std::vector<char>& bytes = result->utf;
- while (cursor < end) {
- SkUnichar u = SkUTF::NextUTF8(&cursor, end);
- switch (fEncoding) {
- case SkTextEncoding::kUTF8: {
- char buffer[SkUTF::kMaxBytesInUTF8Sequence];
- size_t count = SkUTF::ToUTF8(u, buffer);
- result->utf.insert(bytes.end(), buffer, buffer + count);
- break;
- }
- case SkTextEncoding::kUTF16: {
- uint16_t buffer[2];
- size_t count = SkUTF::ToUTF16(u, buffer);
- result->utf.insert(bytes.end(), (char *)buffer, (char *)buffer + count * 2);
- break;
- }
- case SkTextEncoding::kUTF32: {
- result->utf.insert(bytes.end(), (char*) &u, (char*) &u + 4);
- break;
- }
- default:
- SK_ABORT("Bad encoding");
- }
- }
- return result;
- }
- SkTextEncoding fEncoding;
- std::vector<std::unique_ptr<Line>> fLines;
- std::vector<SkGlyphID> fGlyphIds;
- sk_sp<SkTypeface> fTypeface;
- const char* (*fText);
- int fLineCount;
- const char* fName;
- };
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF32, ctext, SK_ARRAY_COUNT(ctext),
- "SkTypefaceUTF32ToGlyphCN");)
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF16, ctext, SK_ARRAY_COUNT(ctext),
- "SkTypefaceUTF16ToGlyphCN");)
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF8, ctext, SK_ARRAY_COUNT(ctext),
- "SkTypefaceUTF8ToGlyphCN");)
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF32, atext, SK_ARRAY_COUNT(atext),
- "SkTypefaceUTF32ToGlyphAscii");)
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF16, atext, SK_ARRAY_COUNT(atext),
- "SkTypefaceUTF16ToGlyphAscii");)
- DEF_BENCH(return new UtfToGlyph(SkTextEncoding::kUTF8, atext, SK_ARRAY_COUNT(atext),
- "SkTypefaceUTF8ToGlyphAscii");)
|