Optimize performance. (#189)

Screen::ApplyShader accounted for 60% of the computation. This patch
optimize it.
Performance on a 80x80 frame improved from 1400 draw/s to 7000 draw/s.
This commit is contained in:
Arthur Sonzogni 2021-08-13 00:11:52 +02:00 committed by GitHub
parent 70cf088d6a
commit 69b0c9e53e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -227,23 +227,30 @@ void Screen::ApplyShader() {
// Merge box characters togethers. // Merge box characters togethers.
for (int y = 1; y < dimy_; ++y) { for (int y = 1; y < dimy_; ++y) {
for (int x = 1; x < dimx_; ++x) { for (int x = 1; x < dimx_; ++x) {
std::string& left = at(x - 1, y); // Box drawing character uses exactly 3 byte.
std::string& top = at(x, y - 1); std::string& cur = pixels_[y][x].character;
std::string& cur = at(x, y); if (cur.size() != 3u)
continue;
// Left vs current // Left vs current.
std::string& left = pixels_[y][x-1].character;
if (left.size() == 3u) {
if (cur == "" && left == "") cur = ""; if (cur == "" && left == "") cur = "";
if (cur == "" && left == "") left = "";
if (cur == "" && left == "") cur = ""; if (cur == "" && left == "") cur = "";
if (cur == "" && left == "") left = "";
if (cur == "" && left == "") left = ""; if (cur == "" && left == "") left = "";
}
// Top vs current // Top vs current.
std::string& top = pixels_[y-1][x].character;
if (top.size() == 3u) {
if (cur == "" && top == "") cur = ""; if (cur == "" && top == "") cur = "";
if (cur == "" && top == "") top = "";
if (cur == "" && top == "") cur = ""; if (cur == "" && top == "") cur = "";
if (cur == "" && top == "") top = "";
if (cur == "" && top == "") top = ""; if (cur == "" && top == "") top = "";
} }
} }
}
} }
// clang-format on // clang-format on