| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | 
// Qt includes#include <QApplication>#include <QDebug>#include <QList>#include <QTimer>// CTKVTK includes#include "ctkVTKConnection.h"// VTK includes#include <vtkCallbackCommand.h>#include <vtkCommand.h>#include <vtkObject.h>#include <vtkSmartPointer.h>#include <vtkTimerLog.h>// STD includes#include <cstdlib>#include <iostream>//-----------------------------------------------------------------------------void doit(vtkObject* vtkNotUsed(obj), unsigned long vtkNotUsed(event),          void* client_data, void* vtkNotUsed(param)){  QTimer* t = reinterpret_cast<QTimer*>(client_data);  t->stop();}//-----------------------------------------------------------------------------int ctkVTKConnectionTest1( int argc, char * argv [] ){  QApplication app(argc, argv);  int objects = 1000;  int events = 100;  vtkObject* obj = vtkObject::New();  vtkObject* obj2 = vtkObject::New();  vtkObject* obj3 = vtkObject::New();  vtkObject* obj4 = vtkObject::New();  vtkObject* obj5 = vtkObject::New();  QObject*   topObject = new QObject(0);  // It could be here any kind of Qt object, QTimer has a no op slot so use it  QTimer*    slotObject = new QTimer(topObject);  for (int i = 0; i < objects; ++i)    {    ctkVTKConnection* connection = new ctkVTKConnection(topObject);    connection->observeDeletion(false);    connection->setup(obj, vtkCommand::ModifiedEvent,                      slotObject, SLOT(stop()));    vtkCallbackCommand* callback = vtkCallbackCommand::New();    callback->SetClientData(slotObject);    callback->SetCallback(doit);    obj2->AddObserver(vtkCommand::ModifiedEvent, callback);    callback->Delete();    ctkVTKConnection* connection2 = new ctkVTKConnection(topObject);    connection2->observeDeletion(true);    connection2->setup(obj3, vtkCommand::ModifiedEvent,                      slotObject, SLOT(stop()));    ctkVTKConnection* connection3 = new ctkVTKConnection(topObject);    connection3->observeDeletion(false);    connection3->setup(obj4, vtkCommand::ModifiedEvent,                      new QTimer(topObject), SLOT(stop()));    ctkVTKConnection* connection4 = new ctkVTKConnection(topObject);    connection4->observeDeletion(true);    connection4->setup(obj5, vtkCommand::ModifiedEvent,                      slotObject, SLOT(stop()));    }  vtkSmartPointer<vtkTimerLog> timerLog =    vtkSmartPointer<vtkTimerLog>::New();  timerLog->StartTimer();  for (int i = 0; i < events; ++i)    {    obj->Modified();    }  timerLog->StopTimer();  double t1 = timerLog->GetElapsedTime();  qDebug() << events << "events listened by" << objects << "objects (ctkVTKConnection): " << t1 << "seconds";  // Callback only  vtkSmartPointer<vtkTimerLog> timerLog2 =    vtkSmartPointer<vtkTimerLog>::New();  timerLog2->StartTimer();  for (int i = 0; i < events; ++i)    {    obj2->Modified();    }  timerLog2->StopTimer();  double t2 = timerLog2->GetElapsedTime();  qDebug() << events << "events listened by" << objects <<"objects (vtkCallbacks): " << t2 << "seconds";  double ratio = t1 / t2;  qDebug() << "ctkVTKConnection / vtkCallbacks: " << ratio;  vtkSmartPointer<vtkTimerLog> timerLog3 =    vtkSmartPointer<vtkTimerLog>::New();  timerLog3->StartTimer();  for (int i = 0; i < events; ++i)    {    obj3->Modified();    }  timerLog3->StopTimer();  double t3 = timerLog3->GetElapsedTime();  qDebug() << events << "events listened by" << objects << "objects (observed ctkVTKConnection): " << t3 << "seconds";  vtkSmartPointer<vtkTimerLog> timerLog4 =    vtkSmartPointer<vtkTimerLog>::New();  timerLog4->StartTimer();  for (int i = 0; i < events; ++i)    {    obj4->Modified();    }  timerLog4->StopTimer();  double t4 = timerLog4->GetElapsedTime();  qDebug() << events << "events listened by" << objects << "objects (ctkVTKConnection, 1-1): " << t4 << "seconds";  obj->Delete();  obj2->Delete();  obj3->Delete();  delete topObject;  obj4->Delete();  obj5->Delete();#ifdef QT_NO_DEBUG // In Debug mode, the ratio can be over 2 !  // Ideally a ratio ~= 1.  if (ratio > 1.2)    {    return EXIT_FAILURE;    }#endif  return EXIT_SUCCESS;}
 |