]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
CCAR: add TIMING macros and optimizations in SOCC_Viewer, GEOMDisplayer, GEOMClient
authorcaremoli <caremoli>
Thu, 3 Jul 2008 14:23:39 +0000 (14:23 +0000)
committercaremoli <caremoli>
Thu, 3 Jul 2008 14:23:39 +0000 (14:23 +0000)
src/GEOMClient/GEOM_Client.cxx
src/GEOMClient/GEOM_Client.hxx
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GeometryGUI_Swig.cxx
src/GEOMImpl/GEOMImpl_CylinderDriver.cxx
src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx
src/GEOM_I/GEOM_Gen_i.cc
src/GEOM_I/GEOM_I3DPrimOperations_i.cc
src/OBJECT/GEOM_AssemblyBuilder.cxx

index 5f89234b9c25892ae1ec7eeb5a60054bbb7483bc..1ec22d5f10e02c79a71f02271f062fbc3dfe7e00 100644 (file)
@@ -60,6 +60,14 @@ using namespace std;
 
 #define HST_CLIENT_LEN 256
 
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+  tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
 
 
 //=======================================================================
@@ -120,6 +128,17 @@ GEOM_Client::GEOM_Client(Engines::Container_ptr client)
 //=======================================================================
 Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S )
 {
+  //CCAR
+#if 1
+  if(_myIndexes.count(IOR)==0)
+    return 0;
+  else
+    {
+      Standard_Integer i =_myIndexes[IOR];
+      S = myShapes.Value(i);
+      return i;
+    }
+#else
   for ( Standard_Integer i = 1; i<= myIORs.Length(); i++ ) {
     if (myIORs.Value(i).IsEqual(IOR)) {
       S = myShapes.Value(i);
@@ -127,6 +146,7 @@ Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_S
     }
   }
   return 0;
+#endif
 }
 
 //=======================================================================
@@ -152,6 +172,7 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape&
 {
   myIORs.Append(IOR);
   myShapes.Append(S);
+  _myIndexes[IOR]=_myIndexes.size()+1;
 }
 
 //=======================================================================
@@ -168,6 +189,7 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
   if( anIndex != 0 ) {
     myIORs.Remove(anIndex) ;
     myShapes.Remove(anIndex) ;
+    _myIndexes.erase(IOR);
   }
   return ;
 }
@@ -183,6 +205,7 @@ void GEOM_Client::ClearClientBuffer()
     return ;
   myIORs.Clear() ;
   myShapes.Clear() ;
+  _myIndexes.clear();
   return ;
 }
 
@@ -202,6 +225,7 @@ unsigned int GEOM_Client::BufferLength()
 //=======================================================================
 TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
 {
+ START_TIMING
   TopoDS_Shape S;
   TCollection_AsciiString IOR = geom->GetStringFromIOR(aShape);
   Standard_Integer anIndex = Find(IOR, S);
@@ -212,6 +236,7 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
   if (aShape->IsMainShape()) {
     S = Load(geom, aShape);
     Bind(IOR, S);
+END_TIMING(200)
     return S;
   }
 
@@ -241,5 +266,6 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
     S = aCompound;
   }
   Bind(IOR, S);
+END_TIMING(200)
   return S;
 }
index 161fcc1051ae5ca61dc1822d7cf644e7f04a2d8f..46e31374a7321d003d1dd8543343588ab5e2e06f 100644 (file)
@@ -70,6 +70,8 @@ class TopoDS_Shape;
  #define GEOMCLIENT_EXPORT
 #endif
 
+#include <TCollection_AsciiString.hxx>
+#include <map>
 //=====================================================================
 // GEOM_Client : class definition
 //=====================================================================
@@ -116,6 +118,7 @@ private:
   //
   TColStd_SequenceOfAsciiString myIORs ;
   TopTools_SequenceOfShape myShapes ;
+  std::map< TCollection_AsciiString , int > _myIndexes;
   long  pid_client;
 };
 
index 55e318612da0f2c6115795cf93324ea0470eecc0..7cafd602f231a2d6426b222481f4571ae5634091 100644 (file)
 
 #include "GEOMImpl_Types.hxx"
 
+#include "OCCViewer_ViewModel.h"
+#include "SALOME_InteractiveObject.hxx"
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+  tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
+
 using namespace std;
 
 //================================================================
