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