From c0eacf4cc1d398ad2975e84a1728dd47254852a5 Mon Sep 17 00:00:00 2001 From: Oleg Sikorskiy Date: Sun, 4 Apr 2021 16:10:54 +0300 Subject: [PATCH] LibGfx: Add benchmarks for line drawing and rectangle filling --- Userland/Tests/LibGfx/CMakeLists.txt | 1 + Userland/Tests/LibGfx/painter.cpp | 75 ++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 Userland/Tests/LibGfx/painter.cpp diff --git a/Userland/Tests/LibGfx/CMakeLists.txt b/Userland/Tests/LibGfx/CMakeLists.txt index f3f3d4a0a2..1c2bc2f17e 100644 --- a/Userland/Tests/LibGfx/CMakeLists.txt +++ b/Userland/Tests/LibGfx/CMakeLists.txt @@ -9,3 +9,4 @@ endforeach() target_link_libraries(font LibGUI LibCore) target_link_libraries(image-decoder LibGUI LibCore) +target_link_libraries(painter LibGUI LibCore) diff --git a/Userland/Tests/LibGfx/painter.cpp b/Userland/Tests/LibGfx/painter.cpp new file mode 100644 index 0000000000..ffb886a791 --- /dev/null +++ b/Userland/Tests/LibGfx/painter.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021, Oleg Sikorskiy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include +#include +#include + +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); + } +} + +TEST_MAIN(Painter)