1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 06:55:08 +00:00
serenity/Tests/LibGfx/BenchmarkGfxPainter.cpp
Andrew Kaster e4013f6cc6 Tests: Set a default font in BenchmarkGfxPainter to prevent crashes
After the changes to LibGfx to make default font management handled in
WindowServer instead of each GUI application to allow for global font
broadcasts, the two LibGfx tests broke. The non-benchmark was fixed in
8f96d2, but the benchmark was left in the dust because nobody really
runs it manually :^(
2021-07-06 17:22:45 +02:00

63 lines
1.7 KiB
C++

/*
* Copyright (c) 2021, Oleg Sikorskiy <olegsik@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibTest/TestCase.h>
#include <LibGfx/Bitmap.h>
#include <LibGfx/FontDatabase.h>
#include <LibGfx/Painter.h>
#include <stdio.h>
// Make sure that no matter what order tests are run in, we've got some
// default fonts for the application to use without talking to WindowServer
static struct FontDatabaseSpoofer {
FontDatabaseSpoofer()
{
Gfx::FontDatabase::the().set_default_font_query("Katica 10 400"sv);
}
} g_spoof;
BENCHMARK_CASE(diagonal_lines)
{
const int run_count = 50;
const int bitmap_size = 2000;
auto bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
Gfx::Painter painter(*bitmap);
for (int run = 0; run < run_count; run++) {
for (int i = 0; i < bitmap_size; i++) {
painter.draw_line({ 0, 0 }, { i, bitmap_size - 1 }, Color::Blue);
painter.draw_line({ 0, 0 }, { bitmap_size - 1, i }, Color::Blue);
}
}
}
BENCHMARK_CASE(fill)
{
const int run_count = 1000;
const int bitmap_size = 2000;
auto bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
Gfx::Painter painter(*bitmap);
for (int run = 0; run < run_count; run++) {
painter.fill_rect(bitmap->rect(), Color::Blue);
}
}
BENCHMARK_CASE(fill_with_gradient)
{
const int run_count = 50;
const int bitmap_size = 2000;
auto bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRx8888, { bitmap_size, bitmap_size });
Gfx::Painter painter(*bitmap);
for (int run = 0; run < run_count; run++) {
painter.fill_rect_with_gradient(bitmap->rect(), Color::Blue, Color::Red);
}
}