16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*************************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org************************************************************************/ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utimer.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustdio.h" 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LETypes.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LayoutEngine.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LEScripts.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "SimpleFontInstance.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "PortableFontInstance.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Params { 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEFontInstance *font; 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEUnicode *chars; 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 charLen; 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ScriptCodes script; 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 glyphCount; 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgLEUnicode ArabChars[] = { 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0045, 0x006E, 0x0067, 0x006C, 0x0069, 0x0073, 0x0068, 0x0020, // "English " 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0645, 0x0627, 0x0646, 0x062A, 0x0648, 0x0634, // MEM ALIF KAF NOON TEH WAW SHEEN 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0020, 0x0074, 0x0065, 0x0078, 0x0074, 0x02E, 0 // " text." 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid iterate(void * p) { 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Params* params = (Params*) p; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEErrorCode status = LE_NO_ERROR; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEFontInstance *font = params->font; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LayoutEngine *engine = LayoutEngine::layoutEngineFactory(font, params->script, -1, status); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEGlyphID *glyphs = NULL; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 *indices = NULL; 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org float *positions = NULL; 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org le_int32 glyphCount = 0; 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEUnicode *chars = params->chars; 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org glyphCount = engine->layoutChars(chars, 0, params->charLen, params->charLen, TRUE, 0.0, 0.0, status); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org glyphs = LE_NEW_ARRAY(LEGlyphID, glyphCount + 10); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org indices = LE_NEW_ARRAY(le_int32, glyphCount + 10); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org positions = LE_NEW_ARRAY(float, glyphCount + 10); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org engine->getGlyphs(glyphs, status); 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org params->glyphCount = glyphCount; 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete glyphs; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete indices; 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete positions; 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete engine; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //delete font; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint main(int argc, const char *argv[]) { 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double len=10.0; 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=1;i<argc;i++) { 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org puts("arg:"); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org puts(argv[i]); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(argv[i][0]=='p') { 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("hit enter-pid=%d", getpid()); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getchar(); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(argv[i][0]>='0' && argv[i][0]<='9') { 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = (1.0)*(argv[i][0]-'0'); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: Testing %s for %.fs...\n", U_ICU_VERSION, len); 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEErrorCode status = LE_NO_ERROR; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //uloc_setDefault("en_US", &status); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Params p; 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.script = arabScriptCode; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.chars = ArabChars; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.charLen = sizeof(ArabChars)/sizeof(ArabChars[0]); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.script = latnScriptCode; 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.chars = new LEUnicode[257]; 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=0;i<256;i++) { 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.chars[i] = i+1; 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.chars[256] = 0; 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.charLen = 256; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t loopCount; 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double timeTaken; 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double timeNs; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.font = new SimpleFontInstance(12, status); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: Running SFI...\r"); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: SFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTaken, 1000000000.0*(timeTaken/(double)loopCount), (int32_t)loopCount); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete p.font; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org PortableFontInstance *font; 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LEErrorCode fontStatus = LE_NO_ERROR; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *fontPath = "myfont.ttf"; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org font = new PortableFontInstance(fontPath, 12, fontStatus); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p.font = font; 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org loopCount=0; 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: testing %s\n", fontPath); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: Running ...\r"); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org timeNs = 1000000000.0*(timeTaken/(double)loopCount); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: PFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTaken, timeNs, (int32_t)loopCount); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: DATA|\"%s\"|%.2f|\n", U_ICU_VERSION, timeNs); 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_printf("leperf: glyphs=%d\n", p.glyphCount); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// hack - #include these for easier build. 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "SimpleFontInstance.cpp" 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "PortableFontInstance.cpp" 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmaps.cpp" 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "FontTableCache.cpp" 121