| OLD | NEW |
| (Empty) |
| 1 /*************************************************************************** | |
| 2 * | |
| 3 * Copyright (C) 2013, International Business Machines | |
| 4 * Corporation and others. All Rights Reserved. | |
| 5 * | |
| 6 ************************************************************************/ | |
| 7 | |
| 8 #include "unicode/utimer.h" | |
| 9 #include "unicode/ustdio.h" | |
| 10 #include "layout/LETypes.h" | |
| 11 #include "layout/LayoutEngine.h" | |
| 12 #include "layout/LEScripts.h" | |
| 13 #include "SimpleFontInstance.h" | |
| 14 #include "PortableFontInstance.h" | |
| 15 | |
| 16 class Params { | |
| 17 public: | |
| 18 LEFontInstance *font; | |
| 19 LEUnicode *chars; | |
| 20 le_int32 charLen; | |
| 21 ScriptCodes script; | |
| 22 le_int32 glyphCount; | |
| 23 }; | |
| 24 | |
| 25 LEUnicode ArabChars[] = { | |
| 26 0x0045, 0x006E, 0x0067, 0x006C, 0x0069, 0x0073, 0x0068, 0x0020, // "Engl
ish " | |
| 27 0x0645, 0x0627, 0x0646, 0x062A, 0x0648, 0x0634, // MEM A
LIF KAF NOON TEH WAW SHEEN | |
| 28 0x0020, 0x0074, 0x0065, 0x0078, 0x0074, 0x02E, 0 // "
text." | |
| 29 }; | |
| 30 | |
| 31 void iterate(void * p) { | |
| 32 Params* params = (Params*) p; | |
| 33 | |
| 34 LEErrorCode status = LE_NO_ERROR; | |
| 35 LEFontInstance *font = params->font; | |
| 36 LayoutEngine *engine = LayoutEngine::layoutEngineFactory(font, params->scrip
t, -1, status); | |
| 37 LEGlyphID *glyphs = NULL; | |
| 38 le_int32 *indices = NULL; | |
| 39 float *positions = NULL; | |
| 40 le_int32 glyphCount = 0; | |
| 41 LEUnicode *chars = params->chars; | |
| 42 glyphCount = engine->layoutChars(chars, 0, params->charLen, params->charLen,
TRUE, 0.0, 0.0, status); | |
| 43 glyphs = LE_NEW_ARRAY(LEGlyphID, glyphCount + 10); | |
| 44 indices = LE_NEW_ARRAY(le_int32, glyphCount + 10); | |
| 45 positions = LE_NEW_ARRAY(float, glyphCount + 10); | |
| 46 engine->getGlyphs(glyphs, status); | |
| 47 params->glyphCount = glyphCount; | |
| 48 | |
| 49 | |
| 50 delete glyphs; | |
| 51 delete indices; | |
| 52 delete positions; | |
| 53 delete engine; | |
| 54 //delete font; | |
| 55 } | |
| 56 | |
| 57 int main(int argc, const char *argv[]) { | |
| 58 double len=10.0; | |
| 59 for(int i=1;i<argc;i++) { | |
| 60 puts("arg:"); | |
| 61 puts(argv[i]); | |
| 62 if(argv[i][0]=='p') { | |
| 63 printf("hit enter-pid=%d", getpid()); | |
| 64 getchar(); | |
| 65 } else if(argv[i][0]>='0' && argv[i][0]<='9') { | |
| 66 len = (1.0)*(argv[i][0]-'0'); | |
| 67 } | |
| 68 } | |
| 69 u_printf("leperf: Testing %s for %.fs...\n", U_ICU_VERSION, len); | |
| 70 LEErrorCode status = LE_NO_ERROR; | |
| 71 //uloc_setDefault("en_US", &status); | |
| 72 Params p; | |
| 73 | |
| 74 #if 0 | |
| 75 p.script = arabScriptCode; | |
| 76 p.chars = ArabChars; | |
| 77 p.charLen = sizeof(ArabChars)/sizeof(ArabChars[0]); | |
| 78 #else | |
| 79 p.script = latnScriptCode; | |
| 80 p.chars = new LEUnicode[257]; | |
| 81 for(int i=0;i<256;i++) { | |
| 82 p.chars[i] = i+1; | |
| 83 } | |
| 84 p.chars[256] = 0; | |
| 85 p.charLen = 256; | |
| 86 #endif | |
| 87 | |
| 88 int32_t loopCount; | |
| 89 double timeTaken; | |
| 90 double timeNs; | |
| 91 #if 0 | |
| 92 p.font = new SimpleFontInstance(12, status); | |
| 93 u_printf("leperf: Running SFI...\r"); | |
| 94 timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p); | |
| 95 u_printf("leperf: SFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTake
n, 1000000000.0*(timeTaken/(double)loopCount), (int32_t)loopCount); | |
| 96 delete p.font; | |
| 97 #endif | |
| 98 PortableFontInstance *font; | |
| 99 LEErrorCode fontStatus = LE_NO_ERROR; | |
| 100 const char *fontPath = "myfont.ttf"; | |
| 101 | |
| 102 font = new PortableFontInstance(fontPath, 12, fontStatus); | |
| 103 | |
| 104 p.font = font; | |
| 105 loopCount=0; | |
| 106 u_printf("leperf: testing %s\n", fontPath); | |
| 107 u_printf("leperf: Running ...\r"); | |
| 108 timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p); | |
| 109 timeNs = 1000000000.0*(timeTaken/(double)loopCount); | |
| 110 u_printf("leperf: PFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTake
n, timeNs, (int32_t)loopCount); | |
| 111 u_printf("leperf: DATA|\"%s\"|%.2f|\n", U_ICU_VERSION, timeNs); | |
| 112 u_printf("leperf: glyphs=%d\n", p.glyphCount); | |
| 113 return 0; | |
| 114 } | |
| 115 | |
| 116 // hack - #include these for easier build. | |
| 117 #include "SimpleFontInstance.cpp" | |
| 118 #include "PortableFontInstance.cpp" | |
| 119 #include "cmaps.cpp" | |
| 120 #include "FontTableCache.cpp" | |
| OLD | NEW |