@@ -305,11 +317,13 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO,
                             const bool updateViewer,
                             SALOME_View* theViewFrame )
 {
+  //START_TIMING
   SALOME_View* vf = theViewFrame ? theViewFrame : GetActiveView();
   if ( vf )
   {
     SALOME_Prs* prs = buildPresentation( theIO->getEntry(), vf );
 
+  //END_TIMING(1)
     if ( prs )
     {
       vf->BeforeDisplay( this );
@@ -785,6 +799,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
 //=================================================================
 void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
 {
+  START_TIMING
   SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
   if ( !vtkPrs || myShape.IsNull() )
     return;
@@ -880,6 +895,7 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
     aProp->Delete();
 
   theActors->Delete();
+  END_TIMING(50)
 }
 
 //=================================================================
@@ -954,7 +970,12 @@ SALOME_Prs* GEOM_Displayer::buildPresentation( const QString& entry,
 
   if ( myViewFrame )
   {
+    //CCAR
+#if 1
+    prs = LightApp_Displayer::buildPresentation( QString(), theViewFrame );
+#else
     prs = LightApp_Displayer::buildPresentation( entry, theViewFrame );
+#endif
     if ( prs )
     {
       Handle( SALOME_InteractiveObject ) theIO = new SALOME_InteractiveObject();
index 57df497a60dd566b120d70590cf6c18dc6525281..c3e7d6aaf8eb59dd40fcc2bbc764cd954e273f81 100644 (file)
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 
 #include <vtkRenderer.h>
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+    tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 using namespace std;
 
@@ -124,6 +133,7 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
     {}
     virtual void Execute()
     {
+      START_TIMING
       SUIT_Application* app = SUIT_Session::session()->activeApplication();
       if (!app) return;
 
@@ -216,6 +226,7 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
          }
        }
       }
+      END_TIMING(200)
     }
   };
 
index cba3e36c5ed26232de47df9750063dbd33895828..7b21b9a1484bfbd4d55bb96c558d1360eebb4bad 100644 (file)
 #include <StdFail_NotDone.hxx>
 #include <gp_Pnt.hxx>
 #include <gp.hxx>
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+    tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 //=======================================================================
 //function : GetID
@@ -65,6 +74,7 @@ GEOMImpl_CylinderDriver::GEOMImpl_CylinderDriver()
 //=======================================================================
 Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const
 {
+  START_TIMING
   if (Label().IsNull()) return 0;
   Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
 
@@ -120,6 +130,7 @@ Standard_Integer GEOMImpl_CylinderDriver::Execute(TFunction_Logbook& log) const
   aFunction->SetValue(aShape);
 
   log.SetTouched(Label());
+  END_TIMING(200)
 
   return 1;
 }
index a1c554544528d6aa825ae2b810144f72ca162eb0..412c5e30fa9b2a9837d1f57944e73d36d90be7da 100644 (file)
 
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+  tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 //=============================================================================
 /*!
@@ -251,6 +260,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO
                                                                       Handle(GEOM_Object) theVec,
                                                                       double theR, double theH)
 {
+  START_TIMING
+
   SetErrorCode(KO);
 
   if (thePnt.IsNull() || theVec.IsNull()) return NULL;
@@ -299,6 +310,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeCylinderPntVecRH (Handle(GEO
     << thePnt << ", " << theVec << ", " << theR << ", " << theH << ")";
 
   SetErrorCode(OK);
+  END_TIMING(200)
   return aCylinder;
 }
 
index 4a89a99bcfdebf1ffdc26a719c62a33d4b23cba1..bc6f7ee8e75727b95ff7b6847ff567213a8bd7e1 100644 (file)
 #include <OSD.hxx>
 
 #include "SALOMEDS_Tool.hxx"
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+    tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 //============================================================================
 // function : GEOM_Gen_i()
@@ -527,6 +536,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy,
                                              const char* theName,
                                              GEOM::GEOM_Object_ptr theFather)
 {
+  START_TIMING
   SALOMEDS::SObject_var aResultSO;
   if(theObject->_is_nil() || theStudy->_is_nil()) return aResultSO;
 
@@ -558,6 +568,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy,
     SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aResultSO);
     aStudyBuilder->Addreference(aSubSO, aSO);
   }
+  END_TIMING(200)
 
   return aResultSO._retn();
 }
index 55160f0fb836aaf88279c1fc7422fee5263b77f0..2b958c715fddb675203136298dde4c4d39d7a3be 100644 (file)
 
 #include "GEOM_Engine.hxx"
 #include "GEOM_Object.hxx"
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+  tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 //=============================================================================
 /*!
@@ -111,6 +120,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
                                                                CORBA::Double theH)
 {
+  START_TIMING
   GEOM::GEOM_Object_var aGEOMObject;
 
   //Set a not done flag
@@ -121,6 +131,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
+  END_TIMING(200)
   return GetObject(anObject);
 }
 
@@ -134,6 +145,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH
                       CORBA::Double theR, CORBA::Double theH)
 {
   GEOM::GEOM_Object_var aGEOMObject;
+  //START_TIMING
 
   //Set a not done flag
   GetOperations()->SetNotDone();
@@ -153,6 +165,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
+  //END_TIMING(200)
   return GetObject(anObject);
 }
 
index 5a0fa17a3ed867e088cd044744959f4356e00845..b2652c94a918695033fc89778dd67a313719cc0a 100644 (file)
 #include <TopoDS_Iterator.hxx>
 
 #include "utilities.h"
+#include <sys/time.h>
+static long tt0;
+static long tcount=0;
+static long cumul;
+#define START_TIMING timeval tv; gettimeofday(&tv,0);tt0=tv.tv_usec+tv.tv_sec*1000000;
+#define END_TIMING(NUMBER) \
+    tcount=tcount+1;gettimeofday(&tv,0);cumul=cumul+tv.tv_usec+tv.tv_sec*1000000 -tt0; \
+  if(tcount==NUMBER){ std::cerr << __FILE__ << __LINE__ << " temps CPU(mus): " << cumul << std::endl; tcount=0;cumul=0; }
+
 
 using namespace std;
 // SALOME
@@ -254,7 +263,9 @@ vtkActorCollection* GEOM_AssemblyBuilder::BuildActors(const TopoDS_Shape& myShap
     
     for (ex.Init(myShape, TopAbs_FACE); ex.More(); ex.Next()) {
       
+  START_TIMING
       GEOM_Actor* FaceActor = GEOM_Actor::New();
+  END_TIMING(450)
       FaceActor->SetShadingProperty(FaceProp);
       FaceActor->SetWireframeProperty(IsoProp);