Started to add hardware stats reporting functionality.
This commit is contained in:
parent
8dfe72f73f
commit
9cdbaebd29
75
src/config/hardware_stats.cpp
Normal file
75
src/config/hardware_stats.cpp
Normal file
@ -0,0 +1,75 @@
|
||||
//
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2014 Joerg Henrichs
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 3
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#include "config/hardware_stats.hpp"
|
||||
|
||||
#include "config/user_config.hpp"
|
||||
#include "graphics/glwrap.hpp"
|
||||
#include "graphics/irr_driver.hpp"
|
||||
#include "online/http_request.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
|
||||
namespace HardwareStats
|
||||
{
|
||||
void reportHardwareStats()
|
||||
{
|
||||
Json json;
|
||||
#ifdef WIN32
|
||||
json.add("os_win", 1);
|
||||
#endif
|
||||
#ifdef __APPLE__
|
||||
json.add("os_macosx", 1);
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
json.add("os_linx", 1);
|
||||
json.add("os_unix", 1);
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
json.add("build_debug", 1);
|
||||
#endif
|
||||
|
||||
unsigned int ogl_version = irr_driver->getGLSLVersion();
|
||||
unsigned int major = ogl_version/100;
|
||||
unsigned int minor = ogl_version - 100*major;
|
||||
std::string version =
|
||||
StringUtils::insertValues("%d.%d", major, minor);
|
||||
json.add("GL_VERSION", version);
|
||||
|
||||
std::string vendor;
|
||||
irr_driver->getOpenGLData(&vendor);
|
||||
json.add("GL_VENDOR", vendor);
|
||||
|
||||
json.add("video_xres", UserConfigParams::m_width );
|
||||
json.add("video_yres", UserConfigParams::m_height);
|
||||
// Too long for debugging atm
|
||||
//json.add("GL_EXTENSIONS", getGLExtensions());
|
||||
json.finish();
|
||||
Log::verbose("json", "'%s'", json.toString().c_str());
|
||||
|
||||
Online::HTTPRequest *request = new Online::HTTPRequest(/*manage memory*/true, 1);
|
||||
request->addParameter("user_id", 3);
|
||||
request->addParameter("generation_date", StkTime::getTimeSinceEpoch());
|
||||
request->addParameter("data_type", "hwdetect");
|
||||
request->addParameter("data_version", 1);
|
||||
request->addParameter("data", json.toString());
|
||||
request->setURL("http://stats.supertuxkart.net/upload/v1");
|
||||
// FIXME: For now: don't submit
|
||||
//request->queue();
|
||||
} // reportHardwareStats
|
||||
|
||||
} // namespace HardwareStats
|
83
src/config/hardware_stats.hpp
Normal file
83
src/config/hardware_stats.hpp
Normal file
@ -0,0 +1,83 @@
|
||||
//
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2014 Joerg Henrichs
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 3
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#ifndef HEADER_HARDWARE_STATS_HPP
|
||||
#define HEADER_HARDWARE_STATS_HPP
|
||||
|
||||
/**
|
||||
* \defgroup config
|
||||
*/
|
||||
|
||||
#include "utils/no_copy.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
namespace HardwareStats
|
||||
{
|
||||
class Json : public NoCopy
|
||||
{
|
||||
private:
|
||||
std::string m_data;
|
||||
public:
|
||||
/** Constructor. */
|
||||
Json()
|
||||
{
|
||||
m_data.reserve(1024);
|
||||
m_data ="{";
|
||||
} // Constructor
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
/** Adds a key-value pair to the json string. */
|
||||
template <typename C>
|
||||
void add(const std::string &key, const C&value)
|
||||
{
|
||||
if(m_data.size()>1) // more than '{'
|
||||
m_data += ",";
|
||||
m_data += "\""+key+"\":"+StringUtils::toString(value);
|
||||
} // add
|
||||
// --------------------------------------------------------------------
|
||||
/** Specialisation for adding string values. String values in
|
||||
* are enclosed in "". */
|
||||
void add(const std::string &key, const std::string &value)
|
||||
{
|
||||
if(m_data.size()>1) // more than '{'
|
||||
m_data += ",";
|
||||
m_data += "\""+key+"\":\""+StringUtils::toString(value)+"\"";
|
||||
} // add
|
||||
// --------------------------------------------------------------------
|
||||
/** Specialisation for adding character pointers. String values in
|
||||
* are enclosed in "". */
|
||||
void add(const std::string &key, const char *s)
|
||||
{
|
||||
if(m_data.size()>1) // more than '{'
|
||||
m_data += ",";
|
||||
m_data += "\""+key+"\":\""+StringUtils::toString(s)+"\"";
|
||||
} // add
|
||||
// --------------------------------------------------------------------
|
||||
void finish()
|
||||
{
|
||||
m_data += "}";
|
||||
}
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns the json data as one string. */
|
||||
std::string toString() { return m_data; }
|
||||
}; // class Json
|
||||
|
||||
// ========================================================================
|
||||
void reportHardwareStats();
|
||||
}; // HardwareStats
|
||||
|
||||
#endif
|
@ -17,6 +17,7 @@ bool GLContextDebugBit = true;
|
||||
bool GLContextDebugBit = false;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
#if !defined(__APPLE__)
|
||||
#define ARB_DEBUG_OUTPUT
|
||||
@ -733,4 +734,32 @@ bool hasGLExtension(const char* extension)
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} // hasGLExtension
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/** Returns a space-separated list of all GL extensions. Used for hardware
|
||||
* reporting.
|
||||
*/
|
||||
const std::string getGLExtensions()
|
||||
{
|
||||
std::string result;
|
||||
if (glGetStringi != NULL)
|
||||
{
|
||||
GLint num_extensions = 0;
|
||||
glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
|
||||
for (GLint i = 0; i < num_extensions; i++)
|
||||
{
|
||||
const char* extension = (const char*)glGetStringi(GL_EXTENSIONS, i);
|
||||
if(result.size()>0)
|
||||
result += " ";
|
||||
result += extension;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* extensions = (const char*) glGetString(GL_EXTENSIONS);
|
||||
result = extensions;
|
||||
}
|
||||
|
||||
return result;
|
||||
} // getGLExtensions
|
@ -151,5 +151,7 @@ void GL32_draw2DRectangle(irr::video::SColor color, const irr::core::rect<s32>&
|
||||
const irr::core::rect<s32>* clip = 0);
|
||||
|
||||
bool hasGLExtension(const char* extension);
|
||||
const std::string getGLExtensions();
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -465,14 +465,14 @@ void IrrDriver::initDevice()
|
||||
m_gui_env = m_device->getGUIEnvironment();
|
||||
m_video_driver = m_device->getVideoDriver();
|
||||
|
||||
GLMajorVersion = 2;
|
||||
GLMinorVersion = 1;
|
||||
m_gl_major_version = 2;
|
||||
m_gl_minor_version = 1;
|
||||
// Call to glGetIntegerv should not be made if --no-graphics is used
|
||||
if(!ProfileWorld::isNoGraphics())
|
||||
{
|
||||
glGetIntegerv(GL_MAJOR_VERSION, &GLMajorVersion);
|
||||
glGetIntegerv(GL_MINOR_VERSION, &GLMinorVersion);
|
||||
Log::info("IrrDriver", "OpenGL version: %d.%d", GLMajorVersion, GLMinorVersion);
|
||||
glGetIntegerv(GL_MAJOR_VERSION, &m_gl_major_version);
|
||||
glGetIntegerv(GL_MINOR_VERSION, &m_gl_minor_version);
|
||||
Log::info("IrrDriver", "OpenGL version: %d.%d", m_gl_major_version, m_gl_minor_version);
|
||||
Log::info("IrrDriver", "OpenGL vendor: %s", glGetString(GL_VENDOR));
|
||||
Log::info("IrrDriver", "OpenGL renderer: %s", glGetString(GL_RENDERER));
|
||||
Log::info("IrrDriver", "OpenGL version string: %s", glGetString(GL_VERSION));
|
||||
@ -482,7 +482,7 @@ void IrrDriver::initDevice()
|
||||
m_need_srgb_workaround = false;
|
||||
#ifdef WIN32
|
||||
// Fix for Intel Sandy Bridge on Windows which supports GL up to 3.1 only
|
||||
if (strstr((const char *)glGetString(GL_VENDOR), "Intel") != NULL && (GLMajorVersion == 3 && GLMinorVersion == 1))
|
||||
if (strstr((const char *)glGetString(GL_VENDOR), "Intel") != NULL && (m_gl_major_version == 3 && m_gl_minor_version == 1))
|
||||
m_need_ubo_workaround = true;
|
||||
#endif
|
||||
// Fix for Nvidia and instanced RH
|
||||
@ -494,9 +494,9 @@ void IrrDriver::initDevice()
|
||||
m_need_srgb_workaround = true;
|
||||
}
|
||||
#ifdef WIN32
|
||||
m_glsl = (GLMajorVersion > 3 || (GLMajorVersion == 3 && GLMinorVersion >= 3));
|
||||
m_glsl = (m_gl_major_version > 3 || (m_gl_major_version == 3 && m_gl_minor_version >= 3));
|
||||
#else
|
||||
m_glsl = (GLMajorVersion > 3 || (GLMajorVersion == 3 && GLMinorVersion >= 1));
|
||||
m_glsl = (m_gl_major_version > 3 || (m_gl_major_version == 3 && m_gl_minor_version >= 1));
|
||||
#endif
|
||||
initGL();
|
||||
|
||||
@ -656,6 +656,26 @@ void IrrDriver::initDevice()
|
||||
m_pointer_shown = true;
|
||||
} // initDevice
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void IrrDriver::getOpenGLData(std::string *vendor )
|
||||
{
|
||||
*vendor = (char*)(glGetString(GL_VENDOR));
|
||||
#ifdef XX
|
||||
m_gl_major_version = 2;
|
||||
m_gl_minor_version = 1;
|
||||
// Call to glGetIntegerv should not be made if --no-graphics is used
|
||||
if(!ProfileWorld::isNoGraphics())
|
||||
{
|
||||
glGetIntegerv(GL_MAJOR_VERSION, &m_gl_major_version);
|
||||
glGetIntegerv(GL_MINOR_VERSION, &m_gl_minor_version);
|
||||
Log::info("IrrDriver", "OpenGL version: %d.%d", m_gl_major_version, m_gl_minor_version);
|
||||
Log::info("IrrDriver", "OpenGL vendor: %s", );
|
||||
Log::info("IrrDriver", "OpenGL renderer: %s", glGetString(GL_RENDERER));
|
||||
Log::info("IrrDriver", "OpenGL version string: %s", glGetString(GL_VERSION));
|
||||
|
||||
#endif
|
||||
} // getOpenGLData
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void IrrDriver::showPointer()
|
||||
{
|
||||
|
@ -198,7 +198,7 @@ enum TypeRTT
|
||||
class IrrDriver : public IEventReceiver, public NoCopy
|
||||
{
|
||||
private:
|
||||
int GLMajorVersion, GLMinorVersion;
|
||||
int m_gl_major_version, m_gl_minor_version;
|
||||
bool hasVSLayer;
|
||||
bool hasBaseInstance;
|
||||
bool hasDrawIndirect;
|
||||
@ -283,10 +283,10 @@ public:
|
||||
|
||||
unsigned getGLSLVersion() const
|
||||
{
|
||||
if (GLMajorVersion > 3 || (GLMajorVersion == 3 && GLMinorVersion == 3))
|
||||
return GLMajorVersion * 100 + GLMinorVersion * 10;
|
||||
else if (GLMajorVersion == 3)
|
||||
return 100 + (GLMinorVersion + 3) * 10;
|
||||
if (m_gl_major_version > 3 || (m_gl_major_version == 3 && m_gl_minor_version == 3))
|
||||
return m_gl_major_version * 100 + m_gl_minor_version * 10;
|
||||
else if (m_gl_major_version == 3)
|
||||
return 100 + (m_gl_minor_version + 3) * 10;
|
||||
else
|
||||
return 120;
|
||||
}
|
||||
@ -428,6 +428,8 @@ public:
|
||||
~IrrDriver();
|
||||
void initDevice();
|
||||
void reset();
|
||||
void getOpenGLData(std::string *vendor);
|
||||
|
||||
void generateSkyboxCubemap();
|
||||
void generateDiffuseCoefficients();
|
||||
void renderSkybox(const scene::ICameraSceneNode *camera);
|
||||
|
@ -147,6 +147,7 @@
|
||||
#include "audio/music_manager.hpp"
|
||||
#include "audio/sfx_manager.hpp"
|
||||
#include "challenges/unlock_manager.hpp"
|
||||
#include "config/hardware_stats.hpp"
|
||||
#include "config/player_manager.hpp"
|
||||
#include "config/player_profile.hpp"
|
||||
#include "config/stk_config.hpp"
|
||||
@ -1287,6 +1288,11 @@ int main(int argc, char *argv[] )
|
||||
}
|
||||
}
|
||||
|
||||
if(UserConfigParams::m_internet_status==Online::RequestManager::IPERM_ALLOWED)
|
||||
{
|
||||
HardwareStats::reportHardwareStats();
|
||||
}
|
||||
|
||||
if(!UserConfigParams::m_no_start_screen)
|
||||
{
|
||||
// If there is a current player, it was saved in the config file,
|
||||
|
Loading…
Reference in New Issue
Block a user