-
Notifications
You must be signed in to change notification settings - Fork 478
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'plugin-fw-performance-improvements'
- Loading branch information
Showing
48 changed files
with
1,478 additions
and
465 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
/*============================================================================= | ||
Library: CTK | ||
Copyright (c) German Cancer Research Center, | ||
Division of Medical and Biological Informatics | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
=============================================================================*/ | ||
|
||
#ifndef CTKHIGHPRECISIONTIMER_H | ||
#define CTKHIGHPRECISIONTIMER_H | ||
|
||
|
||
#include <qglobal.h> | ||
|
||
#ifdef Q_OS_UNIX | ||
#include <time.h> | ||
#include <unistd.h> | ||
#elif defined(Q_OS_WIN) | ||
#include <windows.h> | ||
#else | ||
#include <QTime> | ||
#endif | ||
|
||
#include "ctkException.h" | ||
|
||
/** | ||
* \ingroup Core | ||
* | ||
* | ||
* @brief A fast and high precision timer. | ||
* | ||
* This class provides a fast and high precision timer depending on | ||
* platform specific API. It can be used as a QTime replacement for | ||
* runtime measurements with a minimal performance overhead. | ||
*/ | ||
class ctkHighPrecisionTimer { | ||
|
||
public: | ||
|
||
inline ctkHighPrecisionTimer(); | ||
|
||
inline void start(); | ||
|
||
inline qint64 elapsedMilli(); | ||
|
||
inline qint64 elapsedMicro(); | ||
|
||
private: | ||
|
||
#ifdef _POSIX_MONOTONIC_CLOCK | ||
timespec startTime; | ||
#elif defined(Q_OS_WIN) | ||
LARGE_INTEGER timerFrequency; | ||
LARGE_INTEGER startTime; | ||
#else | ||
QTime startTime; | ||
#endif | ||
}; | ||
|
||
#ifdef _POSIX_MONOTONIC_CLOCK | ||
|
||
inline ctkHighPrecisionTimer::ctkHighPrecisionTimer() | ||
{ | ||
startTime.tv_nsec = 0; | ||
startTime.tv_sec = 0; | ||
} | ||
|
||
inline void ctkHighPrecisionTimer::start() | ||
{ | ||
clock_gettime(CLOCK_MONOTONIC, &startTime); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMilli() | ||
{ | ||
timespec current; | ||
clock_gettime(CLOCK_MONOTONIC, ¤t); | ||
return (static_cast<qint64>(current.tv_sec)*1000 + current.tv_nsec/1000/1000) - | ||
(static_cast<qint64>(startTime.tv_sec)*1000 + startTime.tv_nsec/1000/1000); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMicro() | ||
{ | ||
timespec current; | ||
clock_gettime(CLOCK_MONOTONIC, ¤t); | ||
return (static_cast<qint64>(current.tv_sec)*1000*1000 + current.tv_nsec/1000) - | ||
(static_cast<qint64>(startTime.tv_sec)*1000*1000 + startTime.tv_nsec/1000); | ||
} | ||
|
||
#elif defined(Q_OS_WIN) | ||
|
||
inline ctkHighPrecisionTimer::ctkHighPrecisionTimer() | ||
{ | ||
if (!QueryPerformanceFrequency(&timerFrequency)) | ||
throw ctkRuntimeException("QueryPerformanceFrequency() failed"); | ||
} | ||
|
||
inline void ctkHighPrecisionTimer::start() | ||
{ | ||
//DWORD_PTR oldmask = SetThreadAffinityMask(GetCurrentThread(), 0); | ||
QueryPerformanceCounter(&startTime); | ||
//SetThreadAffinityMask(GetCurrentThread(), oldmask); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMilli() | ||
{ | ||
LARGE_INTEGER current; | ||
QueryPerformanceCounter(¤t); | ||
return (current.QuadPart - startTime.QuadPart) / (timerFrequency.QuadPart / 1000); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMicro() | ||
{ | ||
LARGE_INTEGER current; | ||
QueryPerformanceCounter(¤t); | ||
return (current.QuadPart - startTime.QuadPart) / (timerFrequency.QuadPart / (1000*1000)); | ||
} | ||
|
||
#else | ||
|
||
inline ctkHighPrecisionTimer::ctkHighPrecisionTimer() | ||
: startTime(QTime::currentTime()) | ||
{ | ||
} | ||
|
||
inline void ctkHighPrecisionTimer::start() | ||
{ | ||
startTime = QTime::currentTime(); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMilli() | ||
{ | ||
return startTime.elapsed(); | ||
} | ||
|
||
inline qint64 ctkHighPrecisionTimer::elapsedMicro() | ||
{ | ||
return startTime.elapsed() * 1000; | ||
} | ||
|
||
#endif | ||
|
||
#endif // CTKHIGHPRECISIONTIMER_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
140 changes: 0 additions & 140 deletions
140
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestMain.cpp
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
Libs/PluginFramework/Testing/org.commontk.eventadmintest.perf/CMakeLists.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
project(org_commontk_eventadmintest_perf) | ||
|
||
set(PLUGIN_export_directive "org_commontk_eventadmintest_perf_EXPORT") | ||
|
||
set(PLUGIN_SRCS | ||
ctkEventAdminTestPerfActivator_p.h | ||
ctkEventAdminTestPerfActivator.cpp | ||
ctkEventAdminPerfTestSuite_p.h | ||
ctkEventAdminPerfTestSuite.cpp | ||
) | ||
|
||
set(PLUGIN_MOC_SRCS | ||
ctkEventAdminTestPerfActivator_p.h | ||
ctkEventAdminPerfTestSuite_p.h | ||
) | ||
|
||
set(PLUGIN_UI_FORMS | ||
|
||
) | ||
|
||
set(PLUGIN_resources | ||
|
||
) | ||
|
||
ctkFunctionGetTargetLibraries(PLUGIN_target_libraries) | ||
|
||
if(UNIX) | ||
list(APPEND PLUGIN_target_libraries rt) | ||
endif() | ||
|
||
ctkMacroBuildPlugin( | ||
NAME ${PROJECT_NAME} | ||
EXPORT_DIRECTIVE ${PLUGIN_export_directive} | ||
SRCS ${PLUGIN_SRCS} | ||
MOC_SRCS ${PLUGIN_MOC_SRCS} | ||
UI_FORMS ${PLUGIN_UI_FORMS} | ||
RESOURCES ${PLUGIN_resources} | ||
TARGET_LIBRARIES ${PLUGIN_target_libraries} | ||
TEST_PLUGIN | ||
) | ||
|
||
set(eventadmin_perftest ${PROJECT_NAME} CACHE INTERNAL "Target name for the plugin containing performance tests for EventAdmin implementations") |
Oops, something went wrong.