Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 547808b3 authored by Dan Stoza's avatar Dan Stoza
Browse files

Fast path Region::orSelf when empty

If a Region is empty, orSelf is equivalent to just assigning from the
other Region/Rect, so we don't need to perform a whole rasterization
pass.

Test: libsurfaceflinger_unittest
Test: simpleperf measurement of SF shows workload reduction
Bug: 153112939
Change-Id: Iefa0e0177a0e85ce72e37842885d3c8b68ce6025
parent 59083056
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -306,6 +306,10 @@ void Region::addRectUnchecked(int l, int t, int r, int b)
// ----------------------------------------------------------------------------

Region& Region::orSelf(const Rect& r) {
    if (isEmpty()) {
        set(r);
        return *this;
    }
    return operationSelf(r, op_or);
}
Region& Region::xorSelf(const Rect& r) {
@@ -326,6 +330,10 @@ Region& Region::operationSelf(const Rect& r, uint32_t op) {
// ----------------------------------------------------------------------------

Region& Region::orSelf(const Region& rhs) {
    if (isEmpty()) {
        *this = rhs;
        return *this;
    }
    return operationSelf(rhs, op_or);
}
Region& Region::xorSelf(const Region& rhs) {