Move b3Quickprof.* from Bullet 3.x src folder to btgui/Timing
The Bullet 3.x B3_PROFILE can be customized using b3SetCustomEnterProfileZoneFunc/b3SetCustomLeaveProfileZoneFunc defined in Bullet3Common/b3Logging, so you can hook Bullet 3.x up to your profiler of choice. The Demos3/BasicGpuDemo will show the Bullet 3.x timings inside the Bullet 2.x btQuickprof profiler.
This commit is contained in:
@@ -182,6 +182,10 @@ BasicGpuDemo::~BasicGpuDemo()
|
|||||||
|
|
||||||
void BasicGpuDemo::initPhysics()
|
void BasicGpuDemo::initPhysics()
|
||||||
{
|
{
|
||||||
|
//use the Bullet 2.x btQuickprof for profiling of Bullet 3.x
|
||||||
|
b3SetCustomEnterProfileZoneFunc(CProfileManager::Start_Profile);
|
||||||
|
b3SetCustomLeaveProfileZoneFunc(CProfileManager::Stop_Profile);
|
||||||
|
|
||||||
setTexturing(true);
|
setTexturing(true);
|
||||||
setShadows(false);//too slow with many objects
|
setShadows(false);//too slow with many objects
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ static char* particleKernelsString =
|
|||||||
#include "GpuDemoInternalData.h"
|
#include "GpuDemoInternalData.h"
|
||||||
|
|
||||||
|
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
|
|
||||||
//1000000 particles
|
//1000000 particles
|
||||||
//#define NUM_PARTICLES_X 100
|
//#define NUM_PARTICLES_X 100
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "PairBench.h"
|
#include "PairBench.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
@@ -10,6 +9,7 @@
|
|||||||
#include "OpenGLWindow/OpenGLInclude.h"
|
#include "OpenGLWindow/OpenGLInclude.h"
|
||||||
#include "OpenGLWindow/GLInstanceRendererInternalData.h"
|
#include "OpenGLWindow/GLInstanceRendererInternalData.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||||
|
#include "../../../btgui/Timing/b3Quickprof.h"
|
||||||
|
|
||||||
static b3KeyboardCallback oldCallback = 0;
|
static b3KeyboardCallback oldCallback = 0;
|
||||||
extern bool gReset;
|
extern bool gReset;
|
||||||
@@ -172,7 +172,10 @@ void PairBench::initPhysics(const ConstructionInfo& ci)
|
|||||||
|
|
||||||
m_instancingRenderer = ci.m_instancingRenderer;
|
m_instancingRenderer = ci.m_instancingRenderer;
|
||||||
|
|
||||||
|
#ifndef B3_NO_PROFILE
|
||||||
b3ProfileManager::CleanupMemory();
|
b3ProfileManager::CleanupMemory();
|
||||||
|
#endif //B3_NO_PROFILE
|
||||||
|
|
||||||
int strideInBytes = 9*sizeof(float);
|
int strideInBytes = 9*sizeof(float);
|
||||||
int numVertices = sizeof(cube_vertices)/strideInBytes;
|
int numVertices = sizeof(cube_vertices)/strideInBytes;
|
||||||
int numIndices = sizeof(cube_vertices)/sizeof(int);
|
int numIndices = sizeof(cube_vertices)/sizeof(int);
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
#include "OpenGLWindow/GLPrimitiveRenderer.h"
|
#include "OpenGLWindow/GLPrimitiveRenderer.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
//#include "OpenGL3CoreRenderer.h"
|
//#include "OpenGL3CoreRenderer.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
//#include "b3GpuDynamicsWorld.h"
|
//#include "b3GpuDynamicsWorld.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -37,6 +36,9 @@
|
|||||||
#include "rigidbody/GpuSphereScene.h"
|
#include "rigidbody/GpuSphereScene.h"
|
||||||
#include "rigidbody/Bullet2FileDemo.h"
|
#include "rigidbody/Bullet2FileDemo.h"
|
||||||
#include "softbody/GpuSoftBodyDemo.h"
|
#include "softbody/GpuSoftBodyDemo.h"
|
||||||
|
#include "../btgui/Timing/b3Quickprof.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//#include "BroadphaseBenchmark.h"
|
//#include "BroadphaseBenchmark.h"
|
||||||
|
|
||||||
@@ -412,6 +414,10 @@ int main(int argc, char* argv[])
|
|||||||
{
|
{
|
||||||
//b3OpenCLUtils::setCachePath("/Users/erwincoumans/develop/mycache");
|
//b3OpenCLUtils::setCachePath("/Users/erwincoumans/develop/mycache");
|
||||||
|
|
||||||
|
b3SetCustomEnterProfileZoneFunc(b3ProfileManager::Start_Profile);
|
||||||
|
b3SetCustomLeaveProfileZoneFunc(b3ProfileManager::Stop_Profile);
|
||||||
|
|
||||||
|
|
||||||
b3SetCustomPrintfFunc(myprintf);
|
b3SetCustomPrintfFunc(myprintf);
|
||||||
b3Vector3 test(1,2,3);
|
b3Vector3 test(1,2,3);
|
||||||
test.x = 1;
|
test.x = 1;
|
||||||
@@ -456,7 +462,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef B3_NO_PROFILE
|
#ifndef B3_NO_PROFILE
|
||||||
b3ProfileManager::Reset();
|
b3ProfileManager::Reset();
|
||||||
#endif //B3_NO_PROFILE
|
#endif //B3_NO_PROFILE
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ function createProject(vendor)
|
|||||||
"../../btgui/FontFiles/OpenSans.cpp",
|
"../../btgui/FontFiles/OpenSans.cpp",
|
||||||
"../../btgui/stb_image/stb_image.cpp",
|
"../../btgui/stb_image/stb_image.cpp",
|
||||||
"../../btgui/stb_image/stb_image.h",
|
"../../btgui/stb_image/stb_image.h",
|
||||||
|
"../../btgui/Timing/b3Quickprof.cpp",
|
||||||
|
"../../btgui/Timing/b3Quickprof.h",
|
||||||
|
"../../btgui/Timing/b3Clock.cpp",
|
||||||
|
"../../btgui/Timing/b3Clock.h",
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.is("Windows") then
|
if os.is("Windows") then
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ extern bool enableExperimentalCpuConcaveCollision;
|
|||||||
|
|
||||||
|
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
//#include "LinearMath/b3Quickprof.h"
|
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
#include "Bullet3Common/b3Matrix3x3.h"
|
#include "Bullet3Common/b3Matrix3x3.h"
|
||||||
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
|
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "ConcaveScene.h"
|
#include "ConcaveScene.h"
|
||||||
#include "GpuRigidBodyDemo.h"
|
#include "GpuRigidBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
|
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "GpuCompoundScene.h"
|
#include "GpuCompoundScene.h"
|
||||||
#include "GpuRigidBodyDemo.h"
|
#include "GpuRigidBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
|
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "GpuConvexScene.h"
|
#include "GpuConvexScene.h"
|
||||||
#include "GpuRigidBodyDemo.h"
|
#include "GpuRigidBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
|
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "GpuRigidBodyDemo.h"
|
#include "GpuRigidBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#include "GpuSphereScene.h"
|
#include "GpuSphereScene.h"
|
||||||
#include "GpuRigidBodyDemo.h"
|
#include "GpuRigidBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "GpuSoftBodyDemo.h"
|
#include "GpuSoftBodyDemo.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "OpenGLWindow/ShapeData.h"
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
#include "OpenGLWindow/GLPrimitiveRenderer.h"
|
#include "OpenGLWindow/GLPrimitiveRenderer.h"
|
||||||
#include "OpenGLWindow/GLInstancingRenderer.h"
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
//#include "OpenGL3CoreRenderer.h"
|
//#include "OpenGL3CoreRenderer.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
//#include "b3GpuDynamicsWorld.h"
|
//#include "b3GpuDynamicsWorld.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -19,7 +18,7 @@
|
|||||||
#include "OpenGLTrueTypeFont/opengl_fontstashcallbacks.h"
|
#include "OpenGLTrueTypeFont/opengl_fontstashcallbacks.h"
|
||||||
|
|
||||||
#include "OpenGLWindow/GwenOpenGL3CoreRenderer.h"
|
#include "OpenGLWindow/GwenOpenGL3CoreRenderer.h"
|
||||||
|
#include "../btgui/Timing/b3Quickprof.h"
|
||||||
|
|
||||||
#include "Gwen/Gwen.h"
|
#include "Gwen/Gwen.h"
|
||||||
#include "Gwen/Controls/Button.h"
|
#include "Gwen/Controls/Button.h"
|
||||||
|
|||||||
@@ -49,10 +49,12 @@ function createProject(vendor)
|
|||||||
"../../src/Bullet3Geometry/b3ConvexHullComputer.cpp",
|
"../../src/Bullet3Geometry/b3ConvexHullComputer.cpp",
|
||||||
"../../src/Bullet3Geometry/b3ConvexHullComputer.h",
|
"../../src/Bullet3Geometry/b3ConvexHullComputer.h",
|
||||||
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.cpp",
|
"../../src/Bullet3Common/b3logging.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.h",
|
"../../src/Bullet3Common/b3logging.h",
|
||||||
"../../src/Bullet3Common/b3Logging.cpp",
|
"../../btgui/Timing/b3Quickprof.cpp",
|
||||||
"../../src/Bullet3Common/b3Logging.h",
|
"../../btgui/Timing/b3Quickprof.h",
|
||||||
|
"../../btgui/Timing/b3Clock.cpp",
|
||||||
|
"../../btgui/Timing/b3Clock.h",
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,10 @@
|
|||||||
"../../src/Bullet3Common/b3Logging.h",
|
"../../src/Bullet3Common/b3Logging.h",
|
||||||
"../../src/Bullet3Common/b3Logging.cpp",
|
"../../src/Bullet3Common/b3Logging.cpp",
|
||||||
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.cpp",
|
"../../btgui/Timing/b3Quickprof.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.h",
|
"../../btgui/Timing/b3Quickprof.h",
|
||||||
|
"../../btgui/Timing/b3Clock.cpp",
|
||||||
|
"../../btgui/Timing/b3Clock.h",
|
||||||
"**.cpp",
|
"**.cpp",
|
||||||
"**.h",
|
"**.h",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,10 @@
|
|||||||
"../OpenGLWindow/LoadShader.cpp",
|
"../OpenGLWindow/LoadShader.cpp",
|
||||||
"../OpenGLWindow/LoadShader.h",
|
"../OpenGLWindow/LoadShader.h",
|
||||||
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.cpp",
|
"../Timing/b3Quickprof.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.h" ,
|
"../Timing/b3Quickprof.h" ,
|
||||||
|
"../Timing/b3Clock.cpp",
|
||||||
|
"../Timing/b3Clock.h" ,
|
||||||
"fontstash.cpp",
|
"fontstash.cpp",
|
||||||
"fontstash.h",
|
"fontstash.h",
|
||||||
"opengl_fontstashcallbacks.cpp",
|
"opengl_fontstashcallbacks.cpp",
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ subject to the following restrictions:
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "Bullet3Common/b3Vector3.h"
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
#include "Bullet3Common/b3Quaternion.h"
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "Bullet3Common/b3Matrix3x3.h"
|
#include "Bullet3Common/b3Matrix3x3.h"
|
||||||
#include "LoadShader.h"
|
#include "LoadShader.h"
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,10 @@
|
|||||||
"../../src/Bullet3Geometry/b3ConvexHullComputer.cpp",
|
"../../src/Bullet3Geometry/b3ConvexHullComputer.cpp",
|
||||||
"../../src/Bullet3Geometry/b3ConvexHullComputer.h",
|
"../../src/Bullet3Geometry/b3ConvexHullComputer.h",
|
||||||
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.cpp",
|
"../Timing/b3Quickprof.cpp",
|
||||||
"../../src/Bullet3Common/b3Quickprof.h"
|
"../Timing/b3Quickprof.h",
|
||||||
|
"../Timing/b3Clock.cpp",
|
||||||
|
"../Timing/b3Clock.h",
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.is("Windows") then
|
if os.is("Windows") then
|
||||||
|
|||||||
@@ -651,7 +651,7 @@ void b3DynamicBvh::extractLeaves(const b3DbvtNode* node,b3AlignedObjectArray<c
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "LinearMath/b3QuickProf.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
q6600,2.4ghz
|
q6600,2.4ghz
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ subject to the following restrictions:
|
|||||||
|
|
||||||
#if B3_DBVT_BP_PROFILE
|
#if B3_DBVT_BP_PROFILE
|
||||||
#define B3_DBVT_BP_PROFILING_RATE 256
|
#define B3_DBVT_BP_PROFILING_RATE 256
|
||||||
#include "LinearMath/b3Quickprof.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,37 @@ void b3OutputErrorMessageVarArgsInternal(const char *str, ...)
|
|||||||
va_end(argList);
|
va_end(argList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void b3EnterProfileZoneDefault(const char* name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void b3LeaveProfileZoneDefault()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static b3EnterProfileZoneFunc* b3s_enterFunc = b3EnterProfileZoneDefault;
|
||||||
|
static b3LeaveProfileZoneFunc* b3s_leaveFunc = b3LeaveProfileZoneDefault;
|
||||||
|
void b3EnterProfileZone(const char* name)
|
||||||
|
{
|
||||||
|
(b3s_enterFunc)(name);
|
||||||
|
}
|
||||||
|
void b3LeaveProfileZone()
|
||||||
|
{
|
||||||
|
(b3s_leaveFunc)();
|
||||||
|
}
|
||||||
|
|
||||||
|
void b3SetCustomEnterProfileZoneFunc(b3EnterProfileZoneFunc* enterFunc)
|
||||||
|
{
|
||||||
|
b3s_enterFunc = enterFunc;
|
||||||
|
}
|
||||||
|
void b3SetCustomLeaveProfileZoneFunc(b3LeaveProfileZoneFunc* leaveFunc)
|
||||||
|
{
|
||||||
|
b3s_leaveFunc = leaveFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#undef vsprintf_s
|
#undef vsprintf_s
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,21 +2,6 @@
|
|||||||
#ifndef B3_LOGGING_H
|
#ifndef B3_LOGGING_H
|
||||||
#define B3_LOGGING_H
|
#define B3_LOGGING_H
|
||||||
|
|
||||||
|
|
||||||
typedef void (b3PrintfFunc)(const char* msg);
|
|
||||||
typedef void (b3WarningMessageFunc)(const char* msg);
|
|
||||||
typedef void (b3ErrorMessageFunc)(const char* msg);
|
|
||||||
|
|
||||||
///The developer can route b3Printf output using their own implementation
|
|
||||||
void b3SetCustomPrintfFunc(b3PrintfFunc* printfFunc);
|
|
||||||
void b3SetCustomWarningMessageFunc(b3WarningMessageFunc* warningMsgFunc);
|
|
||||||
void b3SetCustomErrorMessageFunc(b3ErrorMessageFunc* errorMsgFunc);
|
|
||||||
|
|
||||||
///Don't use those internal functions directly, use the b3Printf or b3SetCustomPrintfFunc instead (or warning/error version)
|
|
||||||
void b3OutputPrintfVarArgsInternal(const char *str, ...);
|
|
||||||
void b3OutputWarningMessageVarArgsInternal(const char *str, ...);
|
|
||||||
void b3OutputErrorMessageVarArgsInternal(const char *str, ...);
|
|
||||||
|
|
||||||
///We add the do/while so that the statement "if (condition) b3Printf("test"); else {...}" would fail
|
///We add the do/while so that the statement "if (condition) b3Printf("test"); else {...}" would fail
|
||||||
///You can also customize the message by uncommenting out a different line below
|
///You can also customize the message by uncommenting out a different line below
|
||||||
#define b3Printf(...) b3OutputPrintfVarArgsInternal(__VA_ARGS__)
|
#define b3Printf(...) b3OutputPrintfVarArgsInternal(__VA_ARGS__)
|
||||||
@@ -28,4 +13,57 @@ void b3OutputErrorMessageVarArgsInternal(const char *str, ...);
|
|||||||
#define b3Warning(...) do {b3OutputWarningMessageVarArgsInternal("b3Warning[%s,%d]:\n",__FILE__,__LINE__);b3OutputWarningMessageVarArgsInternal(__VA_ARGS__); }while(0)
|
#define b3Warning(...) do {b3OutputWarningMessageVarArgsInternal("b3Warning[%s,%d]:\n",__FILE__,__LINE__);b3OutputWarningMessageVarArgsInternal(__VA_ARGS__); }while(0)
|
||||||
#define b3Error(...) do {b3OutputErrorMessageVarArgsInternal("b3Error[%s,%d]:\n",__FILE__,__LINE__);b3OutputErrorMessageVarArgsInternal(__VA_ARGS__); } while(0)
|
#define b3Error(...) do {b3OutputErrorMessageVarArgsInternal("b3Error[%s,%d]:\n",__FILE__,__LINE__);b3OutputErrorMessageVarArgsInternal(__VA_ARGS__); } while(0)
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef B3_NO_PROFILE
|
||||||
|
|
||||||
|
void b3EnterProfileZone(const char* name);
|
||||||
|
void b3LeaveProfileZone();
|
||||||
|
|
||||||
|
class b3ProfileZone
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
b3ProfileZone(const char* name)
|
||||||
|
{
|
||||||
|
b3EnterProfileZone( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
~b3ProfileZone()
|
||||||
|
{
|
||||||
|
b3LeaveProfileZone();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define B3_PROFILE( name ) b3ProfileZone __profile( name )
|
||||||
|
|
||||||
|
#else //B3_NO_PROFILE
|
||||||
|
|
||||||
|
#define B3_PROFILE( name )
|
||||||
|
#define b3StartProfile(a)
|
||||||
|
#define b3StopProfile
|
||||||
|
|
||||||
|
#endif //#ifndef B3_NO_PROFILE
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (b3PrintfFunc)(const char* msg);
|
||||||
|
typedef void (b3WarningMessageFunc)(const char* msg);
|
||||||
|
typedef void (b3ErrorMessageFunc)(const char* msg);
|
||||||
|
typedef void (b3EnterProfileZoneFunc)(const char* msg);
|
||||||
|
typedef void (b3LeaveProfileZoneFunc)();
|
||||||
|
|
||||||
|
///The developer can route b3Printf output using their own implementation
|
||||||
|
void b3SetCustomPrintfFunc(b3PrintfFunc* printfFunc);
|
||||||
|
void b3SetCustomWarningMessageFunc(b3WarningMessageFunc* warningMsgFunc);
|
||||||
|
void b3SetCustomErrorMessageFunc(b3ErrorMessageFunc* errorMsgFunc);
|
||||||
|
|
||||||
|
///Set custom profile zone functions (zones can be nested)
|
||||||
|
void b3SetCustomEnterProfileZoneFunc(b3EnterProfileZoneFunc* enterFunc);
|
||||||
|
void b3SetCustomLeaveProfileZoneFunc(b3LeaveProfileZoneFunc* leaveFunc);
|
||||||
|
|
||||||
|
///Don't use those internal functions directly, use the b3Printf or b3SetCustomPrintfFunc instead (or warning/error version)
|
||||||
|
void b3OutputPrintfVarArgsInternal(const char *str, ...);
|
||||||
|
void b3OutputWarningMessageVarArgsInternal(const char *str, ...);
|
||||||
|
void b3OutputErrorMessageVarArgsInternal(const char *str, ...);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif//B3_LOGGING_H
|
#endif//B3_LOGGING_H
|
||||||
@@ -1,643 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
***************************************************************************************************
|
|
||||||
**
|
|
||||||
** profile.cpp
|
|
||||||
**
|
|
||||||
** Real-Time Hierarchical Profiling for Game Programming Gems 3
|
|
||||||
**
|
|
||||||
** by Greg Hjelstrom & Byon Garrabrant
|
|
||||||
**
|
|
||||||
***************************************************************************************************/
|
|
||||||
|
|
||||||
// Credits: The Clock class was inspired by the Timer classes in
|
|
||||||
// Ogre (www.ogre3d.org).
|
|
||||||
|
|
||||||
#include "b3Quickprof.h"
|
|
||||||
#include "b3MinMax.h"
|
|
||||||
|
|
||||||
#ifndef B3_NO_PROFILE
|
|
||||||
|
|
||||||
|
|
||||||
static b3Clock b3s_profileClock;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
#include <sys/sys_time.h>
|
|
||||||
#include <sys/time_util.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (SUNOS) || defined (__SUNOS__)
|
|
||||||
#include <stdio.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN32)
|
|
||||||
|
|
||||||
#define B3_USE_WINDOWS_TIMERS
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#define NOWINRES
|
|
||||||
#define NOMCX
|
|
||||||
#define NOIME
|
|
||||||
|
|
||||||
#ifdef _XBOX
|
|
||||||
#include <Xtl.h>
|
|
||||||
#else //_XBOX
|
|
||||||
#include <windows.h>
|
|
||||||
#endif //_XBOX
|
|
||||||
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
|
|
||||||
#else //_WIN32
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif //_WIN32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct b3ClockData
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef B3_USE_WINDOWS_TIMERS
|
|
||||||
LARGE_INTEGER mClockFrequency;
|
|
||||||
DWORD mStartTick;
|
|
||||||
LONGLONG mPrevElapsedTime;
|
|
||||||
LARGE_INTEGER mStartTime;
|
|
||||||
#else
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
uint64_t mStartTime;
|
|
||||||
#else
|
|
||||||
struct timeval mStartTime;
|
|
||||||
#endif
|
|
||||||
#endif //__CELLOS_LV2__
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
///The b3Clock is a portable basic clock that measures accurate time in seconds, use for profiling.
|
|
||||||
b3Clock::b3Clock()
|
|
||||||
{
|
|
||||||
m_data = new b3ClockData;
|
|
||||||
#ifdef B3_USE_WINDOWS_TIMERS
|
|
||||||
QueryPerformanceFrequency(&m_data->mClockFrequency);
|
|
||||||
#endif
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
b3Clock::~b3Clock()
|
|
||||||
{
|
|
||||||
delete m_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
b3Clock::b3Clock(const b3Clock& other)
|
|
||||||
{
|
|
||||||
m_data = new b3ClockData;
|
|
||||||
*m_data = *other.m_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
b3Clock& b3Clock::operator=(const b3Clock& other)
|
|
||||||
{
|
|
||||||
*m_data = *other.m_data;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Resets the initial reference time.
|
|
||||||
void b3Clock::reset()
|
|
||||||
{
|
|
||||||
#ifdef B3_USE_WINDOWS_TIMERS
|
|
||||||
QueryPerformanceCounter(&m_data->mStartTime);
|
|
||||||
m_data->mStartTick = GetTickCount();
|
|
||||||
m_data->mPrevElapsedTime = 0;
|
|
||||||
#else
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
|
|
||||||
typedef uint64_t ClockSize;
|
|
||||||
ClockSize newTime;
|
|
||||||
//__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
|
|
||||||
SYS_TIMEBASE_GET( newTime );
|
|
||||||
m_data->mStartTime = newTime;
|
|
||||||
#else
|
|
||||||
gettimeofday(&m_data->mStartTime, 0);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the time in ms since the last call to reset or since
|
|
||||||
/// the b3Clock was created.
|
|
||||||
unsigned long int b3Clock::getTimeMilliseconds()
|
|
||||||
{
|
|
||||||
#ifdef B3_USE_WINDOWS_TIMERS
|
|
||||||
LARGE_INTEGER currentTime;
|
|
||||||
QueryPerformanceCounter(¤tTime);
|
|
||||||
LONGLONG elapsedTime = currentTime.QuadPart -
|
|
||||||
m_data->mStartTime.QuadPart;
|
|
||||||
// Compute the number of millisecond ticks elapsed.
|
|
||||||
unsigned long msecTicks = (unsigned long)(1000 * elapsedTime /
|
|
||||||
m_data->mClockFrequency.QuadPart);
|
|
||||||
// Check for unexpected leaps in the Win32 performance counter.
|
|
||||||
// (This is caused by unexpected data across the PCI to ISA
|
|
||||||
// bridge, aka south bridge. See Microsoft KB274323.)
|
|
||||||
unsigned long elapsedTicks = GetTickCount() - m_data->mStartTick;
|
|
||||||
signed long msecOff = (signed long)(msecTicks - elapsedTicks);
|
|
||||||
if (msecOff < -100 || msecOff > 100)
|
|
||||||
{
|
|
||||||
// Adjust the starting time forwards.
|
|
||||||
LONGLONG msecAdjustment = b3Min(msecOff *
|
|
||||||
m_data->mClockFrequency.QuadPart / 1000, elapsedTime -
|
|
||||||
m_data->mPrevElapsedTime);
|
|
||||||
m_data->mStartTime.QuadPart += msecAdjustment;
|
|
||||||
elapsedTime -= msecAdjustment;
|
|
||||||
|
|
||||||
// Recompute the number of millisecond ticks elapsed.
|
|
||||||
msecTicks = (unsigned long)(1000 * elapsedTime /
|
|
||||||
m_data->mClockFrequency.QuadPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store the current elapsed time for adjustments next time.
|
|
||||||
m_data->mPrevElapsedTime = elapsedTime;
|
|
||||||
|
|
||||||
return msecTicks;
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
uint64_t freq=sys_time_get_timebase_frequency();
|
|
||||||
double dFreq=((double) freq) / 1000.0;
|
|
||||||
typedef uint64_t ClockSize;
|
|
||||||
ClockSize newTime;
|
|
||||||
SYS_TIMEBASE_GET( newTime );
|
|
||||||
//__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
|
|
||||||
|
|
||||||
return (unsigned long int)((double(newTime-m_data->mStartTime)) / dFreq);
|
|
||||||
#else
|
|
||||||
|
|
||||||
struct timeval currentTime;
|
|
||||||
gettimeofday(¤tTime, 0);
|
|
||||||
return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000 +
|
|
||||||
(currentTime.tv_usec - m_data->mStartTime.tv_usec) / 1000;
|
|
||||||
#endif //__CELLOS_LV2__
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the time in us since the last call to reset or since
|
|
||||||
/// the Clock was created.
|
|
||||||
unsigned long int b3Clock::getTimeMicroseconds()
|
|
||||||
{
|
|
||||||
#ifdef B3_USE_WINDOWS_TIMERS
|
|
||||||
LARGE_INTEGER currentTime;
|
|
||||||
QueryPerformanceCounter(¤tTime);
|
|
||||||
LONGLONG elapsedTime = currentTime.QuadPart -
|
|
||||||
m_data->mStartTime.QuadPart;
|
|
||||||
|
|
||||||
// Compute the number of millisecond ticks elapsed.
|
|
||||||
unsigned long msecTicks = (unsigned long)(1000 * elapsedTime /
|
|
||||||
m_data->mClockFrequency.QuadPart);
|
|
||||||
|
|
||||||
// Check for unexpected leaps in the Win32 performance counter.
|
|
||||||
// (This is caused by unexpected data across the PCI to ISA
|
|
||||||
// bridge, aka south bridge. See Microsoft KB274323.)
|
|
||||||
unsigned long elapsedTicks = GetTickCount() - m_data->mStartTick;
|
|
||||||
signed long msecOff = (signed long)(msecTicks - elapsedTicks);
|
|
||||||
if (msecOff < -100 || msecOff > 100)
|
|
||||||
{
|
|
||||||
// Adjust the starting time forwards.
|
|
||||||
LONGLONG msecAdjustment = b3Min(msecOff *
|
|
||||||
m_data->mClockFrequency.QuadPart / 1000, elapsedTime -
|
|
||||||
m_data->mPrevElapsedTime);
|
|
||||||
m_data->mStartTime.QuadPart += msecAdjustment;
|
|
||||||
elapsedTime -= msecAdjustment;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store the current elapsed time for adjustments next time.
|
|
||||||
m_data->mPrevElapsedTime = elapsedTime;
|
|
||||||
|
|
||||||
// Convert to microseconds.
|
|
||||||
unsigned long usecTicks = (unsigned long)(1000000 * elapsedTime /
|
|
||||||
m_data->mClockFrequency.QuadPart);
|
|
||||||
|
|
||||||
return usecTicks;
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
uint64_t freq=sys_time_get_timebase_frequency();
|
|
||||||
double dFreq=((double) freq)/ 1000000.0;
|
|
||||||
typedef uint64_t ClockSize;
|
|
||||||
ClockSize newTime;
|
|
||||||
//__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
|
|
||||||
SYS_TIMEBASE_GET( newTime );
|
|
||||||
|
|
||||||
return (unsigned long int)((double(newTime-m_data->mStartTime)) / dFreq);
|
|
||||||
#else
|
|
||||||
|
|
||||||
struct timeval currentTime;
|
|
||||||
gettimeofday(¤tTime, 0);
|
|
||||||
return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000000 +
|
|
||||||
(currentTime.tv_usec - m_data->mStartTime.tv_usec);
|
|
||||||
#endif//__CELLOS_LV2__
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline void b3Profile_Get_Ticks(unsigned long int * ticks)
|
|
||||||
{
|
|
||||||
*ticks = b3s_profileClock.getTimeMicroseconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline float b3Profile_Get_Tick_Rate(void)
|
|
||||||
{
|
|
||||||
// return 1000000.f;
|
|
||||||
return 1000.f;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
**
|
|
||||||
** b3ProfileNode
|
|
||||||
**
|
|
||||||
***************************************************************************************************/
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* INPUT: *
|
|
||||||
* name - pointer to a static string which is the name of this profile node *
|
|
||||||
* parent - parent pointer *
|
|
||||||
* *
|
|
||||||
* WARNINGS: *
|
|
||||||
* The name is assumed to be a static pointer, only the pointer is stored and compared for *
|
|
||||||
* efficiency reasons. *
|
|
||||||
*=============================================================================================*/
|
|
||||||
b3ProfileNode::b3ProfileNode( const char * name, b3ProfileNode * parent ) :
|
|
||||||
Name( name ),
|
|
||||||
TotalCalls( 0 ),
|
|
||||||
TotalTime( 0 ),
|
|
||||||
StartTime( 0 ),
|
|
||||||
RecursionCounter( 0 ),
|
|
||||||
Parent( parent ),
|
|
||||||
Child( NULL ),
|
|
||||||
Sibling( NULL ),
|
|
||||||
m_userPtr(0)
|
|
||||||
{
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileNode::CleanupMemory()
|
|
||||||
{
|
|
||||||
delete ( Child);
|
|
||||||
Child = NULL;
|
|
||||||
delete ( Sibling);
|
|
||||||
Sibling = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
b3ProfileNode::~b3ProfileNode( void )
|
|
||||||
{
|
|
||||||
delete ( Child);
|
|
||||||
delete ( Sibling);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* INPUT: *
|
|
||||||
* name - static string pointer to the name of the node we are searching for *
|
|
||||||
* *
|
|
||||||
* WARNINGS: *
|
|
||||||
* All profile names are assumed to be static strings so this function uses pointer compares *
|
|
||||||
* to find the named node. *
|
|
||||||
*=============================================================================================*/
|
|
||||||
b3ProfileNode * b3ProfileNode::Get_Sub_Node( const char * name )
|
|
||||||
{
|
|
||||||
// Try to find this sub node
|
|
||||||
b3ProfileNode * child = Child;
|
|
||||||
while ( child ) {
|
|
||||||
if ( child->Name == name ) {
|
|
||||||
return child;
|
|
||||||
}
|
|
||||||
child = child->Sibling;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We didn't find it, so add it
|
|
||||||
|
|
||||||
b3ProfileNode * node = new b3ProfileNode( name, this );
|
|
||||||
node->Sibling = Child;
|
|
||||||
Child = node;
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileNode::Reset( void )
|
|
||||||
{
|
|
||||||
TotalCalls = 0;
|
|
||||||
TotalTime = 0.0f;
|
|
||||||
|
|
||||||
|
|
||||||
if ( Child ) {
|
|
||||||
Child->Reset();
|
|
||||||
}
|
|
||||||
if ( Sibling ) {
|
|
||||||
Sibling->Reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileNode::Call( void )
|
|
||||||
{
|
|
||||||
TotalCalls++;
|
|
||||||
if (RecursionCounter++ == 0) {
|
|
||||||
b3Profile_Get_Ticks(&StartTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool b3ProfileNode::Return( void )
|
|
||||||
{
|
|
||||||
if ( --RecursionCounter == 0 && TotalCalls != 0 ) {
|
|
||||||
unsigned long int time;
|
|
||||||
b3Profile_Get_Ticks(&time);
|
|
||||||
time-=StartTime;
|
|
||||||
TotalTime += (float)time / b3Profile_Get_Tick_Rate();
|
|
||||||
}
|
|
||||||
return ( RecursionCounter == 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
**
|
|
||||||
** b3ProfileIterator
|
|
||||||
**
|
|
||||||
***************************************************************************************************/
|
|
||||||
b3ProfileIterator::b3ProfileIterator( b3ProfileNode * start )
|
|
||||||
{
|
|
||||||
CurrentParent = start;
|
|
||||||
CurrentChild = CurrentParent->Get_Child();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileIterator::First(void)
|
|
||||||
{
|
|
||||||
CurrentChild = CurrentParent->Get_Child();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileIterator::Next(void)
|
|
||||||
{
|
|
||||||
CurrentChild = CurrentChild->Get_Sibling();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool b3ProfileIterator::Is_Done(void)
|
|
||||||
{
|
|
||||||
return CurrentChild == NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileIterator::Enter_Child( int index )
|
|
||||||
{
|
|
||||||
CurrentChild = CurrentParent->Get_Child();
|
|
||||||
while ( (CurrentChild != NULL) && (index != 0) ) {
|
|
||||||
index--;
|
|
||||||
CurrentChild = CurrentChild->Get_Sibling();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( CurrentChild != NULL ) {
|
|
||||||
CurrentParent = CurrentChild;
|
|
||||||
CurrentChild = CurrentParent->Get_Child();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileIterator::Enter_Parent( void )
|
|
||||||
{
|
|
||||||
if ( CurrentParent->Get_Parent() != NULL ) {
|
|
||||||
CurrentParent = CurrentParent->Get_Parent();
|
|
||||||
}
|
|
||||||
CurrentChild = CurrentParent->Get_Child();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
**
|
|
||||||
** b3ProfileManager
|
|
||||||
**
|
|
||||||
***************************************************************************************************/
|
|
||||||
|
|
||||||
b3ProfileNode b3ProfileManager::Root( "Root", NULL );
|
|
||||||
b3ProfileNode * b3ProfileManager::CurrentNode = &b3ProfileManager::Root;
|
|
||||||
int b3ProfileManager::FrameCounter = 0;
|
|
||||||
unsigned long int b3ProfileManager::ResetTime = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* b3ProfileManager::Start_Profile -- Begin a named profile *
|
|
||||||
* *
|
|
||||||
* Steps one level deeper into the tree, if a child already exists with the specified name *
|
|
||||||
* then it accumulates the profiling; otherwise a new child node is added to the profile tree. *
|
|
||||||
* *
|
|
||||||
* INPUT: *
|
|
||||||
* name - name of this profiling record *
|
|
||||||
* *
|
|
||||||
* WARNINGS: *
|
|
||||||
* The string used is assumed to be a static string; pointer compares are used throughout *
|
|
||||||
* the profiling code for efficiency. *
|
|
||||||
*=============================================================================================*/
|
|
||||||
void b3ProfileManager::Start_Profile( const char * name )
|
|
||||||
{
|
|
||||||
if (name != CurrentNode->Get_Name()) {
|
|
||||||
CurrentNode = CurrentNode->Get_Sub_Node( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
CurrentNode->Call();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* b3ProfileManager::Stop_Profile -- Stop timing and record the results. *
|
|
||||||
*=============================================================================================*/
|
|
||||||
void b3ProfileManager::Stop_Profile( void )
|
|
||||||
{
|
|
||||||
// Return will indicate whether we should back up to our parent (we may
|
|
||||||
// be profiling a recursive function)
|
|
||||||
if (CurrentNode->Return()) {
|
|
||||||
CurrentNode = CurrentNode->Get_Parent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* b3ProfileManager::Reset -- Reset the contents of the profiling system *
|
|
||||||
* *
|
|
||||||
* This resets everything except for the tree structure. All of the timing data is reset. *
|
|
||||||
*=============================================================================================*/
|
|
||||||
void b3ProfileManager::Reset( void )
|
|
||||||
{
|
|
||||||
b3s_profileClock.reset();
|
|
||||||
Root.Reset();
|
|
||||||
Root.Call();
|
|
||||||
FrameCounter = 0;
|
|
||||||
b3Profile_Get_Ticks(&ResetTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* b3ProfileManager::Increment_Frame_Counter -- Increment the frame counter *
|
|
||||||
*=============================================================================================*/
|
|
||||||
void b3ProfileManager::Increment_Frame_Counter( void )
|
|
||||||
{
|
|
||||||
FrameCounter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************************************
|
|
||||||
* b3ProfileManager::Get_Time_Since_Reset -- returns the elapsed time since last reset *
|
|
||||||
*=============================================================================================*/
|
|
||||||
float b3ProfileManager::Get_Time_Since_Reset( void )
|
|
||||||
{
|
|
||||||
unsigned long int time;
|
|
||||||
b3Profile_Get_Ticks(&time);
|
|
||||||
time -= ResetTime;
|
|
||||||
return (float)time / b3Profile_Get_Tick_Rate();
|
|
||||||
}
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
void b3ProfileManager::dumpRecursive(b3ProfileIterator* profileIterator, int spacing)
|
|
||||||
{
|
|
||||||
profileIterator->First();
|
|
||||||
if (profileIterator->Is_Done())
|
|
||||||
return;
|
|
||||||
|
|
||||||
float accumulated_time=0,parent_time = profileIterator->Is_Root() ? b3ProfileManager::Get_Time_Since_Reset() : profileIterator->Get_Current_Parent_Total_Time();
|
|
||||||
int i;
|
|
||||||
int frames_since_reset = b3ProfileManager::Get_Frame_Count_Since_Reset();
|
|
||||||
for (i=0;i<spacing;i++) b3Printf(".");
|
|
||||||
b3Printf("----------------------------------\n");
|
|
||||||
for (i=0;i<spacing;i++) b3Printf(".");
|
|
||||||
b3Printf("Profiling: %s (total running time: %.3f ms) ---\n", profileIterator->Get_Current_Parent_Name(), parent_time );
|
|
||||||
float totalTime = 0.f;
|
|
||||||
|
|
||||||
|
|
||||||
int numChildren = 0;
|
|
||||||
|
|
||||||
for (i = 0; !profileIterator->Is_Done(); i++,profileIterator->Next())
|
|
||||||
{
|
|
||||||
numChildren++;
|
|
||||||
float current_total_time = profileIterator->Get_Current_Total_Time();
|
|
||||||
accumulated_time += current_total_time;
|
|
||||||
float fraction = parent_time > B3_EPSILON ? (current_total_time / parent_time) * 100 : 0.f;
|
|
||||||
{
|
|
||||||
int i; for (i=0;i<spacing;i++) b3Printf(".");
|
|
||||||
}
|
|
||||||
b3Printf("%d -- %s (%.2f %%) :: %.3f ms / frame (%d calls)\n",i, profileIterator->Get_Current_Name(), fraction,(current_total_time / (double)frames_since_reset),profileIterator->Get_Current_Total_Calls());
|
|
||||||
totalTime += current_total_time;
|
|
||||||
//recurse into children
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent_time < accumulated_time)
|
|
||||||
{
|
|
||||||
b3Printf("what's wrong\n");
|
|
||||||
}
|
|
||||||
for (i=0;i<spacing;i++) b3Printf(".");
|
|
||||||
b3Printf("%s (%.3f %%) :: %.3f ms\n", "Unaccounted:",parent_time > B3_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time);
|
|
||||||
|
|
||||||
for (i=0;i<numChildren;i++)
|
|
||||||
{
|
|
||||||
profileIterator->Enter_Child(i);
|
|
||||||
dumpRecursive(profileIterator,spacing+3);
|
|
||||||
profileIterator->Enter_Parent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileManager::dumpAll()
|
|
||||||
{
|
|
||||||
b3ProfileIterator* profileIterator = 0;
|
|
||||||
profileIterator = b3ProfileManager::Get_Iterator();
|
|
||||||
|
|
||||||
dumpRecursive(profileIterator,0);
|
|
||||||
|
|
||||||
b3ProfileManager::Release_Iterator(profileIterator);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileManager::dumpRecursive(FILE* f, b3ProfileIterator* profileIterator, int spacing)
|
|
||||||
{
|
|
||||||
profileIterator->First();
|
|
||||||
if (profileIterator->Is_Done())
|
|
||||||
return;
|
|
||||||
|
|
||||||
float accumulated_time=0,parent_time = profileIterator->Is_Root() ? b3ProfileManager::Get_Time_Since_Reset() : profileIterator->Get_Current_Parent_Total_Time();
|
|
||||||
int i;
|
|
||||||
int frames_since_reset = b3ProfileManager::Get_Frame_Count_Since_Reset();
|
|
||||||
for (i=0;i<spacing;i++) fprintf(f,".");
|
|
||||||
fprintf(f,"----------------------------------\n");
|
|
||||||
for (i=0;i<spacing;i++) fprintf(f,".");
|
|
||||||
fprintf(f,"Profiling: %s (total running time: %.3f ms) ---\n", profileIterator->Get_Current_Parent_Name(), parent_time );
|
|
||||||
float totalTime = 0.f;
|
|
||||||
|
|
||||||
|
|
||||||
int numChildren = 0;
|
|
||||||
|
|
||||||
for (i = 0; !profileIterator->Is_Done(); i++,profileIterator->Next())
|
|
||||||
{
|
|
||||||
numChildren++;
|
|
||||||
float current_total_time = profileIterator->Get_Current_Total_Time();
|
|
||||||
accumulated_time += current_total_time;
|
|
||||||
float fraction = parent_time > B3_EPSILON ? (current_total_time / parent_time) * 100 : 0.f;
|
|
||||||
{
|
|
||||||
int i; for (i=0;i<spacing;i++) fprintf(f,".");
|
|
||||||
}
|
|
||||||
fprintf(f,"%d -- %s (%.2f %%) :: %.3f ms / frame (%d calls)\n",i, profileIterator->Get_Current_Name(), fraction,(current_total_time / (double)frames_since_reset),profileIterator->Get_Current_Total_Calls());
|
|
||||||
totalTime += current_total_time;
|
|
||||||
//recurse into children
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent_time < accumulated_time)
|
|
||||||
{
|
|
||||||
fprintf(f,"what's wrong\n");
|
|
||||||
}
|
|
||||||
for (i=0;i<spacing;i++)
|
|
||||||
fprintf(f,".");
|
|
||||||
fprintf(f,"%s (%.3f %%) :: %.3f ms\n", "Unaccounted:",parent_time > B3_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time);
|
|
||||||
|
|
||||||
for (i=0;i<numChildren;i++)
|
|
||||||
{
|
|
||||||
profileIterator->Enter_Child(i);
|
|
||||||
dumpRecursive(f,profileIterator,spacing+3);
|
|
||||||
profileIterator->Enter_Parent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void b3ProfileManager::dumpAll(FILE* f)
|
|
||||||
{
|
|
||||||
b3ProfileIterator* profileIterator = 0;
|
|
||||||
profileIterator = b3ProfileManager::Get_Iterator();
|
|
||||||
|
|
||||||
dumpRecursive(f, profileIterator,0);
|
|
||||||
|
|
||||||
b3ProfileManager::Release_Iterator(profileIterator);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //B3_NO_PROFILE
|
|
||||||
@@ -1,218 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
**
|
|
||||||
** Real-Time Hierarchical Profiling for Game Programming Gems 3
|
|
||||||
**
|
|
||||||
** by Greg Hjelstrom & Byon Garrabrant
|
|
||||||
**
|
|
||||||
***************************************************************************************************/
|
|
||||||
|
|
||||||
// Credits: The Clock class was inspired by the Timer classes in
|
|
||||||
// Ogre (www.ogre3d.org).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef B3_QUICK_PROF_H
|
|
||||||
#define B3_QUICK_PROF_H
|
|
||||||
|
|
||||||
//To disable built-in profiling, please comment out next line
|
|
||||||
//#define B3_NO_PROFILE 1
|
|
||||||
#ifndef B3_NO_PROFILE
|
|
||||||
#include <stdio.h>//@todo remove this, backwards compatibility
|
|
||||||
#include "b3Scalar.h"
|
|
||||||
#include "b3AlignedAllocator.h"
|
|
||||||
#include <new>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define B3_USE_CLOCK 1
|
|
||||||
|
|
||||||
#ifdef B3_USE_CLOCK
|
|
||||||
|
|
||||||
///The b3Clock is a portable basic clock that measures accurate time in seconds, use for profiling.
|
|
||||||
class b3Clock
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
b3Clock();
|
|
||||||
|
|
||||||
b3Clock(const b3Clock& other);
|
|
||||||
b3Clock& operator=(const b3Clock& other);
|
|
||||||
|
|
||||||
~b3Clock();
|
|
||||||
|
|
||||||
/// Resets the initial reference time.
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
/// Returns the time in ms since the last call to reset or since
|
|
||||||
/// the b3Clock was created.
|
|
||||||
unsigned long int getTimeMilliseconds();
|
|
||||||
|
|
||||||
/// Returns the time in us since the last call to reset or since
|
|
||||||
/// the Clock was created.
|
|
||||||
unsigned long int getTimeMicroseconds();
|
|
||||||
private:
|
|
||||||
struct b3ClockData* m_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //B3_USE_CLOCK
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///A node in the Profile Hierarchy Tree
|
|
||||||
class b3ProfileNode {
|
|
||||||
|
|
||||||
public:
|
|
||||||
b3ProfileNode( const char * name, b3ProfileNode * parent );
|
|
||||||
~b3ProfileNode( void );
|
|
||||||
|
|
||||||
b3ProfileNode * Get_Sub_Node( const char * name );
|
|
||||||
|
|
||||||
b3ProfileNode * Get_Parent( void ) { return Parent; }
|
|
||||||
b3ProfileNode * Get_Sibling( void ) { return Sibling; }
|
|
||||||
b3ProfileNode * Get_Child( void ) { return Child; }
|
|
||||||
|
|
||||||
void CleanupMemory();
|
|
||||||
void Reset( void );
|
|
||||||
void Call( void );
|
|
||||||
bool Return( void );
|
|
||||||
|
|
||||||
const char * Get_Name( void ) { return Name; }
|
|
||||||
int Get_Total_Calls( void ) { return TotalCalls; }
|
|
||||||
float Get_Total_Time( void ) { return TotalTime; }
|
|
||||||
void* GetUserPointer() const {return m_userPtr;}
|
|
||||||
void SetUserPointer(void* ptr) { m_userPtr = ptr;}
|
|
||||||
protected:
|
|
||||||
|
|
||||||
const char * Name;
|
|
||||||
int TotalCalls;
|
|
||||||
float TotalTime;
|
|
||||||
unsigned long int StartTime;
|
|
||||||
int RecursionCounter;
|
|
||||||
|
|
||||||
b3ProfileNode * Parent;
|
|
||||||
b3ProfileNode * Child;
|
|
||||||
b3ProfileNode * Sibling;
|
|
||||||
void* m_userPtr;
|
|
||||||
};
|
|
||||||
|
|
||||||
///An iterator to navigate through the tree
|
|
||||||
class b3ProfileIterator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// Access all the children of the current parent
|
|
||||||
void First(void);
|
|
||||||
void Next(void);
|
|
||||||
bool Is_Done(void);
|
|
||||||
bool Is_Root(void) { return (CurrentParent->Get_Parent() == 0); }
|
|
||||||
|
|
||||||
void Enter_Child( int index ); // Make the given child the new parent
|
|
||||||
void Enter_Largest_Child( void ); // Make the largest child the new parent
|
|
||||||
void Enter_Parent( void ); // Make the current parent's parent the new parent
|
|
||||||
|
|
||||||
// Access the current child
|
|
||||||
const char * Get_Current_Name( void ) { return CurrentChild->Get_Name(); }
|
|
||||||
int Get_Current_Total_Calls( void ) { return CurrentChild->Get_Total_Calls(); }
|
|
||||||
float Get_Current_Total_Time( void ) { return CurrentChild->Get_Total_Time(); }
|
|
||||||
|
|
||||||
void* Get_Current_UserPointer( void ) { return CurrentChild->GetUserPointer(); }
|
|
||||||
void Set_Current_UserPointer(void* ptr) {CurrentChild->SetUserPointer(ptr);}
|
|
||||||
// Access the current parent
|
|
||||||
const char * Get_Current_Parent_Name( void ) { return CurrentParent->Get_Name(); }
|
|
||||||
int Get_Current_Parent_Total_Calls( void ) { return CurrentParent->Get_Total_Calls(); }
|
|
||||||
float Get_Current_Parent_Total_Time( void ) { return CurrentParent->Get_Total_Time(); }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
b3ProfileNode * CurrentParent;
|
|
||||||
b3ProfileNode * CurrentChild;
|
|
||||||
|
|
||||||
|
|
||||||
b3ProfileIterator( b3ProfileNode * start );
|
|
||||||
friend class b3ProfileManager;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///The Manager for the Profile system
|
|
||||||
class b3ProfileManager {
|
|
||||||
public:
|
|
||||||
static void Start_Profile( const char * name );
|
|
||||||
static void Stop_Profile( void );
|
|
||||||
|
|
||||||
static void CleanupMemory(void)
|
|
||||||
{
|
|
||||||
Root.CleanupMemory();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Reset( void );
|
|
||||||
static void Increment_Frame_Counter( void );
|
|
||||||
static int Get_Frame_Count_Since_Reset( void ) { return FrameCounter; }
|
|
||||||
static float Get_Time_Since_Reset( void );
|
|
||||||
|
|
||||||
static b3ProfileIterator * Get_Iterator( void )
|
|
||||||
{
|
|
||||||
|
|
||||||
return new b3ProfileIterator( &Root );
|
|
||||||
}
|
|
||||||
static void Release_Iterator( b3ProfileIterator * iterator ) { delete ( iterator); }
|
|
||||||
|
|
||||||
static void dumpRecursive(b3ProfileIterator* profileIterator, int spacing);
|
|
||||||
static void dumpAll();
|
|
||||||
|
|
||||||
static void dumpRecursive(FILE* f, b3ProfileIterator* profileIterator, int spacing);
|
|
||||||
static void dumpAll(FILE* f);
|
|
||||||
|
|
||||||
private:
|
|
||||||
static b3ProfileNode Root;
|
|
||||||
static b3ProfileNode * CurrentNode;
|
|
||||||
static int FrameCounter;
|
|
||||||
static unsigned long int ResetTime;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///ProfileSampleClass is a simple way to profile a function's scope
|
|
||||||
///Use the B3_PROFILE macro at the start of scope to time
|
|
||||||
class b3ProfileSample {
|
|
||||||
public:
|
|
||||||
b3ProfileSample( const char * name )
|
|
||||||
{
|
|
||||||
b3ProfileManager::Start_Profile( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
~b3ProfileSample( void )
|
|
||||||
{
|
|
||||||
b3ProfileManager::Stop_Profile();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#define B3_PROFILE( name ) b3ProfileSample __profile( name )
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define B3_PROFILE( name )
|
|
||||||
|
|
||||||
#endif //#ifndef B3_NO_PROFILE
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //B3_QUICK_PROF_H
|
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ subject to the following restrictions:
|
|||||||
#include "b3TypedConstraint.h"
|
#include "b3TypedConstraint.h"
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "Bullet3Common/b3StackAlloc.h"
|
#include "Bullet3Common/b3StackAlloc.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
//#include "b3SolverBody.h"
|
//#include "b3SolverBody.h"
|
||||||
//#include "b3SolverConstraint.h"
|
//#include "b3SolverConstraint.h"
|
||||||
#include "Bullet3Common/b3AlignedObjectArray.h"
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include "b3GpuSapBroadphase.h"
|
#include "b3GpuSapBroadphase.h"
|
||||||
#include "Bullet3Common/b3Vector3.h"
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||||
#include "kernels/sapKernels.h"
|
#include "kernels/sapKernels.h"
|
||||||
#include "kernels/sapFastKernels.h"
|
#include "kernels/sapFastKernels.h"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ int b3g_actualSATPairTests=0;
|
|||||||
|
|
||||||
|
|
||||||
typedef b3AlignedObjectArray<b3Vector3> b3VertexArray;
|
typedef b3AlignedObjectArray<b3Vector3> b3VertexArray;
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
|
|
||||||
#include <float.h> //for FLT_MAX
|
#include <float.h> //for FLT_MAX
|
||||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include "b3GpuRaycast.h"
|
#include "b3GpuRaycast.h"
|
||||||
#include "Bullet3OpenCL/NarrowphaseCollision/b3Collidable.h"
|
#include "Bullet3OpenCL/NarrowphaseCollision/b3Collidable.h"
|
||||||
#include "Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h"
|
#include "Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ bool b3GpuSolveConstraint = true;
|
|||||||
|
|
||||||
#include "b3GpuBatchingPgsSolver.h"
|
#include "b3GpuBatchingPgsSolver.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ bool dumpContactStats = false;
|
|||||||
#include "b3GpuBatchingPgsSolver.h"
|
#include "b3GpuBatchingPgsSolver.h"
|
||||||
#include "b3Solver.h"
|
#include "b3Solver.h"
|
||||||
|
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "b3Config.h"
|
#include "b3Config.h"
|
||||||
#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
|
#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ bool useNewBatchingKernel = true;
|
|||||||
#include "kernels/batchingKernelsNew.h"
|
#include "kernels/batchingKernelsNew.h"
|
||||||
|
|
||||||
|
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||||
#include "Bullet3Common/b3Vector3.h"
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ subject to the following restrictions:
|
|||||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
|
||||||
#include "Bullet3Common/b3Int2.h"
|
#include "Bullet3Common/b3Int2.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
|
||||||
|
|
||||||
|
#include "../btgui/Timing/b3Clock.h"
|
||||||
#include "b3BitonicSort.h"
|
#include "b3BitonicSort.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ function createProject(vendor)
|
|||||||
"b3BitonicSort.cpp",
|
"b3BitonicSort.cpp",
|
||||||
"../../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../../src/Bullet3Common/b3AlignedAllocator.h",
|
"../../../src/Bullet3Common/b3AlignedAllocator.h",
|
||||||
"../../../src/Bullet3Common/b3Quickprof.cpp",
|
|
||||||
"../../../src/Bullet3Common/b3Quickprof.h",
|
|
||||||
"../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp",
|
"../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp",
|
||||||
"../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.h",
|
"../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.h",
|
||||||
"../../../src/Bullet3Common/b3Logging.cpp",
|
"../../../src/Bullet3Common/b3Logging.cpp",
|
||||||
"../../../src/Bullet3Common/b3Logging.h",
|
"../../../src/Bullet3Common/b3Logging.h",
|
||||||
|
"../../../btgui/Timing/b3Clock.cpp",
|
||||||
|
"../../../btgui/Timing/b3Clock.h",
|
||||||
}
|
}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
|
#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
|
||||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||||
#include "Bullet3Common/b3Quickprof.h"
|
#include "../btgui/Timing/b3Clock.h"
|
||||||
|
|
||||||
cl_context g_cxMainContext;
|
cl_context g_cxMainContext;
|
||||||
cl_device_id g_device;
|
cl_device_id g_device;
|
||||||
|
|||||||
@@ -27,10 +27,12 @@ function createProject(vendor)
|
|||||||
"../../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
"../../../src/Bullet3Common/b3AlignedAllocator.cpp",
|
||||||
"../../../src/Bullet3Common/b3AlignedAllocator.h",
|
"../../../src/Bullet3Common/b3AlignedAllocator.h",
|
||||||
"../../../src/Bullet3Common/b3AlignedObjectArray.h",
|
"../../../src/Bullet3Common/b3AlignedObjectArray.h",
|
||||||
"../../../src/Bullet3Common/b3Quickprof.cpp",
|
|
||||||
"../../../src/Bullet3Common/b3Quickprof.h",
|
|
||||||
"../../../src/Bullet3Common/b3Logging.cpp",
|
"../../../src/Bullet3Common/b3Logging.cpp",
|
||||||
"../../../src/Bullet3Common/b3Logging.h",
|
"../../../src/Bullet3Common/b3Logging.h",
|
||||||
|
"../../../btgui/Timing/b3Quickprof.cpp",
|
||||||
|
"../../../btgui/Timing/b3Quickprof.h",
|
||||||
|
"../../../btgui/Timing/b3Clock.cpp",
|
||||||
|
"../../../btgui/Timing/b3Clock.h",
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user