16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#!/usr/bin/perl
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#  ********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#  * COPYRIGHT:
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#  * Copyright (c) 2002-2013, International Business Machines Corporation and
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#  * others. All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#  ********************************************************************
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgrequire "../perldriver/Common.pl";
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguse lib '../perldriver';
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy $p;
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgif ($OnWindows) {
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $p = "cd ".$ICULatest."/bin && ".$ICUPathLatest . "/collationperf/$WindowsPlatform/Release/collationperf.exe";
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgelse {
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $p = "LD_LIBRARY_PATH=".$ICULatest."/source/lib:".$ICULatest."/source/tools/ctestfw ".$ICUPathLatest . "/collationperf/collperf";
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy @locale = (
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "en_US",
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "da_DK",
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "de_DE",
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "fr_FR",
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ja_JP",
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ja_JP",
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ja_JP",
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ja_JP",
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "zh_CN",
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "zh_CN",
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "zh_CN",
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "zh_TW",
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "zh_TW",
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ko_KR",
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ko_KR",
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ru_RU",
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "ru_RU",
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "th_TH",
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    "th_TH"
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org);
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy $filePath   = $CollationDataPath . "/";
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy $filePrefix = "TestNames_";
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy @data       = (
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Japanese_h.txt",
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Japanese_k.txt",
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Asian.txt",
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Chinese.txt",
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Simplified_Chinese.txt",
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Chinese.txt",
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Korean.txt",
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Russian.txt",
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Latin.txt",
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $filePrefix."Thai.txt"
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org);
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy @resultPER;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmy @resultFIN;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfor ( $n = 0 ; $n < @data ; $n++ ) {
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my $resultICU;
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my $resultNIX;
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultICU = @locale[$n].",".@data[$n].",";
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultNIX = @locale[$n].",".@data[$n].",";
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @resultFIN[$n] = @locale[$n].",".@data[$n].",";
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #quicksort
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @icu = `$p -locale @locale[$n] -loop 1000 -file $filePath@data[$n] -qsort`;
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @nix = `$p -locale @locale[$n] -unix -loop 1000 -file $filePath@data[$n] -qsort`;
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @icua = split( ' = ', $icu[2] );
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @icub = split( ' ',   $icua[1] );
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @nixa = split( ' = ', $nix[2] );
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @nixb = split( ' ',   $nixa[1] );
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultICU = $resultICU.$icub[0].",";
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultNIX = $resultNIX.$nixb[0].",";
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #keygen time
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @icu = `$p -locale @locale[$n] -loop 1000 -file $filePath@data[$n] -keygen`;
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @nix = `$p -locale @locale[$n] -unix -loop 1000 -file $filePath@data[$n] -keygen`;
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @icua = split( ' = ', $icu[2] );
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @icub = split( ' ',   $icua[1] );
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @nixa = split( ' = ', $nix[2] );
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @nixb = split( ' ',   $nixa[1] );
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultICU = $resultICU.$icub[0].",";
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultNIX = $resultNIX.$nixb[0].",";
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #keygen len
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @icua = split( ' = ', $icu[3] );
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @nixa = split( ' = ', $nix[3] );
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    chomp( @icua[1] );
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    chomp( @nixa[1] );
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultICU = $resultICU.$icua[1].",";
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $resultNIX = $resultNIX.$nixa[1].",";
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @resultSplitICU;
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my @resultSplitNIX;
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #percent
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for ( $i = 0 ; $i < 3 ; $i++ ) {
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        my $percent = 0;
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        @resultSplitICU = split( ',', $resultICU );
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        @resultSplitNIX = split( ',', $resultNIX );
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if ( @resultSplitICU[ 2 + $i ] > 0 ) {
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            $percent = substr((((
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                @resultSplitNIX[ 2 + $i ] - @resultSplitICU[ 2 + $i ]) / @resultSplitICU[ 2 + $i ]) * 100),
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                0, 7);
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        @resultPER[$n] = @resultPER[$n].$percent."%,";
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #store ICU result
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for ( $j = 0 ; $j < 3 ; $j++ ) {
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        @resultFIN[$n] = @resultFIN[$n].@resultSplitICU[ 2 + $j ].",";
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #store Unix result
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for ( $j = 0 ; $j < 3 ; $j++ ) {
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        @resultFIN[$n] = @resultFIN[$n].@resultSplitNIX[ 2 + $j ].",";
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    #store Percent result
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @resultFIN[$n] = @resultFIN[$n].@resultPER[$n];
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# Print the results in a HTML page
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprintOutput();
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgexit(0);
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# This subroutine creates the web page and prints out the results in a table
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgsub printOutput {
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my $title = "Collation:  ICU " . $ICULatestVersion . " vs GLIBC";
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    my $html  = localtime;
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html =~ s/://g;         # ':' illegal
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html =~ s/\s*\d+$//;    # delete year
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html =~ s/^\w+\s*//;    # delete dow
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html = "CollationPerformance $html.html";
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html = "../results/" . $html;
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    $html =~ s/ /_/g;
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    open( HTML, ">$html" ) or die "Can't write to $html: $!";
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML <<EOF;
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<html xmlns="http://www.w3.org/1999/xhtml">
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<head>
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<title>Collation: ICU4C vs. glibc</title>
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<link rel="stylesheet" href="../icu.css" type="text/css" />
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</head>
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<body>
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<!--#include virtual="../ssi/header.html" -->
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgEOF
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML "<h2>Collation: ICU4C ".$ICULatestVersion." vs. GLIBC</h2>\n";
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML <<EOF;
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<p>The performance test takes a locale and creates a RuleBasedCollator with
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdefault options. A large list of names is used as data in each test, where the
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnames vary according to language. Each Collation operation over the whole list
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgis repeated 1000 times. The percentage values in the final column are the most
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguseful. They measure differences, where positive is better for ICU4C, and
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnegative is better for the compared implementation.</p>
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<h3>Key</h3>
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<table border="1" cellspacing="0" cellpadding="4">
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<tr>
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<th align="left">Operation</th>
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<th align="left">Units</th>
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<th align="left">Description</th>
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</tr>
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<tr>
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>strcoll</td>
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>nanosecs</td>
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>Timing for string collation, an incremental compare of strings.</td>
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</tr>
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<tr>
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>keygen</td>
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>nanosecs</td>
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>Timing for generation of sort keys, used to 'precompile' information so
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgthat subsequent operations can use binary comparison.</td>
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</tr>
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<tr>
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>keylen</td>
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>bytes/char</td>
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td>The average length of the generated sort keys, in bytes per character
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org(Unicode/ISO 10646 code point). Generally this is the important field for sort
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgkey performance, since it directly impacts the time necessary for binary
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgcomparison, and the overhead of memory usage and retrieval time for sort
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgkeys.</td>
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</tr>
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</table>
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgEOF
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    printData();
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML <<EOF;
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<h3><i>Notes</i></h3>
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<ol>
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<li>As with all performance measurements, the results will vary according to
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgthe hardware and compiler. The strcoll operation is particularly sensitive; we
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orghave found that even slight changes in code alignment can produce 10%
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdifferences.</li>
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<li>For more information on incremental vs. sort key comparison, the importance
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgof multi-level sorting, and other features of collation, see <a href=
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org"http://www.unicode.org/reports/tr10/">Unicode Collation (UCA)</a>.</li>
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<li>For general information on ICU collation see <a href=
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org"/userguide/Collate_Intro.html">User Guide</a>.</li>
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<li>For information on APIs, see <a href="/apiref/icu4c/ucol_8h.html">C</a>,
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<a href="/apiref/icu4c/classCollator.html">C++</a>, or <a href=
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org"/apiref/icu4j/com/ibm/icu/text/Collator.html">Java</a>.</li>
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</ol>
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<!--#include virtual="../ssi/footer.html" -->
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</body>
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</html>
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgEOF
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    close(HTML) or die "Can't close $html: $!";
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# This subroutine formats and prints the table.
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgsub printData() {
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML <<EOF;
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<h3>Data</h3>
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<table border="1" cellspacing="0" cellpadding="4">
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<tr>
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>Locale</b></td>
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>Data file</b></td>
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>strcoll</b> <i>(ICU)</i></td>
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keygen</b> <i>(ICU)</i></td>
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keylen</b> <i>(ICU)</i></td>
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>strcoll</b> <i>(GLIBC)</i></td>
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keygen</b> <i>(GLIBC)</i></td>
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keylen</b> <i>(GLIBC)</i></td>
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>strcoll</b> <i>(GLIBC-ICU)/ICU)</i></td>
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keygen</b> <i>(GLIBC-ICU)/ICU)</i></td>
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org<td align="left"><b>keylen</b> <i>(GLIBC-ICU)/ICU)</i></td>
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</tr>
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgEOF
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for ( $n = 0 ; $n < @resultFIN ; $n++ ) {
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        print HTML "<tr>";
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        my @parsed = split( ',', @resultFIN[$n] );
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for ( $i = 0 ; $i < @parsed ; $i++ ) {
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            my $value = @parsed[$i];
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            print HTML "<td align=\"center\">";
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if ( $value =~ m/^[-]/ ) {
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                print HTML "<font color=\"red\">$value</font>";
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            else {
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                print HTML "$value";
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            print HTML "</td>";
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        print HTML "</tr>\n";
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    print HTML<<EOF;
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org</table>
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgEOF
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
278