[DebugOverlay] Added "Chunks rendered" + "Chunk draw calls".

They show their value per tick, and those values are computed from last second.
This commit is contained in:
Quentin Bazin 2021-06-12 13:30:44 +02:00
parent 7da33916d9
commit 26fbc8737c
5 changed files with 41 additions and 1 deletions

View File

@ -121,6 +121,8 @@ void ChunkRenderer::draw(gk::RenderTarget &target, gk::RenderStates states, cons
} }
void ChunkRenderer::drawChunks(gk::RenderTarget &target, gk::RenderStates states, const std::vector<std::pair<ClientChunk*, gk::Transform>> &chunks, const Sky *currentSky) const { void ChunkRenderer::drawChunks(gk::RenderTarget &target, gk::RenderStates states, const std::vector<std::pair<ClientChunk*, gk::Transform>> &chunks, const Sky *currentSky) const {
++ClientChunk::frameCounter;
if(Config::isWireframeModeEnabled) glCheck(glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)); if(Config::isWireframeModeEnabled) glCheck(glPolygonMode(GL_FRONT_AND_BACK, GL_LINE));
glCheck(glEnable(GL_DEPTH_TEST)); glCheck(glEnable(GL_DEPTH_TEST));
@ -156,6 +158,11 @@ void ChunkRenderer::drawChunks(gk::RenderTarget &target, gk::RenderStates states
target.drawArrays(GL_TRIANGLES, it.first->getBufferOffset(layer), (GLsizei)verticesCount); target.drawArrays(GL_TRIANGLES, it.first->getBufferOffset(layer), (GLsizei)verticesCount);
gk::VertexArray::bind(nullptr); gk::VertexArray::bind(nullptr);
if (!it.first->hasBeenDrawn())
++ClientChunk::chunkDrawCounter;
++ClientChunk::chunkDrawCallCounter;
it.first->setHasBeenDrawn(true); it.first->setHasBeenDrawn(true);
} }
} }

View File

@ -88,7 +88,11 @@ void DebugOverlay::update(bool printOpenGLInfo) {
stream << '\n'; stream << '\n';
stream << "Alive entities: " << m_world.scene().registry().alive(); stream << "Alive entities: " << m_world.scene().registry().alive();
stream << '\n'; stream << '\n';
stream << "Chunk updates: " << ClientChunk::chunkUpdatesPerSec; stream << "Chunk updates: " << ClientChunk::chunkUpdatesPerSec << "/sec";
stream << '\n';
stream << "Chunks rendered: " << ClientChunk::chunksRenderedPerFrame << "/frame";
stream << '\n';
stream << "Chunk draw calls: " << ClientChunk::chunkDrawCallPerFrame << "/frame";
stream << '\n'; stream << '\n';
stream << "Ticks: " << GameTime::getTicks(); stream << "Ticks: " << GameTime::getTicks();
stream << '\n'; stream << '\n';

View File

@ -31,10 +31,19 @@
#include "TextureAtlas.hpp" #include "TextureAtlas.hpp"
#include "World.hpp" #include "World.hpp"
// Debug values only used in DebugOverlay
u32 ClientChunk::chunkUpdatesPerSec = 0; u32 ClientChunk::chunkUpdatesPerSec = 0;
u32 ClientChunk::chunkUpdateCounter = 0; u32 ClientChunk::chunkUpdateCounter = 0;
u64 ClientChunk::chunkUpdateTime = 0; u64 ClientChunk::chunkUpdateTime = 0;
u64 ClientChunk::chunksRenderedPerFrame = 0;
u64 ClientChunk::chunkDrawCallPerFrame = 0;
u32 ClientChunk::chunkDrawCounter = 0;
u32 ClientChunk::chunkDrawCallCounter = 0;
u64 ClientChunk::chunkDrawTime = 0;
u64 ClientChunk::chunkDrawStartFrame = 0;
u64 ClientChunk::frameCounter = 0;
ClientChunk::ClientChunk(s32 x, s32 y, s32 z, const Dimension &dimension, ClientWorld &world) ClientChunk::ClientChunk(s32 x, s32 y, s32 z, const Dimension &dimension, ClientWorld &world)
: Chunk(x, y, z, (World &)world), m_world(world), m_dimension(dimension) : Chunk(x, y, z, (World &)world), m_world(world), m_dimension(dimension)
{ {

View File

@ -71,10 +71,19 @@ class ClientChunk : public Chunk {
int debugTimesReceived = 0; // Only used by Minimap int debugTimesReceived = 0; // Only used by Minimap
// Debug values only used in DebugOverlay
static u32 chunkUpdatesPerSec; static u32 chunkUpdatesPerSec;
static u32 chunkUpdateCounter; static u32 chunkUpdateCounter;
static u64 chunkUpdateTime; static u64 chunkUpdateTime;
static u64 chunksRenderedPerFrame;
static u64 chunkDrawCallPerFrame;
static u32 chunkDrawCounter;
static u32 chunkDrawCallCounter;
static u64 chunkDrawTime;
static u64 chunkDrawStartFrame;
static u64 frameCounter;
private: private:
ClientWorld &m_world; ClientWorld &m_world;

View File

@ -24,6 +24,8 @@
* *
* ===================================================================================== * =====================================================================================
*/ */
#include <algorithm> // std::max
#include <gk/resource/ResourceHandler.hpp> #include <gk/resource/ResourceHandler.hpp>
#include "ClientCommandHandler.hpp" #include "ClientCommandHandler.hpp"
@ -52,12 +54,21 @@ ClientWorld::ClientWorld()
void ClientWorld::update(bool allowWorldReload) { void ClientWorld::update(bool allowWorldReload) {
World::update(); World::update();
// Debug values only used in DebugOverlay
u64 time = std::time(nullptr); u64 time = std::time(nullptr);
if (time > ClientChunk::chunkUpdateTime) { if (time > ClientChunk::chunkUpdateTime) {
ClientChunk::chunkUpdatesPerSec = ClientChunk::chunkUpdateCounter; ClientChunk::chunkUpdatesPerSec = ClientChunk::chunkUpdateCounter;
ClientChunk::chunkUpdateCounter = 0; ClientChunk::chunkUpdateCounter = 0;
ClientChunk::chunkUpdateTime = time; ClientChunk::chunkUpdateTime = time;
} }
if (time > ClientChunk::chunkDrawTime) {
ClientChunk::chunksRenderedPerFrame = ClientChunk::chunkDrawCounter / std::max(1ul, ClientChunk::frameCounter - ClientChunk::chunkDrawStartFrame);
ClientChunk::chunkDrawCallPerFrame = ClientChunk::chunkDrawCallCounter / std::max(1ul, ClientChunk::frameCounter - ClientChunk::chunkDrawStartFrame);
ClientChunk::chunkDrawCounter = 0;
ClientChunk::chunkDrawCallCounter = 0;
ClientChunk::chunkDrawTime = time;
ClientChunk::chunkDrawStartFrame = ClientChunk::frameCounter;
}
for (auto it = m_chunksToRemove.begin() ; it != m_chunksToRemove.end() ;) { for (auto it = m_chunksToRemove.begin() ; it != m_chunksToRemove.end() ;) {
removeChunk(*it); removeChunk(*it);