Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Unified Diff: icu46/source/test/perf/convperf/convperf.h

Issue 5516007: Check in the pristine copy of ICU 4.6... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « icu46/source/test/perf/convperf/Makefile.in ('k') | icu46/source/test/perf/convperf/convperf.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: icu46/source/test/perf/convperf/convperf.h
===================================================================
--- icu46/source/test/perf/convperf/convperf.h (revision 0)
+++ icu46/source/test/perf/convperf/convperf.h (revision 0)
@@ -0,0 +1,568 @@
+/*
+**********************************************************************
+* Copyright (c) 2002-2005, International Business Machines
+* Corporation and others. All Rights Reserved.
+**********************************************************************
+**********************************************************************
+*/
+#ifndef _CONVPERF_H
+#define _CONVPERF_H
+
+#include <mlang.h>
+#include <objbase.h>
+#include <stdlib.h>
+#include "unicode/ucnv.h"
+#include "unicode/uclean.h"
+#include "unicode/ustring.h"
+
+#include "unicode/uperf.h"
+
+#define CONVERSION_FLAGS (0) /*WC_DEFAULTCHAR WC_COMPOSITECHECK & WC_SEPCHARS*/
+#define MAX_BUF_SIZE 3048
+#define LENGTHOF(array) (sizeof(array)/sizeof((array)[0]))
+
+class ICUToUnicodePerfFunction : public UPerfFunction{
+private:
+ UConverter* conv;
+ const char* src;
+ int32_t srcLen;
+ UChar* target;
+ UChar* targetLimit;
+
+public:
+ ICUToUnicodePerfFunction(const char* name, const char* source, int32_t sourceLen, UErrorCode& status){
+ conv = ucnv_open(name,&status);
+ src = source;
+ srcLen = sourceLen;
+ if(U_FAILURE(status)){
+ conv = NULL;
+ return;
+ }
+ target = NULL;
+ targetLimit = NULL;
+ int32_t reqdLen = ucnv_toUChars(conv, target, 0,
+ source, srcLen, &status);
+ if(status==U_BUFFER_OVERFLOW_ERROR) {
+ status=U_ZERO_ERROR;
+ target=(UChar*)malloc((reqdLen) * U_SIZEOF_UCHAR*2);
+ targetLimit = target + reqdLen;
+ if(target == NULL){
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+ }
+ virtual void call(UErrorCode* status){
+ const char* mySrc = src;
+ const char* sourceLimit = src + srcLen;
+ UChar* myTarget = target;
+ ucnv_toUnicode(conv, &myTarget, targetLimit, &mySrc, sourceLimit, NULL, TRUE, status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+ ~ICUToUnicodePerfFunction(){
+ free(target);
+ ucnv_close(conv);
+ }
+};
+class ICUFromUnicodePerfFunction : public UPerfFunction{
+private:
+ UConverter* conv;
+ const UChar* src;
+ int32_t srcLen;
+ char* target;
+ char* targetLimit;
+ const char* name;
+
+public:
+ ICUFromUnicodePerfFunction(const char* name, const UChar* source, int32_t sourceLen, UErrorCode& status){
+ conv = ucnv_open(name,&status);
+ src = source;
+ srcLen = sourceLen;
+ if(U_FAILURE(status)){
+ conv = NULL;
+ return;
+ }
+ target = NULL;
+ targetLimit = NULL;
+ int32_t reqdLen = ucnv_fromUChars(conv, target, 0,
+ source, srcLen, &status);
+ if(status==U_BUFFER_OVERFLOW_ERROR) {
+ status=U_ZERO_ERROR;
+ target=(char*)malloc((reqdLen*2));
+ targetLimit = target + reqdLen;
+ if(target == NULL){
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+ }
+ virtual void call(UErrorCode* status){
+ const UChar* mySrc = src;
+ const UChar* sourceLimit = src + srcLen;
+ char* myTarget = target;
+ ucnv_fromUnicode(conv,&myTarget, targetLimit, &mySrc, sourceLimit, NULL, TRUE, status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+ ~ICUFromUnicodePerfFunction(){
+ free(target);
+ ucnv_close(conv);
+ }
+};
+
+class ICUOpenAllConvertersFunction : public UPerfFunction{
+private:
+ UBool cleanup;
+ int32_t availableConverters;
+ const char **convNames;
+public:
+ ICUOpenAllConvertersFunction(UBool callCleanup, UErrorCode& status){
+ int32_t idx;
+ cleanup = callCleanup;
+ availableConverters = ucnv_countAvailable();
+ convNames = new const char *[availableConverters];
+ for (idx = 0; idx < availableConverters; idx++) {
+ convNames[idx] = ucnv_getAvailableName(idx);
+ }
+ }
+ virtual void call(UErrorCode* status){
+ int32_t idx;
+ if (cleanup) {
+ u_cleanup();
+ }
+ for (idx = 0; idx < availableConverters; idx++) {
+ ucnv_close(ucnv_open(convNames[idx], status));
+ }
+ }
+ virtual long getOperationsPerIteration(void){
+ return availableConverters;
+ }
+ ~ICUOpenAllConvertersFunction(){
+ delete []convNames;
+ }
+};
+
+class WinANSIToUnicodePerfFunction : public UPerfFunction{
+
+private:
+ DWORD uiCodePage;
+ char* src;
+ UINT srcLen;
+ WCHAR dest[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* name;
+public:
+ WinANSIToUnicodePerfFunction(const char* cpName, char* pszIn,UINT szLen, UErrorCode& status){
+ name = cpName;
+ src = pszIn;
+ srcLen = szLen;
+ dstLen = LENGTHOF(dest);
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ LPMULTILANGUAGE2 pMulti;
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+
+
+ MIMECSETINFO mimeInfo;
+
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+ /* get the charset info */
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ uiCodePage = (mimeInfo.uiInternetEncoding==0)?mimeInfo.uiCodePage:mimeInfo.uiInternetEncoding;
+ }
+ virtual void call(UErrorCode* status){
+ int winSize =MultiByteToWideChar(uiCodePage,CONVERSION_FLAGS,src,srcLen,dest,dstLen);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+
+class WinANSIFromUnicodePerfFunction : public UPerfFunction{
+
+private:
+ DWORD uiCodePage;
+ WCHAR* src;
+ UINT srcLen;
+ char dest[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* name;
+ BOOL lpUsedDefaultChar;
+
+public:
+ WinANSIFromUnicodePerfFunction(const char* cpName, WCHAR* pszIn,UINT szLen, UErrorCode& status){
+ name = cpName;
+ src = pszIn;
+ srcLen = szLen;
+ dstLen = LENGTHOF(dest);
+ lpUsedDefaultChar=FALSE;
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ LPMULTILANGUAGE2 pMulti;
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+
+
+ MIMECSETINFO mimeInfo;
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+ /* get the charset info */
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ uiCodePage = (mimeInfo.uiInternetEncoding==0)?mimeInfo.uiCodePage:mimeInfo.uiInternetEncoding;
+ }
+ virtual void call(UErrorCode* status){
+ BOOL* pUsedDefaultChar =(uiCodePage==CP_UTF8)?NULL:&lpUsedDefaultChar;
+ int winSize = WideCharToMultiByte(uiCodePage,CONVERSION_FLAGS,src,srcLen,dest,dstLen,NULL, pUsedDefaultChar);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+static inline void getErr(HRESULT err, UErrorCode& status){
+
+ switch (err){
+
+ case S_OK:
+ //printf("Operation %s successful\n",operation);
+ break;
+ case S_FALSE:
+ status = U_INTERNAL_PROGRAM_ERROR;
+ break;
+ case E_FAIL:
+ status = U_ILLEGAL_CHAR_FOUND;
+ }
+}
+class WinIMultiLanguageToUnicodePerfFunction : public UPerfFunction{
+
+private:
+ LPMULTILANGUAGE2 pMulti;
+ LPMLANGCONVERTCHARSET pConvToUni;
+ char* src;
+ UINT srcLen;
+ WCHAR dst[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* cpName;
+
+public:
+ WinIMultiLanguageToUnicodePerfFunction(const char* name,char* source, UINT sourceLen, UErrorCode& status){
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+
+
+ MIMECSETINFO mimeInfo;
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+ HRESULT err=S_OK;
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ /* get the charset info */
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ pMulti->CreateConvertCharset(mimeInfo.uiCodePage, 1200 /*unicode*/, (DWORD)0,&pConvToUni);
+ getErr(err,status);
+ src = source;
+ srcLen = sourceLen;
+ dstLen = LENGTHOF(dst);
+ cpName = name;
+ }
+
+ virtual void call(UErrorCode* status){
+ HRESULT err= pConvToUni->DoConversionToUnicode(src,&srcLen,dst, &dstLen);
+ getErr(err,*status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+
+class WinIMultiLanguageFromUnicodePerfFunction : public UPerfFunction{
+
+private:
+ LPMULTILANGUAGE2 pMulti;
+ LPMLANGCONVERTCHARSET pConvFromUni;
+ WCHAR* src;
+ UINT srcLen;
+ char dst[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* cpName;
+
+public:
+ WinIMultiLanguageFromUnicodePerfFunction(const char* name,WCHAR* source, UINT sourceLen, UErrorCode& status){
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+
+
+ MIMECSETINFO mimeInfo;
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+ HRESULT err=S_OK;
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ /* get the charset info */
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ pMulti->CreateConvertCharset(1200 /*unicode*/, mimeInfo.uiCodePage, (DWORD)0,&pConvFromUni);
+ getErr(err,status);
+ src = source;
+ srcLen = sourceLen;
+ dstLen = LENGTHOF(dst);
+ cpName = name;
+
+ }
+
+ virtual void call(UErrorCode* status){
+ HRESULT err= pConvFromUni->DoConversionFromUnicode(src,&srcLen,dst, &dstLen);
+ getErr(err,*status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+
+class WinIMultiLanguage2ToUnicodePerfFunction : public UPerfFunction{
+
+private:
+ LPMULTILANGUAGE2 pMulti;
+ char* src;
+ UINT srcLen;
+ WCHAR dst[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* cpName;
+ DWORD dwEnc;
+public:
+ WinIMultiLanguage2ToUnicodePerfFunction(const char* name,char* source, UINT sourceLen, UErrorCode& status){
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+ src = source;
+ srcLen = sourceLen;
+ dstLen = LENGTHOF(dst);
+ cpName = name;
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ /* get the charset info */
+ MIMECSETINFO mimeInfo;
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ dwEnc = (mimeInfo.uiInternetEncoding==0)?mimeInfo.uiCodePage:mimeInfo.uiInternetEncoding;
+ }
+
+ virtual void call(UErrorCode* status){
+ DWORD dwMode=0;
+ HRESULT err= pMulti->ConvertStringToUnicode(&dwMode,dwEnc,(char*)src,&srcLen,dst, &dstLen);
+ getErr(err,*status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+
+class WinIMultiLanguage2FromUnicodePerfFunction : public UPerfFunction{
+
+private:
+ LPMULTILANGUAGE2 pMulti;
+ LPMLANGCONVERTCHARSET pConvFromUni;
+ WCHAR* src;
+ UINT srcLen;
+ char dst[MAX_BUF_SIZE];
+ UINT dstLen;
+ const char* cpName;
+ DWORD dwEnc;
+
+public:
+ WinIMultiLanguage2FromUnicodePerfFunction(const char* name,WCHAR* source, UINT sourceLen, UErrorCode& status){
+
+ CoInitialize(NULL);
+
+ /* create instance of converter object*/
+ CoCreateInstance(
+ __uuidof(CMultiLanguage),
+ NULL,
+ CLSCTX_SERVER,
+ __uuidof(IMultiLanguage2),
+ (void**)&pMulti
+ );
+
+
+ unsigned short bEnc[30]={'\0'};
+ const char* tenc=name;
+ for(int i=0;*tenc!='\0';i++){
+ bEnc[i]=*tenc;
+ tenc++;
+ }
+ src = source;
+ srcLen = sourceLen;
+ dstLen = LENGTHOF(dst);
+ cpName = name;
+ /* get the charset info */
+ MIMECSETINFO mimeInfo;
+ mimeInfo.uiCodePage = 0;
+ mimeInfo.uiInternetEncoding =0;
+
+ pMulti->GetCharsetInfo((wchar_t *)bEnc,&mimeInfo);
+ dwEnc = (mimeInfo.uiInternetEncoding==0)?mimeInfo.uiCodePage:mimeInfo.uiInternetEncoding;
+ }
+
+ virtual void call(UErrorCode* status){
+ DWORD dwMode=0;
+ HRESULT err= pMulti->ConvertStringFromUnicode(&dwMode,dwEnc,src,&srcLen,dst, &dstLen);
+ getErr(err,*status);
+ }
+ virtual long getOperationsPerIteration(void){
+ return srcLen;
+ }
+};
+
+class ConverterPerformanceTest : public UPerfTest{
+
+public:
+
+ ConverterPerformanceTest(int32_t argc, const char* argv[], UErrorCode& status);
+ ~ConverterPerformanceTest();
+ virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec,const char* &name, char* par = NULL);
+
+ UPerfFunction* TestICU_CleanOpenAllConverters();
+ UPerfFunction* TestICU_OpenAllConverters();
+
+ UPerfFunction* TestICU_UTF8_ToUnicode();
+ UPerfFunction* TestICU_UTF8_FromUnicode();
+ UPerfFunction* TestWinANSI_UTF8_ToUnicode();
+ UPerfFunction* TestWinANSI_UTF8_FromUnicode();
+ UPerfFunction* TestWinIML2_UTF8_ToUnicode();
+ UPerfFunction* TestWinIML2_UTF8_FromUnicode();
+
+ UPerfFunction* TestICU_Latin1_ToUnicode();
+ UPerfFunction* TestICU_Latin1_FromUnicode();
+ UPerfFunction* TestWinANSI_Latin1_ToUnicode();
+ UPerfFunction* TestWinANSI_Latin1_FromUnicode();
+ UPerfFunction* TestWinIML2_Latin1_ToUnicode();
+ UPerfFunction* TestWinIML2_Latin1_FromUnicode();
+
+ UPerfFunction* TestICU_EBCDIC_Arabic_ToUnicode();
+ UPerfFunction* TestICU_EBCDIC_Arabic_FromUnicode();
+ UPerfFunction* TestWinANSI_EBCDIC_Arabic_ToUnicode();
+ UPerfFunction* TestWinANSI_EBCDIC_Arabic_FromUnicode();
+ UPerfFunction* TestWinIML2_EBCDIC_Arabic_ToUnicode();
+ UPerfFunction* TestWinIML2_EBCDIC_Arabic_FromUnicode();
+
+ UPerfFunction* TestICU_Latin8_ToUnicode();
+ UPerfFunction* TestICU_Latin8_FromUnicode();
+ UPerfFunction* TestWinANSI_Latin8_ToUnicode();
+ UPerfFunction* TestWinANSI_Latin8_FromUnicode();
+ UPerfFunction* TestWinIML2_Latin8_ToUnicode();
+ UPerfFunction* TestWinIML2_Latin8_FromUnicode();
+
+
+ UPerfFunction* TestICU_SJIS_ToUnicode();
+ UPerfFunction* TestICU_SJIS_FromUnicode();
+ UPerfFunction* TestWinANSI_SJIS_ToUnicode();
+ UPerfFunction* TestWinANSI_SJIS_FromUnicode();
+ UPerfFunction* TestWinIML2_SJIS_ToUnicode();
+ UPerfFunction* TestWinIML2_SJIS_FromUnicode();
+
+ UPerfFunction* TestICU_EUCJP_ToUnicode();
+ UPerfFunction* TestICU_EUCJP_FromUnicode();
+ UPerfFunction* TestWinANSI_EUCJP_ToUnicode();
+ UPerfFunction* TestWinANSI_EUCJP_FromUnicode();
+ UPerfFunction* TestWinIML2_EUCJP_ToUnicode();
+ UPerfFunction* TestWinIML2_EUCJP_FromUnicode();
+
+ UPerfFunction* TestICU_GB2312_ToUnicode();
+ UPerfFunction* TestICU_GB2312_FromUnicode();
+ UPerfFunction* TestWinANSI_GB2312_ToUnicode();
+ UPerfFunction* TestWinANSI_GB2312_FromUnicode();
+ UPerfFunction* TestWinIML2_GB2312_ToUnicode();
+ UPerfFunction* TestWinIML2_GB2312_FromUnicode();
+
+
+ UPerfFunction* TestICU_ISO2022KR_ToUnicode();
+ UPerfFunction* TestICU_ISO2022KR_FromUnicode();
+ UPerfFunction* TestWinANSI_ISO2022KR_ToUnicode();
+ UPerfFunction* TestWinANSI_ISO2022KR_FromUnicode();
+ UPerfFunction* TestWinIML2_ISO2022KR_ToUnicode();
+ UPerfFunction* TestWinIML2_ISO2022KR_FromUnicode();
+
+ UPerfFunction* TestICU_ISO2022JP_ToUnicode();
+ UPerfFunction* TestICU_ISO2022JP_FromUnicode();
+ UPerfFunction* TestWinANSI_ISO2022JP_ToUnicode();
+ UPerfFunction* TestWinANSI_ISO2022JP_FromUnicode();
+ UPerfFunction* TestWinIML2_ISO2022JP_ToUnicode();
+ UPerfFunction* TestWinIML2_ISO2022JP_FromUnicode();
+
+};
+
+#endif
+
Property changes on: icu46/source/test/perf/convperf/convperf.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « icu46/source/test/perf/convperf/Makefile.in ('k') | icu46/source/test/perf/convperf/convperf.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698