Sfoglia il codice sorgente

Merge pull request #10088 from ghalliday/issue17326

HPCC-17326 Rationalise the use of StTimeElapsed etc

Reviewed By: Shamser Ahmed <shamser.ahmed@lexisnexis.co.uk>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 anni fa
parent
commit
daf34d4989

+ 0 - 100
common/workunit/workunit.cpp

@@ -5400,13 +5400,6 @@ void CLocalWorkUnit::copyWorkUnit(IConstWorkUnit *cached, bool all)
         // 'all' mode is used when setting up a dali WU from the embedded wu in a workunit dll
 
         // Merge timing info from both branches
-        pt = fromP->getBranch("Timings");
-        if (pt)
-        {
-            IPropertyTree *tgtTimings = ensurePTree(p, "Timings");
-            mergePTree(tgtTimings, pt);
-            pt->Release();
-        }
         pt = fromP->getBranch("Statistics");
         if (pt)
         {
@@ -5960,11 +5953,6 @@ void CLocalWorkUnit::_loadStatistics() const
 IConstWUStatisticIterator& CLocalWorkUnit::getStatistics(const IStatisticsFilter * filter) const
 {
     CriticalBlock block(crit);
-    //This should be deleted in version 6.0 when support for 4.x is no longer required
-    legacyTimings.loadBranch(p,"Timings");
-    if (legacyTimings.ordinality())
-        return *new WorkUnitStatisticsIterator(legacyTimings, 0, (IConstWorkUnit *) this, filter);
-
     statistics.loadBranch(p,"Statistics");
     Owned<IConstWUStatisticIterator> localStats = new WorkUnitStatisticsIterator(statistics, 0, (IConstWorkUnit *) this, filter);
     if (!filter->recurseChildScopes(SSTgraph, nullptr))
@@ -8976,94 +8964,6 @@ bool CLocalWUStatistic::matches(const IStatisticsFilter * filter) const
 
 //==========================================================================================
 
-CLocalWULegacyTiming::CLocalWULegacyTiming(IPropertyTree *props) : p(props)
-{
-}
-
-IStringVal & CLocalWULegacyTiming::getCreator(IStringVal & str) const
-{
-    str.clear();
-    return str;
-}
-
-
-IStringVal & CLocalWULegacyTiming::getDescription(IStringVal & str, bool createDefault) const
-{
-    str.set(p->queryProp("@name"));
-    return str;
-}
-
-IStringVal & CLocalWULegacyTiming::getType(IStringVal & str) const
-{
-    str.set(queryStatisticName(StTimeElapsed));
-    return str;
-}
-
-IStringVal & CLocalWULegacyTiming::getFormattedValue(IStringVal & str) const
-{
-    StringBuffer formatted;
-    formatStatistic(formatted, getValue(), getMeasure());
-    str.set(formatted);
-    return str;
-}
-
-StatisticCreatorType CLocalWULegacyTiming::getCreatorType() const
-{
-    return SCTunknown;
-}
-
-StatisticScopeType CLocalWULegacyTiming::getScopeType() const
-{
-    return SSTnone;
-}
-
-StatisticKind CLocalWULegacyTiming::getKind() const
-{
-    return StTimeElapsed;
-}
-
-IStringVal & CLocalWULegacyTiming::getScope(IStringVal & str) const
-{
-    str.clear();
-    return str;
-}
-
-StatisticMeasure CLocalWULegacyTiming::getMeasure() const
-{
-    return SMeasureTimeNs;
-}
-
-unsigned __int64 CLocalWULegacyTiming::getValue() const
-{
-    return p->getPropInt64("@duration", 0) * 1000000;
-}
-
-unsigned __int64 CLocalWULegacyTiming::getCount() const
-{
-    return p->getPropInt64("@count", 0);
-}
-
-unsigned __int64 CLocalWULegacyTiming::getMax() const
-{
-    return p->getPropInt64("@max", 0);
-}
-
-unsigned __int64 CLocalWULegacyTiming::getTimestamp() const
-{
-    return 0;
-}
-
-bool CLocalWULegacyTiming::matches(const IStatisticsFilter * filter) const
-{
-    if (!filter)
-        return true;
-    const char * creator = p->queryProp("@creator");
-    const char * scope = p->queryProp("@scope");
-    return filter->matches(SCTall, NULL, SSTall, NULL, getMeasure(), getKind(), getValue());
-}
-
-//==========================================================================================
-
 extern WORKUNIT_API ILocalWorkUnit * createLocalWorkUnit(const char *xml)
 {
     Owned<CLocalWorkUnit> cw = new CLocalWorkUnit((ISecManager *) NULL, NULL);

+ 0 - 25
common/workunit/workunit.ipp

@@ -65,30 +65,6 @@ public:
     virtual bool matches(const IStatisticsFilter * filter) const;
 };
 
-class WORKUNIT_API CLocalWULegacyTiming : implements IConstWUStatistic, public CInterface
-{
-    Owned<IPropertyTree> p;
-public:
-    IMPLEMENT_IINTERFACE;
-    CLocalWULegacyTiming(IPropertyTree *p);
-
-    virtual IStringVal & getCreator(IStringVal & str) const;
-    virtual IStringVal & getDescription(IStringVal & str, bool createDefault) const;
-    virtual IStringVal & getFormattedValue(IStringVal & str) const;
-    virtual IStringVal & getType(IStringVal & str) const;
-    virtual IStringVal & getScope(IStringVal & str) const;
-    virtual StatisticMeasure getMeasure() const;
-    virtual StatisticCreatorType getCreatorType() const;
-    virtual StatisticScopeType getScopeType() const;
-    virtual StatisticKind getKind() const;
-    virtual unsigned __int64 getValue() const;
-    virtual unsigned __int64 getCount() const;
-    virtual unsigned __int64 getMax() const;
-    virtual unsigned __int64 getTimestamp() const;
-
-    virtual bool matches(const IStatisticsFilter * filter) const;
-};
-
 //==========================================================================================
 
 template <typename T, typename IT> struct CachedTags
@@ -241,7 +217,6 @@ protected:
     mutable IArrayOf<IWUResult> variables;
     mutable CachedTags<CLocalWUAppValue,IConstWUAppValue> appvalues;
     mutable CachedTags<CLocalWUStatistic,IConstWUStatistic> statistics;
-    mutable CachedTags<CLocalWULegacyTiming,IConstWUStatistic> legacyTimings;
     mutable Owned<IUserDescriptor> userDesc;
     Mutex locked;
     Owned<ISecManager> secMgr;

+ 10 - 6
ecl/eclcc/eclcc.cpp

@@ -1491,6 +1491,8 @@ void EclCC::processXmlFile(EclCompileInstance & instance, const char *archiveXML
 
 void EclCC::processFile(EclCompileInstance & instance)
 {
+    clearTransformStats();
+
     const char * curFilename = instance.inputFile->queryFilename();
     assertex(curFilename);
 
@@ -1594,10 +1596,15 @@ void EclCC::processFile(EclCompileInstance & instance)
         processSingleQuery(instance, queryText, attributePath.str());
     }
 
-    if (instance.reportErrorSummary() && !instance.archive && !(optGenerateMeta && instance.generatedMeta))
-        return;
+    if (!instance.reportErrorSummary() || instance.archive || (optGenerateMeta && instance.generatedMeta))
+        generateOutput(instance);
 
-    generateOutput(instance);
+    //Transform stats are gathered in static global variables.  Revisit if the code generator is multi threaded.
+    if (instance.wu->getDebugValueBool("timeTransforms", false))
+    {
+        WuStatisticTarget statsTarget(instance.wu, "eclcc");
+        gatherTransformStats(statsTarget);
+    }
 }
 
 
@@ -2516,7 +2523,6 @@ void EclCC::processBatchedFile(IFile & file, bool multiThreaded)
 
                 resetUniqueId();
                 resetLexerUniqueNames();
-                clearTransformStats();
             }
 
             Owned<IErrorReceiver> localErrs = createFileErrorReceiver(logFile);
@@ -2525,8 +2531,6 @@ void EclCC::processBatchedFile(IFile & file, bool multiThreaded)
             if (info.wu &&
                 (info.wu->getDebugValueBool("generatePartialOutputOnError", false) || info.queryErrorProcessor().errCount() == 0))
             {
-                WuStatisticTarget statsTarget(info.wu, "eclcc");
-                gatherTransformStats(statsTarget);
                 exportWorkUnitToXMLFile(info.wu, xmlFilename, XML_NoBinaryEncode64, true, false, false, true);
                 Owned<IFile> xml = createIFile(xmlFilename);
                 info.stats.xmlSize = xml->size();

+ 1 - 0
ecl/eclcc/eclcc.hpp

@@ -132,6 +132,7 @@ const char * const helpText[] = {
     "?!  -fshowRecordCountInGraph  Show estimates of record counts in the graph",
     "?!  -fspanMultipleCpp       Generate a work unit in multiple c++ files",
     "?!  -fsubgraphToRegenerate=n Regenerate the ECL for a particular subgraph",
+    "?!  -ftimeTransforms        Add timings for internal transforms to the workunit",
     "",
 };
 

+ 2 - 1
ecl/hql/hqltrans.cpp

@@ -170,7 +170,8 @@ void HqlTransformStats::gatherTransformStats(IStatisticTarget & target, const ch
 {
 #ifdef TRANSFORM_STATS_TIME
     target.addStatistic(SSTcompilestage, scope, StTimeTotalExecute, nullptr, cycle_to_nanosec(totalTime), 1, 0, StatsMergeSum);
-    target.addStatistic(SSTcompilestage, scope, StTimeLocalExecute, nullptr, cycle_to_nanosec(totalTime-(childTime-recursiveTime)), 1, 0, StatsMergeSum);
+    if ((childTime-recursiveTime) != 0)
+        target.addStatistic(SSTcompilestage, scope, StTimeLocalExecute, nullptr, cycle_to_nanosec(totalTime-(childTime-recursiveTime)), 1, 0, StatsMergeSum);
 #endif
 }
 

+ 2 - 2
ecl/hql/hqltrans.ipp

@@ -35,8 +35,8 @@ typedef MapOwnedToOwned<IHqlExpression, IHqlExpression> MapOwnedHqlToOwnedHql;
 
 //NOTE: eclcc needs to be run with the --leakcheck option for the summary to be output to stdout with TRANSFORM_STATS_ONEXIT option
 
-//#define TRANSFORM_STATS
-//#define TRANSFORM_STATS_TIME
+#define TRANSFORM_STATS
+#define TRANSFORM_STATS_TIME
 //#define TRANSFORM_STATS_DETAILS
 //#define TRANSFORM_STATS_ONEXIT
 //#define TRANSFORM_STATS_OPS

+ 1 - 0
ecl/hqlcpp/hqlcpp.cpp

@@ -1804,6 +1804,7 @@ void HqlCppTranslator::cacheOptions()
         DebugOption(options.addLikelihoodToGraph,"addLikelihoodToGraph", true),
         DebugOption(options.varFieldAccessorThreshold,"varFieldAccessorThreshold",3),   // Generate accessor classes for rows with #variable width fields >= threshold
         DebugOption(options.translateDFSlayouts,"translateDFSlayouts", false),
+        DebugOption(options.timeTransforms,"timeTransforms", false),
         DebugOption(options.reportDFSinfo,"reportDFSinfo", 0),
     };
 

+ 1 - 1
ecl/hqlcpp/hqlcpp.ipp

@@ -789,6 +789,7 @@ struct HqlCppOptions
     bool                optimizeCriticalFunctions;
     bool                addLikelihoodToGraph;
     bool                translateDFSlayouts;
+    bool                timeTransforms;
 };
 
 //Any information gathered while processing the query should be moved into here, rather than cluttering up the translator class
@@ -1102,7 +1103,6 @@ public:
 
     HqlCppOptions const & queryOptions() const { return options; }
     bool needToSerializeToSlave(IHqlExpression * expr) const;
-    ITimeReporter * queryTimeReporter() const { return timeReporter; }
     void noteFinishedTiming(const char * name, cycle_t startCycles)
     {
         timeReporter->addTiming(name, get_cycles_now()-startCycles);

+ 0 - 7
ecl/hqlcpp/hqlcppds.cpp

@@ -1813,26 +1813,20 @@ IHqlExpression * HqlCppTranslator::getResourcedChildGraph(BuildCtx & ctx, IHqlEx
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         CompoundSourceTransformer transformer(*this, CSFpreload|csfFlags);
         resourced.setown(transformer.process(resourced));
         checkNormalized(ctx, resourced);
-        noteFinishedTiming("workunit:tree transform: optimize disk read", startCycles);
     }
 
     bool isInsideChildQuery = (graphKind == no_childquery) || insideChildQuery(ctx);
     if (options.optimizeGraph)
     {
-        cycle_t startCycles = get_cycles_now();
         traceExpression("BeforeOptimizeSub", resourced);
         resourced.setown(optimizeHqlExpression(queryErrorProcessor(), resourced, getOptimizeFlags(isInsideChildQuery)|HOOcompoundproject));
         traceExpression("AfterOptimizeSub", resourced);
-        noteFinishedTiming("workunit:optimize graph", startCycles);
     }
 
     traceExpression("BeforeResourcing Child", resourced);
-
-    cycle_t startCycles = get_cycles_now();
     HqlExprCopyArray activeRows;
     gatherActiveCursors(ctx, activeRows);
     if (graphKind == no_loop)
@@ -1843,7 +1837,6 @@ IHqlExpression * HqlCppTranslator::getResourcedChildGraph(BuildCtx & ctx, IHqlEx
     else
         resourced.setown(resourceNewChildGraph(*this, activeRows, resourced, targetClusterType, graphIdExpr, numResults));
 
-    noteFinishedTiming("workunit:resource graph", startCycles);
     checkNormalized(ctx, resourced);
     traceExpression("AfterResourcing Child", resourced);
     

+ 8 - 31
ecl/hqlcpp/hqlhtcpp.cpp

@@ -5874,7 +5874,6 @@ void dumpActivityCounts()
 
 bool HqlCppTranslator::buildCode(HqlQueryContext & query, const char * embeddedLibraryName, const char * embeddedGraphName)
 {
-    cycle_t startCycles = get_cycles_now();
     WorkflowArray workflow;
     bool ok = prepareToGenerate(query, workflow, (embeddedLibraryName != NULL));
     if (ok)
@@ -5883,8 +5882,6 @@ bool HqlCppTranslator::buildCode(HqlQueryContext & query, const char * embeddedL
         if (!embeddedLibraryName)
             updateClusterType();
 
-        noteFinishedTiming("compile:tree transform", startCycles);
-
         if (insideLibrary())
         {
             //always do these checks for consistency
@@ -5930,7 +5927,8 @@ bool HqlCppTranslator::buildCode(HqlQueryContext & query, const char * embeddedL
             StringBuffer complexityText;
             complexityText.append(getComplexity(workflow));
             wu()->setDebugValue("__Calculated__Complexity__", complexityText, true);
-            noteFinishedTiming("compile:calculate complexity", startCycles);
+            if (options.timeTransforms)
+                noteFinishedTiming("compile:complexity", startCycles);
         }
 
         buildRowAccessors();
@@ -6018,7 +6016,8 @@ bool HqlCppTranslator::buildCpp(IHqlCppInstance & _code, HqlQueryContext & query
         {
             cycle_t startCycles = get_cycles_now();
             peepholeOptimize(*code, *this);
-            noteFinishedTiming("compile:peephole optimize", startCycles);
+            if (options.timeTransforms)
+                noteFinishedTiming("compile:transform:peephole", startCycles);
         }
     }
     catch (IException * e)
@@ -9406,12 +9405,8 @@ Tricky getting this in the correct order, problems are:
 
 IHqlExpression * HqlCppTranslator::optimizeCompoundSource(IHqlExpression * expr, unsigned flags)
 {
-    cycle_t startCycles = get_cycles_now();
-
     CompoundSourceTransformer transformer(*this, flags);
-    OwnedHqlExpr ret = transformer.process(expr);
-    noteFinishedTiming("compile:tree transform: optimize disk read", startCycles);
-    return ret.getClear();
+    return transformer.process(expr);
 }
 
 IHqlExpression * HqlCppTranslator::optimizeGraphPostResource(IHqlExpression * expr, unsigned csfFlags, bool projectBeforeSpill, bool insideChildQuery)
@@ -9426,9 +9421,7 @@ IHqlExpression * HqlCppTranslator::optimizeGraphPostResource(IHqlExpression * ex
     //insert projects after compound created...
     if (options.optimizeResourcedProjects)
     {
-        cycle_t startCycles = get_cycles_now();
         OwnedHqlExpr optimized = insertImplicitProjects(*this, resourced.get(), projectBeforeSpill);
-        noteFinishedTiming("compile:implicit projects", startCycles);
         traceExpression("AfterResourcedImplicit", resourced);
         checkNormalized(optimized);
 
@@ -9439,11 +9432,9 @@ IHqlExpression * HqlCppTranslator::optimizeGraphPostResource(IHqlExpression * ex
     //Now call the optimizer again - the main purpose is to move projects over limits and into compound index/disk reads
     if (options.optimizeGraph)
     {
-        cycle_t startCycles = get_cycles_now();
         traceExpression("BeforeOptimize2", resourced);
         resourced.setown(optimizeHqlExpression(queryErrorProcessor(), resourced, getOptimizeFlags(insideChildQuery)|HOOcompoundproject));
         traceExpression("AfterOptimize2", resourced);
-        noteFinishedTiming("compile:optimize graph", startCycles);
     }
     resourced.setown(optimizeCompoundSource(resourced, csfFlags));
     return resourced.getClear();
@@ -9477,11 +9468,9 @@ IHqlExpression * HqlCppTranslator::getResourcedGraph(IHqlExpression * expr, IHql
     checkNormalized(resourced);
     if (options.optimizeGraph)
     {
-        cycle_t startCycles = get_cycles_now();
         resourced.setown(optimizeHqlExpression(queryErrorProcessor(), resourced, optFlags|HOOfiltersharedproject));
         //have the following on an "aggressive fold" option?  If no_selects extract constants it can be quite impressive (jholt22.hql)
         //resourced.setown(foldHqlExpression(resourced));
-        noteFinishedTiming("compile:optimize graph", startCycles);
     }
     traceExpression("AfterOptimize", resourced);
     checkNormalized(resourced);
@@ -9513,7 +9502,8 @@ IHqlExpression * HqlCppTranslator::getResourcedGraph(IHqlExpression * expr, IHql
     if (!resourced)
         return NULL;
 
-    noteFinishedTiming("compile:resource graph", startCycles);
+    if (options.timeTransforms)
+        noteFinishedTiming("compile:resource graph", startCycles);
     traceExpression("AfterResourcing", resourced);
 
     if (options.regressionTest)
@@ -9533,11 +9523,9 @@ IHqlExpression * HqlCppTranslator::getResourcedGraph(IHqlExpression * expr, IHql
     //Finally create a couple of special compound activities.
     //e.g., filtered fetch, limited keyed join
     {
-        cycle_t startCycles = get_cycles_now();
         CompoundActivityTransformer transformer(targetClusterType);
         resourced.setown(transformer.transformRoot(resourced));
         traceExpression("AfterCompoundActivity", resourced);
-        noteFinishedTiming("compile:tree transform: compound activity", startCycles);
     }
 
     resourced.setown(spotTableInvariant(resourced));
@@ -19048,14 +19036,9 @@ void HqlCppTranslator::optimizePersists(HqlExprArray & exprs)
 
 IHqlExpression * HqlCppTranslator::convertSetResultToExtract(IHqlExpression * expr)
 {
-    cycle_t startCycles = get_cycles_now();
-
     SetResultToExtractTransformer transformer;
 
-    IHqlExpression * ret = transformer.transformRoot(expr);
-    noteFinishedTiming("compile:tree transform: convert SetResult to Extract", startCycles);
-
-    return ret;
+    return transformer.transformRoot(expr);
 }
 
 
@@ -19150,9 +19133,7 @@ void HqlCppTranslator::spotGlobalCSE(WorkflowItem & curWorkflow)
 {
     if (!insideLibrary() && options.globalAutoHoist)
     {
-        cycle_t startCycles = get_cycles_now();
         spotGlobalCSE(curWorkflow.queryExprs());
-        noteFinishedTiming("compile:tree transform: spot global cse", startCycles);
     }
 }
 
@@ -19407,7 +19388,6 @@ void HqlCppTranslator::pickBestEngine(HqlExprArray & exprs)
 
     if (targetThor())
     {
-        cycle_t startCycles = get_cycles_now();
         ForEachItemIn(idx, exprs)
         {
             if (needsRealThor(&exprs.item(idx)))
@@ -19416,7 +19396,6 @@ void HqlCppTranslator::pickBestEngine(HqlExprArray & exprs)
         // if we got this far, thor not required
         setTargetClusterType(HThorCluster);
         DBGLOG("Thor query redirected to hthor instead");
-        noteFinishedTiming("compile:tree transform: pick engine", startCycles);
     }
 }
 
@@ -19425,7 +19404,6 @@ void HqlCppTranslator::pickBestEngine(WorkflowArray & workflow)
 {
     if (targetThor())
     {
-        cycle_t startCycles = get_cycles_now();
         ForEachItemIn(idx2, workflow)
         {
             HqlExprArray & exprs = workflow.item(idx2).queryExprs();
@@ -19438,7 +19416,6 @@ void HqlCppTranslator::pickBestEngine(WorkflowArray & workflow)
         }
         setTargetClusterType(HThorCluster);
         DBGLOG("Thor query redirected to hthor instead");
-        noteFinishedTiming("compile:tree transform: pick engine", startCycles);
     }
 }
 

+ 9 - 6
ecl/hqlcpp/hqlnlp.cpp

@@ -145,7 +145,7 @@ void MatchReference::compileMatched(RegexIdAllocator & idAllocator, UnsignedArra
 
 //---------------------------------------------------------------------------
 
-NlpParseContext::NlpParseContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & options, ITimeReporter * _timeReporter) : timeReporter(_timeReporter)
+NlpParseContext::NlpParseContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & options)
 {
     workunit = _wu;
     expr.set(_expr);
@@ -689,7 +689,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityParse(BuildCtx & ctx, IHqlExpr
     cycle_t startPrepareCycles = get_cycles_now();
     ITimeReporter * reporter = timeReporter;
     if (expr->hasAttribute(tomitaAtom))
-        nlpParse = createTomitaContext(expr, code->workunit, options, reporter);
+        nlpParse = createTomitaContext(expr, code->workunit, options);
     else
     {
         //In 64bit the engines have enough stack space to use the stack-based regex implementation
@@ -709,7 +709,7 @@ ABoundActivity * HqlCppTranslator::doBuildActivityParse(BuildCtx & ctx, IHqlExpr
         else if (matchesConstantString(algorithmHint, "heap", true))
             algorithm = NLPAregexHeap;
 
-        nlpParse = createRegexContext(expr, code->workunit, options, reporter, algorithm);
+        nlpParse = createRegexContext(expr, code->workunit, options, algorithm);
     }
 
     gatherExplicitMatched(expr);
@@ -717,7 +717,8 @@ ABoundActivity * HqlCppTranslator::doBuildActivityParse(BuildCtx & ctx, IHqlExpr
     doBuildParseSearchText(instance->startctx, expr);
     doBuildParseValidators(instance->nestedctx, expr);
     doBuildParseExtra(instance->startctx, expr);
-    noteFinishedTiming("compile:generate PARSE:prepare", startPrepareCycles);
+    if (options.timeTransforms)
+        noteFinishedTiming("compile:PARSE:prepare", startPrepareCycles);
     
     MemoryBuffer buffer;
     cycle_t startCompileCycles = get_cycles_now();
@@ -727,7 +728,8 @@ ABoundActivity * HqlCppTranslator::doBuildActivityParse(BuildCtx & ctx, IHqlExpr
         WARNING1(CategoryEfficiency, HQLWRN_GrammarIsAmbiguous, instance->activityId);
 
     doBuildParseCompiled(instance->classctx, buffer);
-    noteFinishedTiming("compile:generate PARSE:compile", startCompileCycles);
+    if (options.timeTransforms)
+        noteFinishedTiming("compile:PARSE:compile", startCompileCycles);
 
     nlpParse->buildProductions(*this, instance->classctx, instance->startctx);
 
@@ -760,7 +762,8 @@ ABoundActivity * HqlCppTranslator::doBuildActivityParse(BuildCtx & ctx, IHqlExpr
     nlpParse = NULL;
     buildInstanceSuffix(instance);
     buildConnectInputOutput(ctx, instance, boundDataset, 0, 0);
-    noteFinishedTiming("compile:generate PARSE", startCycles);
+    if (options.timeTransforms)
+        noteFinishedTiming("compile:PARSE", startCycles);
 
     return instance->getBoundActivity();
 }

+ 3 - 4
ecl/hqlcpp/hqlnlp.ipp

@@ -103,7 +103,7 @@ public:
 class NlpParseContext : public CInterface
 {
 public:
-    NlpParseContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & options, ITimeReporter * _timeReporter);
+    NlpParseContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & options);
 
     void addAllMatched();
     virtual unsigned addMatchReference(IHqlExpression * expr);
@@ -144,7 +144,6 @@ protected:
     HqlExprArray validators;
     bool allMatched;
     IWorkUnit * workunit;
-    Linked<ITimeReporter> timeReporter;
 };
 
 void getCheckRange(IHqlExpression * range, unsigned & minLength, unsigned & maxLength, unsigned charLength);
@@ -152,7 +151,7 @@ void getCheckRange(IHqlExpression * range, unsigned & minLength, unsigned & maxL
 enum ValidateKind { ValidateIsString, ValidateIsUnicode, ValidateIsEither };
 ValidateKind getValidateKind(IHqlExpression * expr);
 
-NlpParseContext * createRegexContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, ITimeReporter * timeReporter, byte algorithm);
-NlpParseContext * createTomitaContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, ITimeReporter * timeReporter);
+NlpParseContext * createRegexContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, byte algorithm);
+NlpParseContext * createTomitaContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options);
 
 #endif

+ 3 - 22
ecl/hqlcpp/hqlregex.cpp

@@ -2349,7 +2349,7 @@ with some clever code to walk through and retain lists of which ones are active.
 
 //---------------------------------------------------------------------------
 
-RegexContext::RegexContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options, ITimeReporter * _timeReporter, byte _algorithm) : NlpParseContext(_expr, _wu, _options, _timeReporter), parser(NULL, _algorithm)
+RegexContext::RegexContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options, byte _algorithm) : NlpParseContext(_expr, _wu, _options), parser(NULL, _algorithm)
 {
     info.addedSeparators = false;
     switch (info.type)
@@ -2561,7 +2561,6 @@ HqlRegexExpr * RegexContext::createStructure(IHqlExpression * expr, bool caseSen
 
 void RegexContext::buildStructure()
 {
-    cycle_t startCycles = get_cycles_now();
     IHqlExpression * grammar = expr->queryChild(2);
     assertex(grammar->getOperator() == no_pat_instance);
     OwnedHqlExpr structure = LINK(grammar);//createValue(no_pat_instance, makeRuleType(NULL), LINK(grammar), LINK(grammar->queryChild(1)));
@@ -2570,8 +2569,6 @@ void RegexContext::buildStructure()
     root.setown(new HqlNamedRegex(structure, internalAtom, structure, no_parse, isCaseSensitive(), false));
     root->setRegexOwn(rootRegex);
     named.append(*LINK(root));
-
-    noteFinishedTiming("compile:generate PARSE:create structure", startCycles);
 }
 
 void RegexContext::expandRecursion()
@@ -2624,7 +2621,6 @@ void RegexContext::optimizeSpotDFA()
 
 void RegexContext::optimizePattern()
 {
-    cycle_t startCycles = get_cycles_now();
     ForEachItemIn(idx1, named)
         named.item(idx1).mergeCreateSets();
     root->expandNamedSymbols();
@@ -2638,7 +2634,6 @@ void RegexContext::optimizePattern()
         }
     }
     optimizeSpotDFA();
-    noteFinishedTiming("compile:generate PARSE:optimize", startCycles);
 }
 
 
@@ -2659,8 +2654,6 @@ HqlNamedRegex * RegexContext::queryDefine(IHqlExpression * defineName, bool case
 
 void RegexContext::analysePattern()
 {
-    cycle_t startCycles = get_cycles_now();
-
     //This conversion is based around the description in the Dragon book:
     //3.9 From a regular expression to a DFA
     //even though we don't always convert it, the steps form a useful algorithm
@@ -2675,15 +2668,11 @@ void RegexContext::analysePattern()
 
     ForEachItemIn(idx3, named)
         named.item(idx3).generateDFAs();
-
-    noteFinishedTiming("compile:generate PARSE:analyse", startCycles);
 }
 
 
 void RegexContext::generateRegex()
 {
-    cycle_t startCycles = get_cycles_now();
-
     parser.addedSeparators = info.addedSeparators;
     setParserOptions(parser);
 
@@ -2696,8 +2685,6 @@ void RegexContext::generateRegex()
 
     parser.grammar.set(root->queryRootPattern());
     parser.minPatternLength = root->getMinLength();
-
-    noteFinishedTiming("compile:generate PARSE:generate", startCycles);
 }
 
 
@@ -2726,9 +2713,9 @@ void RegexContext::getDebugText(StringBuffer & s, unsigned detail)
     regexToXml(s, parser.grammar, detail);
 }
 
-NlpParseContext * createRegexContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, ITimeReporter * timeReporter, byte algorithm)
+NlpParseContext * createRegexContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, byte algorithm)
 {
-    return new RegexContext(expr, wu, options, timeReporter, algorithm);
+    return new RegexContext(expr, wu, options, algorithm);
 }
 
 //-- Lexer creation
@@ -2778,12 +2765,6 @@ void RegexContext::generateLexer(IDfaPattern * builder)
     lexerRoot->generateDFA(builder);
 }
 
-void RegexContext::noteFinishedTiming(const char * name, cycle_t startCycles)
-{
-    if (timeReporter)
-        timeReporter->addTiming(name, get_cycles_now() - startCycles);
-}
-
 /*
 ToDo:
 

+ 1 - 2
ecl/hqlcpp/hqlregex.ipp

@@ -305,7 +305,7 @@ class RegexContext : public NlpParseContext
     friend class HqlNamedRegex;
     friend class HqlRegexExpr;
 public:
-    RegexContext(IHqlExpression * _expr, IWorkUnit * wu, const HqlCppOptions & options, ITimeReporter * _timeReporter, byte _algorithm);
+    RegexContext(IHqlExpression * _expr, IWorkUnit * wu, const HqlCppOptions & options, byte _algorithm);
     ~RegexContext();
 
     virtual void compileSearchPattern();
@@ -330,7 +330,6 @@ protected:
     void insertSeparators();
     void optimizePattern();
     void optimizeSpotDFA();
-    void noteFinishedTiming(const char * name, cycle_t startCycles);
     HqlNamedRegex * queryNamed(IHqlExpression * defn, IAtom * name, node_operator op, bool caseSensitive);
     HqlNamedRegex * createNamed(IHqlExpression * expr, IAtom * name, node_operator op, bool caseSensitive);
 

+ 6 - 6
ecl/hqlcpp/hqltomita.cpp

@@ -856,8 +856,8 @@ void TomRule::setProductionIds(HqlExprArray & productionMappings, unsigned & id)
 //---------------------------------------------------------------------------
 
 
-TomitaContext::TomitaContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options, ITimeReporter * _timeReporter) 
-: NlpParseContext(_expr, _wu, _options, _timeReporter), parser(NULL), translatorOptions(_options)
+TomitaContext::TomitaContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options)
+: NlpParseContext(_expr, _wu, _options), parser(NULL), translatorOptions(_options)
 {
     numTerminals = 0;
     numSymbols = 0;
@@ -1402,7 +1402,7 @@ void TomitaContext::generateLexer()
     //nested scope
     try
     {
-        RegexContext regex(expr, wu(), translatorOptions, timeReporter, NLPAregexStack);
+        RegexContext regex(expr, wu(), translatorOptions, NLPAregexStack);
 
         regex.beginLexer();
         ForEachItemIn(idx, tokens)
@@ -1425,7 +1425,7 @@ void TomitaContext::generateLexer()
     IHqlExpression * separator = expr->queryAttribute(separatorAtom);
     if (separator)
     {
-        RegexContext regex2(expr, wu(), translatorOptions, timeReporter, NLPAregexStack);
+        RegexContext regex2(expr, wu(), translatorOptions, NLPAregexStack);
 
         regex2.beginLexer();
         regex2.addLexerToken(1, separator->queryChild(0));
@@ -1954,9 +1954,9 @@ TomRule * TomitaContext::queryRule(IHqlExpression * expr, IAtom * name)
 
 //---------------------------------------------------------------------------
 
-NlpParseContext * createTomitaContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options, ITimeReporter * timeReporter)
+NlpParseContext * createTomitaContext(IHqlExpression * expr, IWorkUnit * wu, const HqlCppOptions & options)
 {
-    return new TomitaContext(expr, wu, options, timeReporter);
+    return new TomitaContext(expr, wu, options);
 }
 
 

+ 1 - 1
ecl/hqlcpp/hqltomita.ipp

@@ -413,7 +413,7 @@ class TomitaContext : public NlpParseContext, public IResolveContext
 {
     friend class TomProduction;
 public:
-    TomitaContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options, ITimeReporter * _timeReporter);
+    TomitaContext(IHqlExpression * _expr, IWorkUnit * _wu, const HqlCppOptions & _options);
     ~TomitaContext();
 
     virtual void compileSearchPattern();

+ 13 - 56
ecl/hqlcpp/hqlttcpp.cpp

@@ -3906,16 +3906,10 @@ IHqlExpression * ThorHqlTransformer::normalizeTableGrouping(IHqlExpression * exp
 void HqlCppTranslator::convertLogicalToActivities(WorkflowItem & curWorkflow)
 {
     {
-        cycle_t startCycles = get_cycles_now();
         ThorHqlTransformer transformer(*this, targetClusterType, wu(), implicitFunctionId);
 
         HqlExprArray & exprs = curWorkflow.queryExprs();
-        HqlExprArray transformed;
-
-        transformer.transformRoot(exprs, transformed);
-
-        replaceArray(exprs, transformed);
-        noteFinishedTiming("compile:tree transform: convert logical", startCycles);
+        transformer.transformRoot(exprs);
     }
 
     if (queryOptions().normalizeLocations)
@@ -10942,13 +10936,11 @@ void normalizeAnnotations(HqlCppTranslator & translator, HqlExprArray & exprs)
 
     translator.traceExpressions("before annotation normalize", exprs);
 
-    cycle_t startCycles = get_cycles_now();
     AnnotationNormalizerTransformer normalizer;
     HqlExprArray transformed;
     normalizer.analyseArray(exprs, 0);
     normalizer.transformRoot(exprs, transformed);
     replaceArray(exprs, transformed);
-    translator.noteFinishedTiming("compile:tree transform: normalize.annotations", startCycles);
 }
 
 //---------------------------------------------------------------------------
@@ -13358,7 +13350,6 @@ void normalizeHqlTree(HqlCppTranslator & translator, HqlExprArray & exprs)
 //      ForEachItemIn(iInit, exprs)
 //          queryLocationIndependent(&exprs.item(iInit));
 
-        cycle_t startCycles = get_cycles_now();
         HqlTreeNormalizer normalizer(translator);
         HqlExprArray transformed;
         normalizer.analyseArray(exprs, 0);
@@ -13369,25 +13360,20 @@ void normalizeHqlTree(HqlCppTranslator & translator, HqlExprArray & exprs)
         replaceArray(exprs, transformed);
         seenForceLocal = normalizer.querySeenForceLocal();
         seenLocalUpload = normalizer.querySeenLocalUpload();
-        translator.noteFinishedTiming("compile:tree transform: normalize.initial", startCycles);
     }
 
     if (translator.queryOptions().constantFoldPostNormalize)
     {
-        cycle_t startCycles = get_cycles_now();
         HqlExprArray transformed;
         quickFoldExpressions(transformed, exprs, NULL, 0);
         replaceArray(exprs, transformed);
-        translator.noteFinishedTiming("compile:tree transform: normalize.fold", startCycles);
     }
 
     translator.traceExpressions("before scope tag", exprs);
 
     {
-        cycle_t startCycles = get_cycles_now();
         HqlScopeTagger normalizer(translator.queryErrorProcessor(), translator.queryLocalOnWarningMapper());
         normalizer.transformRoot(exprs);
-        translator.noteFinishedTiming("compile:tree transform: normalize.scope", startCycles);
     }
 
     translator.checkNormalized(exprs);
@@ -13397,30 +13383,24 @@ void normalizeHqlTree(HqlCppTranslator & translator, HqlExprArray & exprs)
 
     translator.traceExpressions("after scope tag", exprs);
     {
-        cycle_t startCycles = get_cycles_now();
         DFSLayoutTransformer transformer(translator.queryErrorProcessor(), translator.queryCallback(), translator.queryOptions());
         HqlExprArray transformed;
         transformer.transformRoot(exprs, transformed);
         replaceArray(exprs, transformed);
-        translator.noteFinishedTiming("compile:tree transform: normalize.DFStransform", startCycles);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         KeyedProjectTransformer transformer;
         HqlExprArray transformed;
         transformer.transformRoot(exprs, transformed);
         replaceArray(exprs, transformed);
-        translator.noteFinishedTiming("compile:tree transform: normalize.KeyedProjectTransformer", startCycles);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         HqlLinkedChildRowTransformer transformer(translator.queryOptions().implicitLinkedChildRows);
         HqlExprArray transformed;
         transformer.transformArray(exprs, transformed);
         replaceArray(exprs, transformed);
-        translator.noteFinishedTiming("compile:tree transform: normalize.linkedChildRows", startCycles);
     }
 
     if (seenLocalUpload)
@@ -13646,16 +13626,12 @@ void HqlCppTranslator::normalizeGraphForGeneration(HqlExprArray & exprs, HqlQuer
     //Don't change the engine if libraries are involved, otherwise things will get very confused.
 
     {
-        cycle_t startCycles = get_cycles_now();
         expandDelayedFunctionCalls(&queryErrorProcessor(), exprs);
-        noteFinishedTiming("compile:tree transform: expand delayed calls", startCycles);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         traceExpressions("before normalize", exprs);
         normalizeHqlTree(*this, exprs);
-        noteFinishedTiming("compile:tree transform: normalize", startCycles);
     }
 
     if (wu()->getDebugValueBool("dumpIR", false))
@@ -13664,7 +13640,12 @@ void HqlCppTranslator::normalizeGraphForGeneration(HqlExprArray & exprs, HqlQuer
     checkNormalized(exprs);
 #ifdef PICK_ENGINE_EARLY
     if (options.pickBestEngine)
+    {
+        cycle_t startCycles = get_cycles_now();
         pickBestEngine(exprs);
+        if (options.timeTransforms)
+            noteFinishedTiming("compile:transform:pick engine", startCycles);
+    }
 #endif
 
     allocateSequenceNumbers(exprs);                                             // Added to all expressions/output statements etc.
@@ -13680,13 +13661,10 @@ void HqlCppTranslator::applyGlobalOptimizations(HqlExprArray & exprs)
     checkNormalized(exprs);
 
     {
-        cycle_t startCycles = get_cycles_now();
         substituteClusterSize(exprs);
-        noteFinishedTiming("compile:tree transform: substituteClusterSize", startCycles);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         HqlExprArray folded;
         unsigned foldOptions = DEFAULT_FOLD_OPTIONS;
         if (options.foldConstantDatasets) foldOptions |= HFOconstantdatasets;
@@ -13698,7 +13676,6 @@ void HqlCppTranslator::applyGlobalOptimizations(HqlExprArray & exprs)
 
         foldHqlExpression(queryErrorProcessor(), folded, exprs, foldOptions);
         replaceArray(exprs, folded);
-        noteFinishedTiming("compile:tree transform: global fold", startCycles);
     }
 
     traceExpressions("after global fold", exprs);
@@ -13706,11 +13683,9 @@ void HqlCppTranslator::applyGlobalOptimizations(HqlExprArray & exprs)
 
     if (options.globalOptimize)
     {
-        cycle_t startCycles = get_cycles_now();
         HqlExprArray folded;
         optimizeHqlExpression(queryErrorProcessor(), folded, exprs, HOOfold);
         replaceArray(exprs, folded);
-        noteFinishedTiming("compile:tree transform: global optimize", startCycles);
     }
 
     traceExpressions("alloc", exprs);
@@ -13723,34 +13698,26 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
 #ifdef USE_SELSEQ_UID
     if (options.normalizeSelectorSequence)
     {
-        cycle_t startCycles = get_cycles_now();
         LeftRightTransformer normalizer;
         normalizer.process(curWorkflow.queryExprs());
-        noteFinishedTiming("compile:tree transform: left right", startCycles);
         //traceExpressions("after implicit alias", workflow);
     }
 #endif
 
     if (queryOptions().createImplicitAliases)
     {
-        cycle_t startCycles = get_cycles_now();
         ImplicitAliasTransformer normalizer;
         normalizer.process(curWorkflow.queryExprs());
-        noteFinishedTiming("compile:tree transform: implicit alias", startCycles);
         //traceExpressions("after implicit alias", workflow);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         hoistNestedCompound(*this, curWorkflow.queryExprs());
-        noteFinishedTiming("compile:tree transform: hoist nested compound", startCycles);
     }
 
     if (options.optimizeNestedConditional)
     {
-        cycle_t startCycles = get_cycles_now();
         optimizeNestedConditional(curWorkflow.queryExprs());
-        noteFinishedTiming("compile:optimize nested conditional", startCycles);
         traceExpressions("nested", curWorkflow);
         checkNormalized(curWorkflow);
     }
@@ -13758,43 +13725,33 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
     checkNormalized(curWorkflow);
     //sort(x)[n] -> topn(x, n)[]n, count(x)>n -> count(choosen(x,n+1)) > n and possibly others
     {
-        cycle_t startCycles = get_cycles_now();
         optimizeActivities(curWorkflow.queryWfid(), curWorkflow.queryExprs(), !targetThor(), options.optimizeNonEmpty);
-        noteFinishedTiming("compile:tree transform: optimize activities", startCycles);
     }
     checkNormalized(curWorkflow);
 
     //----------------------------- Transformations below this mark may have created globals so be very careful with hoisting ---------------------
 
     {
-        cycle_t startCycles = get_cycles_now();
         migrateExprToNaturalLevel(curWorkflow, wu(), *this);       // Ensure expressions are evaluated at the best level - e.g., counts moved to most appropriate level.
-        noteFinishedTiming("compile:tree transform: migrate", startCycles);
         //transformToAliases(exprs);
         traceExpressions("migrate", curWorkflow);
         checkNormalized(curWorkflow);
     }
 
     {
-        cycle_t startCycles = get_cycles_now();
         markThorBoundaries(curWorkflow);                                               // work out which engine is going to perform which operation.
-        noteFinishedTiming("compile:tree transform: thor hole", startCycles);
         traceExpressions("boundary", curWorkflow);
         checkNormalized(curWorkflow);
     }
 
     if (options.optimizeGlobalProjects)
     {
-        cycle_t startCycles = get_cycles_now();
         insertImplicitProjects(*this, curWorkflow.queryExprs());
-        noteFinishedTiming("compile:global implicit projects", startCycles);
         traceExpressions("implicit", curWorkflow);
         checkNormalized(curWorkflow);
     }
 
-    cycle_t startCycles3 = get_cycles_now();
     normalizeResultFormat(curWorkflow, options);
-    noteFinishedTiming("compile:tree transform: normalize result", startCycles3);
     traceExpressions("results", curWorkflow);
     checkNormalized(curWorkflow);
 
@@ -13806,9 +13763,7 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
 //  traceExpressions("flatten", workflow);
 
     {
-        cycle_t startCycles = get_cycles_now();
         mergeThorGraphs(curWorkflow, options.resourceConditionalActions, options.resourceSequential);          // reduces number of graphs sent to thor
-        noteFinishedTiming("compile:tree transform: merge thor", startCycles);
     }
 
     traceExpressions("merged", curWorkflow);
@@ -13823,9 +13778,7 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
     //expandGlobalDatasets(workflow, wu(), *this);
 
     {
-        cycle_t startCycles = get_cycles_now();
         mergeThorGraphs(curWorkflow, options.resourceConditionalActions, options.resourceSequential);
-        noteFinishedTiming("compile:tree transform: merge thor", startCycles);
     }
     checkNormalized(curWorkflow);
 
@@ -13851,12 +13804,10 @@ bool HqlCppTranslator::transformGraphForGeneration(HqlQueryContext & query, Work
     if (exprs.ordinality() == 0)
         return false;   // No action needed
 
-    cycle_t startCycles = get_cycles_now();
     ::extractWorkflow(*this, exprs, workflow);
 
     traceExpressions("workflow", workflow);
     checkNormalized(workflow);
-    noteFinishedTiming("compile:tree transform: stored results", startCycles);
 
     if (outputLibrary && workflow.ordinality() > 1)
     {
@@ -13882,7 +13833,12 @@ bool HqlCppTranslator::transformGraphForGeneration(HqlQueryContext & query, Work
 
 #ifndef PICK_ENGINE_EARLY
     if (options.pickBestEngine)
+    {
+        cycle_t startCycles = get_cycles_now();
         pickBestEngine(workflow);
+        if (options.timeTransforms)
+            noteFinishedTiming("compile:transform:pick engine", startCycles);
+    }
 #endif
     updateClusterType();
 
@@ -13899,7 +13855,8 @@ bool HqlCppTranslator::transformGraphForGeneration(HqlQueryContext & query, Work
         {
             cycle_t startCycles = get_cycles_now();
             checkDependencyConsistency(curWorkflow.queryExprs());
-            noteFinishedTiming("compile:tree transform: check dependency", startCycles);
+            if (options.timeTransforms)
+                noteFinishedTiming("compile:transform:check dependency", startCycles);
         }
 
         traceExpressions("end transformGraphForGeneration", curWorkflow);

+ 0 - 39
esp/smc/SMCLib/WUXMLInfo.cpp

@@ -294,45 +294,6 @@ bool CWUXMLInfo::buildXmlResultList(IConstWorkUnit &wu,IPropertyTree& XMLStructu
     return true;
 }
 
-/*
-//GH: MORE - this whole class looks as if it is unused, and should be deleted.  If that is not true the
-//following function needs to be rewritten to take into account the statistics
-bool CWUXMLInfo::buildXmlTimimgList(IConstWorkUnit &wu,IPropertyTree& XMLStructure)
-{
-    try{
-
-        IPropertyTree* timingTree = XMLStructure.addPropTree("Timings", createPTree(ipt_caseInsensitive));
-        Owned<IConstWUStatisticIterator> stats = &wu.getStatistics(NULL, NULL, "Time*");
-        ForEach(*stats)
-        {
-            IConstWUStatistic & cur = stats->query();
-            SCMStringBuffer description;
-            cur.getDescription(description);
-            SCMStringBuffer value;
-            unsigned count = cur.getCount();
-            unsigned __int64 duration = cur.getValue();
-            StringBuffer fd;
-            formatDuration(fd, nanoToMilli(duration));
-
-            IPropertyTree* Timer = timingTree->addPropTree("Timer", createPTree(ipt_caseInsensitive));
-            Timer->setProp("Name",description.str());
-            Timer->setProp("Value",fd.str());
-            Timer->setPropInt("Count",count);
-        }
-    }
-    catch(IException* e){   
-      StringBuffer msg;
-      e->errorMessage(msg);
-        WARNLOG("%s", msg.str());
-        e->Release();
-    }
-    catch(...){
-        WARNLOG("Unknown Exception caught within CWUXMLInfo::buildXmlTimimgList");
-    }
-
-    return true;
-}
-*/
 
 bool CWUXMLInfo::buildXmlLogList(IConstWorkUnit &wu,IPropertyTree& XMLStructure)
 {