Measure .obj parsing time.
This commit is contained in:
@@ -14,6 +14,7 @@ solution "objview"
|
|||||||
configuration { "linux" }
|
configuration { "linux" }
|
||||||
linkoptions { "`pkg-config --libs glfw3`" }
|
linkoptions { "`pkg-config --libs glfw3`" }
|
||||||
links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" }
|
links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" }
|
||||||
|
linkoptions { "-pthread" }
|
||||||
|
|
||||||
configuration { "windows" }
|
configuration { "windows" }
|
||||||
-- Path to GLFW3
|
-- Path to GLFW3
|
||||||
|
|||||||
@@ -26,6 +26,89 @@
|
|||||||
|
|
||||||
#include "trackball.h"
|
#include "trackball.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <mmsystem.h>
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#pragma comment(lib, "winmm.lib")
|
||||||
|
#else
|
||||||
|
#if defined(__unix__) || defined(__APPLE__)
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <ctime>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class timerutil {
|
||||||
|
public:
|
||||||
|
#ifdef _WIN32
|
||||||
|
typedef DWORD time_t;
|
||||||
|
|
||||||
|
timerutil() { ::timeBeginPeriod(1); }
|
||||||
|
~timerutil() { ::timeEndPeriod(1); }
|
||||||
|
|
||||||
|
void start() { t_[0] = ::timeGetTime(); }
|
||||||
|
void end() { t_[1] = ::timeGetTime(); }
|
||||||
|
|
||||||
|
time_t sec() { return (time_t)((t_[1] - t_[0]) / 1000); }
|
||||||
|
time_t msec() { return (time_t)((t_[1] - t_[0])); }
|
||||||
|
time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000); }
|
||||||
|
time_t current() { return ::timeGetTime(); }
|
||||||
|
|
||||||
|
#else
|
||||||
|
#if defined(__unix__) || defined(__APPLE__)
|
||||||
|
typedef unsigned long int time_t;
|
||||||
|
|
||||||
|
void start() { gettimeofday(tv + 0, &tz); }
|
||||||
|
void end() { gettimeofday(tv + 1, &tz); }
|
||||||
|
|
||||||
|
time_t sec() { return (time_t)(tv[1].tv_sec - tv[0].tv_sec); }
|
||||||
|
time_t msec() {
|
||||||
|
return this->sec() * 1000 +
|
||||||
|
(time_t)((tv[1].tv_usec - tv[0].tv_usec) / 1000);
|
||||||
|
}
|
||||||
|
time_t usec() {
|
||||||
|
return this->sec() * 1000000 + (time_t)(tv[1].tv_usec - tv[0].tv_usec);
|
||||||
|
}
|
||||||
|
time_t current() {
|
||||||
|
struct timeval t;
|
||||||
|
gettimeofday(&t, NULL);
|
||||||
|
return (time_t)(t.tv_sec * 1000 + t.tv_usec);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // C timer
|
||||||
|
// using namespace std;
|
||||||
|
typedef clock_t time_t;
|
||||||
|
|
||||||
|
void start() { t_[0] = clock(); }
|
||||||
|
void end() { t_[1] = clock(); }
|
||||||
|
|
||||||
|
time_t sec() { return (time_t)((t_[1] - t_[0]) / CLOCKS_PER_SEC); }
|
||||||
|
time_t msec() { return (time_t)((t_[1] - t_[0]) * 1000 / CLOCKS_PER_SEC); }
|
||||||
|
time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000000 / CLOCKS_PER_SEC); }
|
||||||
|
time_t current() { return (time_t)clock(); }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
#ifdef _WIN32
|
||||||
|
DWORD t_[2];
|
||||||
|
#else
|
||||||
|
#if defined(__unix__) || defined(__APPLE__)
|
||||||
|
struct timeval tv[2];
|
||||||
|
struct timezone tz;
|
||||||
|
#else
|
||||||
|
time_t t_[2];
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GLuint vb; // vertex buffer
|
GLuint vb; // vertex buffer
|
||||||
int numTriangles;
|
int numTriangles;
|
||||||
@@ -83,6 +166,10 @@ bool LoadObjAndConvert(float bmin[3], float bmax[3], std::vector<DrawObject>& dr
|
|||||||
tinyobj::attrib_t attrib;
|
tinyobj::attrib_t attrib;
|
||||||
std::vector<tinyobj::shape_t> shapes;
|
std::vector<tinyobj::shape_t> shapes;
|
||||||
std::vector<tinyobj::material_t> materials;
|
std::vector<tinyobj::material_t> materials;
|
||||||
|
|
||||||
|
timerutil tm;
|
||||||
|
|
||||||
|
tm.start();
|
||||||
|
|
||||||
std::string err;
|
std::string err;
|
||||||
bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, filename, NULL);
|
bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, filename, NULL);
|
||||||
@@ -90,11 +177,15 @@ bool LoadObjAndConvert(float bmin[3], float bmax[3], std::vector<DrawObject>& dr
|
|||||||
std::cerr << err << std::endl;
|
std::cerr << err << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tm.end();
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
std::cerr << "Failed to load " << filename << std::endl;
|
std::cerr << "Failed to load " << filename << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Parsing time: %d [ms]\n", tm.msec());
|
||||||
|
|
||||||
printf("# of vertices = %d\n", (int)(attrib.vertices.size()) / 3);
|
printf("# of vertices = %d\n", (int)(attrib.vertices.size()) / 3);
|
||||||
printf("# of normals = %d\n", (int)(attrib.normals.size()) / 3);
|
printf("# of normals = %d\n", (int)(attrib.normals.size()) / 3);
|
||||||
printf("# of texcoords = %d\n", (int)(attrib.texcoords.size()) / 2);
|
printf("# of texcoords = %d\n", (int)(attrib.texcoords.size()) / 2);
|
||||||
|
|||||||
Reference in New Issue
Block a user