Files
Project-Zenith-Main/Minecraft.Client/Windows64/Libs/RmlUi/Tests/Source/Benchmarks/ElementDocument.cpp
2026-06-10 16:12:51 +02:00

155 lines
3.9 KiB
C++

#include "../Common/TestsInterface.h"
#include "../Common/TestsShell.h"
#include <RmlUi/Core/Context.h>
#include <RmlUi/Core/Element.h>
#include <RmlUi/Core/ElementDocument.h>
#include <RmlUi/Core/Factory.h>
#include <RmlUi/Core/Types.h>
#include <doctest.h>
#include <nanobench.h>
using namespace ankerl;
using namespace Rml;
static const String document_rml = R"(
<rml>
<head>
<link type="text/template" href="/assets/window.rml"/>
<title>Benchmark Sample</title>
<style>
body.window
{
left: 50px;
top: 50px;
width: 800px;
height: 200px;
}
#performance
{
width: 500px;
height: 300px;
}
</style>
</head>
<body template="window">
<div id="performance">
<div class="row">
<div class="col col1"><button class="expand" index="3">+</button>&nbsp;<a>Route 15</a></div>
<div class="col col23"><input type="range" class="assign_range" min="0" max="20" value="3"/></div>
<div class="col col4">Assigned</div>
<select>
<option>Red</option><option>Blue</option><option selected>Green</option><option style="background-color: yellow;">Yellow</option>
</select>
<div class="inrow unmark_collapse">
<div class="col col123 assign_text">Assign to route</div>
<div class="col col4">
<input type="submit" class="vehicle_depot_assign_confirm" quantity="0">Confirm</input>
</div>
</div>
</div>
</div>
</body>
</rml>
)";
TEST_CASE("elementdocument")
{
Context* context = TestsShell::GetContext();
REQUIRE(context);
{
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
const String stats = TestsShell::GetRenderStats();
MESSAGE(stats);
TestsShell::RenderLoop();
document->Close();
context->Update();
}
{
nanobench::Bench bench;
bench.title("ElementDocument");
bench.timeUnit(std::chrono::microseconds(1), "us");
bench.relative(true);
bench.run("LoadDocument", [&] {
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Close();
context->Update();
});
bench.run("LoadDocument + Show", [&] {
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
document->Close();
context->Update();
});
bench.run("LoadDocument + Show + Update", [&] {
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
context->Update();
document->Close();
context->Update();
});
bench.run("LoadDocument + Show + Update + Render", [&] {
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
context->Update();
TestsShell::BeginFrame();
context->Render();
TestsShell::PresentFrame();
document->Close();
context->Update();
});
}
{
nanobench::Bench bench;
bench.title("ElementDocument w/ClearStyleSheetCache");
bench.timeUnit(std::chrono::microseconds(1), "us");
bench.relative(true);
bench.run("Clear + LoadDocument", [&] {
Factory::ClearStyleSheetCache();
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Close();
context->Update();
});
bench.run("Clear + LoadDocument + Show", [&] {
Factory::ClearStyleSheetCache();
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
document->Close();
context->Update();
});
bench.run("Clear + LoadDocument + Show + Update", [&] {
Factory::ClearStyleSheetCache();
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
context->Update();
document->Close();
context->Update();
});
bench.run("Clear + LoadDocument + Show + Update + Render", [&] {
Factory::ClearStyleSheetCache();
ElementDocument* document = context->LoadDocumentFromMemory(document_rml);
document->Show();
context->Update();
TestsShell::BeginFrame();
context->Render();
TestsShell::PresentFrame();
document->Close();
context->Update();
});
}
}