You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by pa...@locus.apache.org on 2000/11/03 22:07:29 UTC

cvs commit: xml-xalan/c/Tests/Performance perf.dsw perf.dsp perf.cpp

pauldick    00/11/03 13:07:28

  Added:       c/Tests/Performance perf.dsw perf.dsp perf.cpp
  Log:
  Initial Checkin
  
  Revision  Changes    Path
  1.1                  xml-xalan/c/Tests/Performance/perf.dsw
  
  Index: perf.dsw
  ===================================================================
  Microsoft Developer Studio Workspace File, Format Version 6.00
  # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
  
  ###############################################################################
  
  Project: "perf"=".\perf.dsp" - Package Owner=<4>
  
  Package=<5>
  {{{
  }}}
  
  Package=<4>
  {{{
  }}}
  
  ###############################################################################
  
  Global:
  
  Package=<5>
  {{{
  }}}
  
  Package=<3>
  {{{
  }}}
  
  ###############################################################################
  
  
  
  
  1.1                  xml-xalan/c/Tests/Performance/perf.dsp
  
  Index: perf.dsp
  ===================================================================
  # Microsoft Developer Studio Project File - Name="perf" - Package Owner=<4>
  # Microsoft Developer Studio Generated Build File, Format Version 6.00
  # ** DO NOT EDIT **
  
  # TARGTYPE "Win32 (x86) Console Application" 0x0103
  
  CFG=perf - Win32 Debug
  !MESSAGE This is not a valid makefile. To build this project using NMAKE,
  !MESSAGE use the Export Makefile command and run
  !MESSAGE 
  !MESSAGE NMAKE /f "perf.mak".
  !MESSAGE 
  !MESSAGE You can specify a configuration when running NMAKE
  !MESSAGE by defining the macro CFG on the command line. For example:
  !MESSAGE 
  !MESSAGE NMAKE /f "perf.mak" CFG="perf - Win32 Debug"
  !MESSAGE 
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
  !MESSAGE "perf - Win32 Release" (based on "Win32 (x86) Console Application")
  !MESSAGE "perf - Win32 Debug" (based on "Win32 (x86) Console Application")
  !MESSAGE 
  
  # Begin Project
  # PROP AllowPerConfigDependencies 0
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
  CPP=cl.exe
  RSC=rc.exe
  
  !IF  "$(CFG)" == "perf - Win32 Release"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 0
  # PROP BASE Output_Dir "Release"
  # PROP BASE Intermediate_Dir "Release"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 0
  # PROP Output_Dir "..\..\Build\Win32\VC6\Release"
  # PROP Intermediate_Dir "..\..\Build\Win32\VC6\Release\Performance"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
  # ADD CPP /nologo /W4 /GX /O2 /I "..\..\..\..\xml-xerces\c\src" /I "..\..\src\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
  # ADD BASE RSC /l 0x409 /d "NDEBUG"
  # ADD RSC /l 0x409 /d "NDEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
  # ADD LINK32 ..\..\..\..\xml-xerces\c\Build\Win32\VC6\Release\xerces-c_1.lib ..\..\Build\Win32\VC6\Release\*.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
  
  !ELSEIF  "$(CFG)" == "perf - Win32 Debug"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 1
  # PROP BASE Output_Dir "Debug"
  # PROP BASE Intermediate_Dir "Debug"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 1
  # PROP Output_Dir "..\..\Build\Win32\VC6\Debug"
  # PROP Intermediate_Dir "..\..\Build\Win32\VC6\Debug\Performance"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
  # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
  # ADD BASE RSC /l 0x409 /d "_DEBUG"
  # ADD RSC /l 0x409 /d "_DEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
  # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
  
  !ENDIF 
  
  # Begin Target
  
  # Name "perf - Win32 Release"
  # Name "perf - Win32 Debug"
  # Begin Source File
  
  SOURCE=.\perf.cpp
  # End Source File
  # End Target
  # End Project
  
  
  
  1.1                  xml-xalan/c/Tests/Performance/perf.cpp
  
  Index: perf.cpp
  ===================================================================
  #include <cassert>
  #include <fstream>
  #include <iostream>
  #include <strstream>
  
  #if !defined(NDEBUG) && defined(_MSC_VER)
  #include <crtdbg.h>
  #endif
  
  //These came from the debug test.
  #include <cstdio>
  #include <ctime>
  #include <string>
  #include <vector>
  
  #include <util/PlatformUtils.hpp>
  
  #include <PlatformSupport/DOMStringHelper.hpp>
  #include <PlatformSupport/XalanFileOutputStream.hpp>
  #include <PlatformSupport/XalanOutputStreamPrintWriter.hpp>
  #include <XercesParserLiaison/XercesDOMSupport.hpp>
  
  #include <XPath/XObjectFactoryDefault.hpp>
  #include <XPath/XPathSupportDefault.hpp>
  #include <XPath/XPathFactoryDefault.hpp>
  
  #include <XSLT/StylesheetConstructionContextDefault.hpp>
  #include <XSLT/StylesheetExecutionContextDefault.hpp>
  #include <XSLT/StylesheetRoot.hpp>
  #include <XSLT/XSLTEngineImpl.hpp>
  #include <XSLT/XSLTInit.hpp>
  #include <XSLT/XSLTInputSource.hpp>
  #include <XSLT/XSLTProcessorEnvSupportDefault.hpp>
  #include <XSLT/XSLTResultTarget.hpp>
  
  #include <XercesParserLiaison/XercesParserLiaison.hpp>
  
  
  //This is here for the threads.
  #define WIN32_LEAN_AND_MEAN
  #include <windows.h>
  #include <winbase.h>
  #define THREADFUNCTIONRETURN DWORD WINAPI
  
  #if !defined(XALAN_NO_NAMESPACES)
  	using std::cerr;
  	using std::cout;
  	using std::cin;
  	using std::endl;
  	using std::ifstream;
  	using std::ios_base;
  	using std::ostrstream;
  	using std::string;
  #endif
  
  
  // This is here for memory leak testing.
  #if defined(_DEBUG)
  #include <crtdbg.h>
  #endif
  
  
  const char* const	xslStylesheets[] =
  {
  	"v:\\xsl-test\\prod\\misc\\misc-chess",
  	"v:\\xsl-test\\perf\\basic\\basic-all_well",
  	"v:\\xsl-test\\perf\\basic\\basic-datetranscode",
  	"v:\\xsl-test\\perf\\basic\\basic-dict2",
  	"v:\\xsl-test\\perf\\basic\\basic-Fischer-Euwe",
  	"v:\\xsl-test\\perf\\basic\\basic-queens", 
  	"v:\\xsl-test\\perf\\large\\large-all_well",
  	//"v:\\xsl-test\\perf\\large\\large-evans_large", 
  	"v:\\xsl-test\\perf\\nodes\\nodes-fancy_xml_tree_viewer_34",
  	"v:\\xsl-test\\perf\\nodes\\nodes-showtree-19991008",
  	"v:\\xsl-test\\perf\\sort\\sort-big",
  	"v:\\xsl-test\\perf\\xpath\\xpath-evans_small",
  	"v:\\xsl-test\\perf\\xpath\\xpath-evans_tiny",
  	0
  };
  
  
  
  // Used to hold compiled stylesheet, and source document.
  StylesheetRoot*		glbStylesheetRoot[sizeof(xslStylesheets) / sizeof(const char*)];
  
  XalanNode*			glbSourceDoc[sizeof(xslStylesheets) / sizeof(const char*)];
  
  
  
  void
  outputMessage(int iter)
  {
  		cout << "\n" << "Starting Iteration: " << iter << '\0';
  }
  
  
  
  int
  main(
  			int				argc,
  			const char*		argv [])
  {
  	assert(sizeof(glbStylesheetRoot) == sizeof(glbSourceDoc));
  
  #if !defined(NDEBUG) && defined(_MSC_VER)
  	_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
  
  	_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
  	_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
  #endif
  
  	if (argc > 2)
  	{
  		cerr << "Usage: perf"
  			 << endl
  			 << endl;
  	}
  	else
  	{
  		int	iterCount = 1;
  
  		if (argc == 2)
  		{
  			iterCount = atoi(argv[1]);
  		}
  
  
  		try
  		{
  			// Call the static initializers...
  			XMLPlatformUtils::Initialize();
  
  			{
  				XSLTInit	theInit;
  
  				// Create the necessary stuff to compile the stylesheet.
  				XercesDOMSupport			    csDOMSupport;
  				XercesParserLiaison				csParserLiaison(csDOMSupport);
  				XPathSupportDefault				csXPathSupport(csDOMSupport);
  				XSLTProcessorEnvSupportDefault	csXSLTProcessorEnvSupport;
  				XObjectFactoryDefault			csXObjectFactory;
  				XPathFactoryDefault				csXPathFactory;
  
  				// Create a processor to compile the stylesheet...
  				XSLTEngineImpl	csProcessor(
  						csParserLiaison,
  						csXPathSupport,
  						csXSLTProcessorEnvSupport,
  						csDOMSupport,
  						csXObjectFactory,
  						csXPathFactory);
  
  				// Connect the processor to the support object...
  				csXSLTProcessorEnvSupport.setProcessor(&csProcessor);
  
  				// Create separate factory support objects so the stylesheet's
  				// factory-created XObject and XPath instances are independent 
  				// from processor's.
  				XObjectFactoryDefault	csStylesheetXObjectFactory;
  				XPathFactoryDefault		csStylesheetXPathFactory;
  
  				// Create a stylesheet construction context, using the
  				// stylesheet's factory support objects.
  				StylesheetConstructionContextDefault	csConstructionContext(
  														csProcessor,
  														csXSLTProcessorEnvSupport,
  														csStylesheetXPathFactory);
  
  				const XalanDOMString  theXSLSuffix(".xsl");
  				const XalanDOMString  theXMLSuffix(".xml");
  				const XalanDOMString  theoutputSuffix(".out");
  
  				for(int i = 0; xslStylesheets[i] != 0; i++)
  				{
  					const XalanDOMString  theXSLFilename(XalanDOMString(xslStylesheets[i]) + theXSLSuffix);
  					const XalanDOMString  theXMLFilename(XalanDOMString(xslStylesheets[i]) + theXMLSuffix);
  
  					cout << "Now compiling Stylesheet: " << xslStylesheets[i] << endl;
  
  					//Generate the XML and XSL input objects.
  					XSLTInputSource		csStylesheetSourceXSL(c_wstr(theXSLFilename));
  					XSLTInputSource		csDocumentSource(c_wstr(theXMLFilename));
  
  					// Ask the processor to create a StylesheetRoot for the specified
  					// input XSL.  This is the compiled stylesheet.  We don't have to
  					// delete it, since it is owned by the StylesheetConstructionContext
  					// instance.
  					glbStylesheetRoot[i] = csProcessor.processStylesheet(csStylesheetSourceXSL,
  														   csConstructionContext);
  					assert(glbStylesheetRoot[i] != 0);
  
  					// Have the processor create a compiled SourceDocument for the specified
  					// input XML. 
  					glbSourceDoc[i] = csProcessor.getSourceTreeFromInput(csDocumentSource);
  					assert(glbSourceDoc[i] != 0);
  				}
  
  
  					for(int ii = 0; xslStylesheets[ii] != 0; ii++)
  					{
  						cout << endl << "Now running test: " << xslStylesheets[ii] << endl;
  
  						// Create the necessary stuff to run the processor.
  						XercesDOMSupport				psDOMSupport;
  						XercesParserLiaison				psParserLiaison(psDOMSupport);
  						XPathSupportDefault				psXPathSupport(psDOMSupport);
  						XSLTProcessorEnvSupportDefault	psXSLTProcessorEnvSupport;
  						XObjectFactoryDefault			psXObjectFactory;
  						XPathFactoryDefault				psXPathFactory;
  
  						// Create a processor to perform the transform.
  						XSLTEngineImpl	psProcessor(
  							psParserLiaison,
  							psXPathSupport,
  							psXSLTProcessorEnvSupport,
  							psDOMSupport,
  							psXObjectFactory,
  							psXPathFactory);
  
  						// Connect the processor to the support object...
  						psXSLTProcessorEnvSupport.setProcessor(&psProcessor);
  
  						// The execution context uses the same factory support objects as
  						// the processor, since those objects have the same lifetime as
  						// other objects created as a result of the execution.
  						StylesheetExecutionContextDefault		psExecutionContext(
  								psProcessor,
  								psXSLTProcessorEnvSupport,
  								psXPathSupport,
  								psXObjectFactory);
  
  						const XalanDOMString  outputFileName(XalanDOMString(xslStylesheets[ii]) + theoutputSuffix);
  
  						//Generate the XML input and output objects.
  						XSLTInputSource		csDocumentSource(glbSourceDoc[ii]);
  						XSLTResultTarget	theResultTarget(outputFileName);
  
  						// Set the stylesheet to be the compiled stylesheet. Then do the transform.
  						const double startTime = clock();
  						cout << "Clock before transforms: " << startTime << endl;
  						for(int j = 0; j < iterCount; ++j)
  						{	
  							psProcessor.setStylesheetRoot(glbStylesheetRoot[ii]);
  							psProcessor.process(csDocumentSource, theResultTarget,psExecutionContext);
  							psExecutionContext.reset();
  						}
  						const double endTime = clock();
  						cout << "Clock after transforms: " << endTime << endl;
  						cout << "Total clock ticks: " << endTime - startTime << endl;
  						const double	millis = ((endTime - startTime) / CLOCKS_PER_SEC) * 1000.0;
  						cout << "Milliseconds: " << millis << endl;
  						cout << "Averaged: " << millis / iterCount << " per iteration" << endl;
  					}
  				
  			}
  
  			XMLPlatformUtils::Terminate();
  		}
  		catch(...)
  		{
  			cerr << "Exception caught!!!"
  				 << endl
  				 << endl;
  		}
  	}
  
  	return 0;
  }