]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/perf/leperf/leperf.cpp
ICU-531.30.tar.gz
[apple/icu.git] / icuSources / test / perf / leperf / leperf.cpp
diff --git a/icuSources/test/perf/leperf/leperf.cpp b/icuSources/test/perf/leperf/leperf.cpp
new file mode 100644 (file)
index 0000000..3881904
--- /dev/null
@@ -0,0 +1,120 @@
+/***************************************************************************
+*
+*   Copyright (C) 2013, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+************************************************************************/
+
+#include "unicode/utimer.h"
+#include "unicode/ustdio.h"
+#include "layout/LETypes.h"
+#include "layout/LayoutEngine.h"
+#include "layout/LEScripts.h"
+#include "SimpleFontInstance.h"
+#include "PortableFontInstance.h"
+
+class Params {
+public:
+  LEFontInstance *font;
+  LEUnicode *chars;
+  le_int32 charLen;
+  ScriptCodes script;
+  le_int32 glyphCount;
+};
+
+LEUnicode     ArabChars[] = {
+        0x0045, 0x006E, 0x0067, 0x006C, 0x0069, 0x0073, 0x0068, 0x0020, // "English "
+        0x0645, 0x0627, 0x0646, 0x062A, 0x0648, 0x0634,                 // MEM ALIF KAF NOON TEH WAW SHEEN
+        0x0020, 0x0074, 0x0065, 0x0078, 0x0074, 0x02E, 0                   // " text."
+    };
+
+void iterate(void * p) {
+  Params* params = (Params*) p;
+
+    LEErrorCode status = LE_NO_ERROR;
+    LEFontInstance *font = params->font;
+    LayoutEngine *engine = LayoutEngine::layoutEngineFactory(font, params->script, -1, status);
+    LEGlyphID *glyphs    = NULL;
+    le_int32  *indices   = NULL;
+    float     *positions = NULL;
+    le_int32   glyphCount = 0;
+    LEUnicode *chars = params->chars;
+    glyphCount = engine->layoutChars(chars, 0, params->charLen, params->charLen, TRUE, 0.0, 0.0, status);
+    glyphs    = LE_NEW_ARRAY(LEGlyphID, glyphCount + 10);
+    indices   = LE_NEW_ARRAY(le_int32, glyphCount + 10);
+    positions = LE_NEW_ARRAY(float, glyphCount + 10);
+    engine->getGlyphs(glyphs, status);
+    params->glyphCount = glyphCount;
+    
+    
+    delete glyphs;
+    delete indices;
+    delete positions;
+    delete engine;
+    //delete font;
+}
+
+int main(int argc, const char *argv[]) {
+  double len=10.0;
+  for(int i=1;i<argc;i++) {
+    puts("arg:");
+    puts(argv[i]);
+    if(argv[i][0]=='p') {
+      printf("hit enter-pid=%d", getpid());
+      getchar();
+    } else if(argv[i][0]>='0' && argv[i][0]<='9') {
+      len = (1.0)*(argv[i][0]-'0');
+    }
+  }
+  u_printf("leperf: Testing %s for %.fs...\n", U_ICU_VERSION, len);
+  LEErrorCode status = LE_NO_ERROR;
+  //uloc_setDefault("en_US", &status);
+  Params p;
+
+#if 0  
+  p.script = arabScriptCode;
+  p.chars = ArabChars;
+  p.charLen = sizeof(ArabChars)/sizeof(ArabChars[0]);
+#else
+  p.script = latnScriptCode;
+  p.chars = new LEUnicode[257];
+  for(int i=0;i<256;i++) {
+    p.chars[i] = i+1;
+  }
+  p.chars[256] = 0;
+  p.charLen = 256;
+#endif
+  
+  int32_t loopCount;
+  double timeTaken;
+  double timeNs;
+#if 0
+  p.font = new SimpleFontInstance(12, status);
+  u_printf("leperf: Running SFI...\r");
+  timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p);
+  u_printf("leperf: SFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTaken, 1000000000.0*(timeTaken/(double)loopCount), (int32_t)loopCount);
+  delete p.font;
+#endif
+    PortableFontInstance *font;
+    LEErrorCode fontStatus = LE_NO_ERROR;
+    const char *fontPath = "myfont.ttf";
+
+    font = new PortableFontInstance(fontPath, 12, fontStatus);
+
+    p.font = font;
+    loopCount=0;
+    u_printf("leperf: testing %s\n", fontPath);
+    u_printf("leperf: Running ...\r");
+  timeTaken = utimer_loopUntilDone(len, &loopCount, iterate, &p);
+  timeNs = 1000000000.0*(timeTaken/(double)loopCount);
+  u_printf("leperf: PFI .. took %.fs %.2fns/ea\nleperf: .. iter= %d\n", timeTaken, timeNs, (int32_t)loopCount);
+  u_printf("leperf: DATA|\"%s\"|%.2f|\n", U_ICU_VERSION, timeNs);
+  u_printf("leperf: glyphs=%d\n", p.glyphCount);
+  return 0;
+}
+
+// hack - #include these for easier build.
+#include "SimpleFontInstance.cpp"
+#include "PortableFontInstance.cpp"
+#include "cmaps.cpp"
+#include "FontTableCache.cpp"