skipping to unpck objects by default for better performance, optional argument
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Nov 2010 01:14:52 +0000 (01:14 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Nov 2010 01:14:52 +0000 (01:14 +0000)
'-check-object' switches on the funtionality

HLT/BASE/util/AliHLTMonitoringRelay.cxx
HLT/BASE/util/AliHLTMonitoringRelay.h

index 9242666..873675b 100644 (file)
 //* provided "as is" without express or implied warranty.                  *
 //**************************************************************************
 
-/** @file   AliHLTMonitoringRelay.cxx
-    @author Matthias Richter
-    @date   2009-11-11
-    @brief  Relay components for monitoring objects.
-*/
+/// @file   AliHLTMonitoringRelay.cxx
+/// @author Matthias Richter
+/// @date   2009-11-11
+/// @brief  Relay components for monitoring objects.
+///
 
 #include <cstdlib>
 #include <cassert>
@@ -28,6 +28,7 @@
 #include "AliHLTMessage.h"
 #include "TArrayC.h"
 #include "TObject.h"
+#include "TDatime.h"
 
 /** ROOT macro for the implementation of ROOT specific class methods */
 ClassImp(AliHLTMonitoringRelay)
@@ -36,6 +37,7 @@ AliHLTMonitoringRelay::AliHLTMonitoringRelay()
   : AliHLTProcessor()
   , fItems()
   , fOutputSize()
+  , fFlags(0)
 {
   // see header file for class documentation
   // or
@@ -91,7 +93,10 @@ int AliHLTMonitoringRelay::ScanConfigurationArgument(int argc, const char** argv
   if (argument.CompareTo("-verbose")==0) {
     // 
     return 1;
-  }    
+  } else if (argument.CompareTo("-check-object")==0) { // check the objects in the blocks
+    SetFlag(kCheckObject);
+    return 1;
+  }
 
   return 0;
 }
@@ -119,12 +124,14 @@ int AliHLTMonitoringRelay::DoEvent(const AliHLTComponentEventData& /*evtData*/,
   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock();
        pBlock!=NULL; 
        pBlock=GetNextInputBlock()) {
-    TObject* pObject=AliHLTMessage::Extract(pBlock->fPtr, pBlock->fSize);
-    if (!pObject) continue; // consider only TObjects
+    // ignore private blocks
+    if (pBlock->fDataType==(kAliHLTAnyDataType|kAliHLTDataOriginPrivate)) continue;
+    TObject* pObject=NULL;
+    if (CheckFlag(kCheckObject)) pObject=AliHLTMessage::Extract(pBlock->fPtr, pBlock->fSize);
     
     AliHLTMonitoringItem* pItem=FindItem(pBlock, pObject);
     if (pItem) {
-      HLTInfo("found block %s 0x%0lx %s %s", DataType2Text(pItem->GetDataType()).c_str(), pItem->GetSpecification(), pObject->GetName(), pObject->GetName());
+      HLTInfo("found block %s 0x%0lx %s %s", DataType2Text(pItem->GetDataType()).c_str(), pItem->GetSpecification(), pObject?pObject->GetName():"", pObject?pObject->GetName():"");
       if (pItem->GetSize()<pBlock->fSize) {
        // update with the new maximum
        assert(fOutputSize>=pItem->GetSize());
@@ -137,19 +144,28 @@ int AliHLTMonitoringRelay::DoEvent(const AliHLTComponentEventData& /*evtData*/,
       pItem=new AliHLTMonitoringItem(pBlock, pObject);
       fItems.push_back(pItem);
       fOutputSize+=pBlock->fSize;
-      HLTInfo("new item size %d (%d),  %s 0x%0lx %s %s", pItem->GetSize(), fOutputSize, DataType2Text(pItem->GetDataType()).c_str(), pItem->GetSpecification(), pObject->GetName(), pObject->GetName());
+      HLTInfo("new item size %d (%d),  %s 0x%0lx %s %s", pItem->GetSize(), fOutputSize, DataType2Text(pItem->GetDataType()).c_str(), pItem->GetSpecification(), pObject?pObject->GetName():"", pObject?pObject->GetName():"");
     }
-    delete pObject;
+    if (pObject) delete pObject;
   }
 
+  int nofObjects=0;
   for (AliHLTMonitoringItemPList::iterator element=fItems.begin();
        element!=fItems.end(); element++) {
     AliHLTMonitoringItem* pItem=*element;
     if (pItem) {
       HLTInfo("push back item size %d (%d),  %s 0x%0lx", pItem->GetSize(), fOutputSize, DataType2Text(pItem->GetDataType()).c_str(), pItem->GetSpecification());
       PushBack(pItem->GetBuffer(), pItem->GetSize(), pItem->GetDataType(), pItem->GetSpecification());
+      if (!pItem->GetObjectName().IsNull()) nofObjects++;
     }
   }
+  // info output once every 5 seconds
+  const TDatime time;
+  static UInt_t lastTime=0;
+  if (time.Get()-lastTime>5) {
+      lastTime=time.Get();
+      HLTBenchmark("accumulated %d items containing %d TObjects", fItems.size(), nofObjects);
+  }
 
   return iResult;
 }
index ce15d97..dd46c41 100644 (file)
@@ -7,11 +7,11 @@
 //* ALICE Experiment at CERN, All rights reserved.                         *
 //* See cxx source for full Copyright notice                               *
 
-/** @file   AliHLTMonitoringRelay.h
-    @author Matthias Richter
-    @date   2009-11-11
-    @brief  Relay components for monitoring objects.
-*/
+/// @file   AliHLTMonitoringRelay.h
+/// @author Matthias Richter
+/// @date   2009-11-11
+/// @brief  Relay components for monitoring objects.
+///
 
 #include "AliHLTProcessor.h"
 #include "TString.h"
@@ -46,6 +46,9 @@ class TObject;
  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
  * \li -verbose                                                         <br>
  *      print out some more info messages, mainly for the sake of tutorials
+ * \li -check-object                                                    <br>
+ *      unpack the object from the binary block and use also object name
+ *      and title for indexing
  *
  * <h2>Configuration:</h2>
  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
@@ -89,6 +92,10 @@ class AliHLTMonitoringRelay : public AliHLTProcessor
   /// inherited from AliHLTComponent, create a component
   virtual AliHLTComponent* Spawn() {return new AliHLTMonitoringRelay;}
 
+  enum {
+    kCheckObject = 0x1
+  };
+
   /// descriptor of monitoring items
   class AliHLTMonitoringItem {
   public:
@@ -110,6 +117,8 @@ class AliHLTMonitoringRelay : public AliHLTProcessor
     const AliHLTComponentDataType& GetDataType() const;
     /// get specification
     AliHLTUInt32_t GetSpecification() const;
+    /// get object name
+    const TString& GetObjectName() const {return fName;}
 
     bool operator==(const AliHLTComponentBlockData& bd) const;
     bool operator!=(const AliHLTComponentBlockData& bd) const;
@@ -122,7 +131,7 @@ class AliHLTMonitoringRelay : public AliHLTProcessor
     AliHLTMonitoringItem(const AliHLTMonitoringItem&);
     /// assignment operator prohibited
     AliHLTMonitoringItem& operator=(const AliHLTMonitoringItem&);
-    
+
     AliHLTComponentDataType fDt;                //! transient
     AliHLTUInt32_t          fSpecification;     //! transient
     TString                 fName;              //! transient
@@ -157,10 +166,15 @@ class AliHLTMonitoringRelay : public AliHLTProcessor
   /// find a block of data type and specificaton
   AliHLTMonitoringItem* FindItem(const AliHLTComponentBlockData* pBlock, const TObject* pObject) const;
 
+  void SetFlag(unsigned flag) {fFlags|=flag;}
+  bool CheckFlag(unsigned flag) const {return (fFlags&flag)!=0;}
+
   /// the list of items
   AliHLTMonitoringItemPList  fItems; //! transient
   /// actual size of the data sample
   unsigned fOutputSize; //! transient
+  /// operation flags
+  unsigned fFlags; //! transient
 
   ClassDef(AliHLTMonitoringRelay, 0)
 };