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

Commit e70461ad authored by Dominik Laskowski's avatar Dominik Laskowski
Browse files

SF: Add utility class for dumpsys formatting

The Dumper class automates stringifying (a minimal set of types for now)
and indenting.

Bug: 241285876
Test: dumpsys SurfaceFlinger --displays
Change-Id: I5581cd9cb4235e2c710e303b6ab634847554cc30
parent f2fdb56c
Loading
Loading
Loading
Loading
+24 −25
Original line number Diff line number Diff line
@@ -14,44 +14,43 @@
 * limitations under the License.
 */

#include <ftl/match.h>
#include <ui/DeviceProductInfo.h>

#include <android-base/stringprintf.h>
#include <utils/Log.h>

#define RETURN_IF_ERROR(op) \
    if (const status_t status = (op); status != OK) return status;

namespace android {

std::string to_string(const DeviceProductInfo& info) {
    using base::StringAppendF;

void DeviceProductInfo::dump(std::string& result) const {
    StringAppendF(&result, "{name=\"%s\", ", name.c_str());
    StringAppendF(&result, "manufacturerPnpId=%s, ", manufacturerPnpId.data());
    StringAppendF(&result, "productId=%s, ", productId.c_str());

    if (const auto* model = std::get_if<ModelYear>(&manufactureOrModelDate)) {
        StringAppendF(&result, "modelYear=%u, ", model->year);
    } else if (const auto* manufactureWeekAndYear =
                       std::get_if<ManufactureWeekAndYear>(&manufactureOrModelDate)) {
        StringAppendF(&result, "manufactureWeek=%u, ", manufactureWeekAndYear->week);
        StringAppendF(&result, "manufactureYear=%d, ", manufactureWeekAndYear->year);
    } else if (const auto* manufactureYear =
                       std::get_if<ManufactureYear>(&manufactureOrModelDate)) {
        StringAppendF(&result, "manufactureYear=%d, ", manufactureYear->year);
    } else {
        ALOGE("Unknown alternative for variant DeviceProductInfo::ManufactureOrModelDate");
    }
    std::string result;
    StringAppendF(&result, "{name=\"%s\", ", info.name.c_str());
    StringAppendF(&result, "manufacturerPnpId=%s, ", info.manufacturerPnpId.data());
    StringAppendF(&result, "productId=%s, ", info.productId.c_str());

    ftl::match(
            info.manufactureOrModelDate,
            [&](DeviceProductInfo::ModelYear model) {
                StringAppendF(&result, "modelYear=%u, ", model.year);
            },
            [&](DeviceProductInfo::ManufactureWeekAndYear manufacture) {
                StringAppendF(&result, "manufactureWeek=%u, ", manufacture.week);
                StringAppendF(&result, "manufactureYear=%d, ", manufacture.year);
            },
            [&](DeviceProductInfo::ManufactureYear manufacture) {
                StringAppendF(&result, "manufactureYear=%d, ", manufacture.year);
            });

    result.append("relativeAddress=[");
    for (size_t i = 0; i < relativeAddress.size(); i++) {
    for (size_t i = 0; i < info.relativeAddress.size(); i++) {
        if (i != 0) {
            result.append(", ");
        }
        StringAppendF(&result, "%u", relativeAddress[i]);
        StringAppendF(&result, "%u", info.relativeAddress[i]);
    }
    result.append("]}");
    return result;
}

} // namespace android
+2 −2
Original line number Diff line number Diff line
@@ -61,8 +61,8 @@ struct DeviceProductInfo {
    // address is unavailable.
    // For example, for HDMI connected device this will be the physical address.
    std::vector<uint8_t> relativeAddress;

    void dump(std::string& result) const;
};

std::string to_string(const DeviceProductInfo&);

} // namespace android
+5 −12
Original line number Diff line number Diff line
@@ -41,18 +41,11 @@ std::optional<DisplayModeId> DisplaySnapshot::translateModeId(hal::HWConfigId hw
            .transform(&ftl::to_key<DisplayModes>);
}

void DisplaySnapshot::dump(std::string& out) const {
    using namespace std::string_literals;
void DisplaySnapshot::dump(utils::Dumper& dumper) const {
    using namespace std::string_view_literals;

    out += "   connectionType="s;
    out += ftl::enum_string(mConnectionType);

    out += "\n   deviceProductInfo="s;
    if (mDeviceProductInfo) {
        mDeviceProductInfo->dump(out);
    } else {
        out += "{}"s;
    }
    dumper.dump("connectionType"sv, ftl::enum_string(mConnectionType));
    dumper.dump("deviceProductInfo"sv, mDeviceProductInfo);
}

} // namespace android::display
+3 −3
Original line number Diff line number Diff line
@@ -17,12 +17,12 @@
#pragma once

#include <optional>
#include <string>

#include <ui/DisplayId.h>
#include <ui/StaticDisplayInfo.h>

#include "../DisplayHardware/DisplayMode.h"
#include "DisplayHardware/DisplayMode.h"
#include "Utils/Dumper.h"

namespace android::display {

@@ -43,7 +43,7 @@ public:
    const auto& displayModes() const { return mDisplayModes; }
    const auto& deviceProductInfo() const { return mDeviceProductInfo; }

    void dump(std::string&) const;
    void dump(utils::Dumper&) const;

private:
    const PhysicalDisplayId mDisplayId;
+6 −7
Original line number Diff line number Diff line
@@ -338,17 +338,16 @@ std::string DisplayDevice::getDebugName() const {
    return name + ", \""s + mDisplayName + "\")"s;
}

void DisplayDevice::dump(std::string& result) const {
    using namespace std::string_literals;
void DisplayDevice::dump(utils::Dumper& dumper) const {
    using namespace std::string_view_literals;

    result += getDebugName();
    dumper.dump({}, getDebugName());

    result += "\n   powerMode="s;
    result += mPowerMode.has_value() ? to_string(mPowerMode.value()) : "OFF(reset)";
    result += '\n';
    utils::Dumper::Indent indent(dumper);
    dumper.dump("powerMode"sv, mPowerMode);

    if (mRefreshRateConfigs) {
        mRefreshRateConfigs->dump(result);
        mRefreshRateConfigs->dump(dumper);
    }
}

Loading