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

Commit 5a655b8d authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

Add display name and id to traces

On a multi-display device, it is helpful to know which display
particular methods are called for. Add information to traces specifying
the name and id of the display. The device still needs to specify
different names for displays (see b/254851304), but the traces will now
show the id, which is helpful until the device is updated, at which
point the names will be immediately helpful.

Output:
- Store a string that combines the readable name and the DisplayId. This
  saves allocation costs for the various places where we add this info
  to the trace.
- Print the name and id in present and postFramebuffer. Although
  postFramebuffer is called by present, future CLs will move it to a
  separate thread, and this allows tracking which call applies to which
  display.
DisplaySettings:
- Add a field with the display name and id. This allows SkiaRenderEngine
  to print them as well.
SkiaRenderEngine:
- Print the name and id in drawLayersInternal
- Replace the outdated text for the function name referring to the class
  as "SkiaGL" with a simple call to __func__.
Display:
- Print the name and id in chooseClientCompositionStrategy, which may
  also run in another thread.

Bug: 241285473
Test: manual; look at traces
Change-Id: I3081c4e4a7b5874139af6b5dd74a6a8ab0ad8cf7
parent ad75ba36
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -23,17 +23,24 @@
#include <math/mat4.h>
#include <renderengine/PrintMatrix.h>
#include <renderengine/BorderRenderInfo.h>
#include <ui/DisplayId.h>
#include <ui/GraphicTypes.h>
#include <ui/Rect.h>
#include <ui/Region.h>
#include <ui/Transform.h>

#include <optional>

namespace android {
namespace renderengine {

// DisplaySettings contains the settings that are applicable when drawing all
// layers for a given display.
struct DisplaySettings {
    // A string containing the name of the display, along with its id, if it has
    // one.
    std::string namePlusId;

    // Rectangle describing the physical display. We will project from the
    // logical clip onto this rectangle.
    Rect physicalDisplay = Rect::INVALID_RECT;
@@ -85,8 +92,8 @@ struct DisplaySettings {
};

static inline bool operator==(const DisplaySettings& lhs, const DisplaySettings& rhs) {
    return lhs.physicalDisplay == rhs.physicalDisplay && lhs.clip == rhs.clip &&
            lhs.maxLuminance == rhs.maxLuminance &&
    return lhs.namePlusId == rhs.namePlusId && lhs.physicalDisplay == rhs.physicalDisplay &&
            lhs.clip == rhs.clip && lhs.maxLuminance == rhs.maxLuminance &&
            lhs.currentLuminanceNits == rhs.currentLuminanceNits &&
            lhs.outputDataspace == rhs.outputDataspace &&
            lhs.colorTransform == rhs.colorTransform &&
@@ -121,6 +128,7 @@ static const char* orientation_to_string(uint32_t orientation) {

static inline void PrintTo(const DisplaySettings& settings, ::std::ostream* os) {
    *os << "DisplaySettings {";
    *os << "\n    .display = " << settings.namePlusId;
    *os << "\n    .physicalDisplay = ";
    PrintTo(settings.physicalDisplay, os);
    *os << "\n    .clip = ";
+1 −1
Original line number Diff line number Diff line
@@ -636,7 +636,7 @@ void SkiaRenderEngine::drawLayersInternal(
        const DisplaySettings& display, const std::vector<LayerSettings>& layers,
        const std::shared_ptr<ExternalTexture>& buffer, const bool /*useFramebufferCache*/,
        base::unique_fd&& bufferFence) {
    ATRACE_NAME("SkiaGL::drawLayersInternal");
    ATRACE_FORMAT("%s for %s", __func__, display.namePlusId.c_str());

    std::lock_guard<std::mutex> lock(mRenderingMutex);

+3 −0
Original line number Diff line number Diff line
@@ -155,6 +155,8 @@ protected:

    bool mustRecompose() const;

    const std::string& getNamePlusId() const { return mNamePlusId; }

private:
    void dirtyEntireOutput();
    void updateCompositionStateForBorder(const compositionengine::CompositionRefreshArgs&);
@@ -165,6 +167,7 @@ private:
            const compositionengine::CompositionRefreshArgs&) const;

    std::string mName;
    std::string mNamePlusId;

    std::unique_ptr<compositionengine::DisplayColorProfile> mDisplayColorProfile;
    std::unique_ptr<compositionengine::RenderSurface> mRenderSurface;
+2 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <compositionengine/impl/DumpHelpers.h>
#include <compositionengine/impl/OutputLayer.h>
#include <compositionengine/impl/RenderSurface.h>
#include <gui/TraceUtils.h>

#include <utils/Trace.h>

@@ -235,7 +236,7 @@ void Display::beginFrame() {

bool Display::chooseCompositionStrategy(
        std::optional<android::HWComposer::DeviceRequestedChanges>* outChanges) {
    ATRACE_CALL();
    ATRACE_FORMAT("%s for %s", __func__, getNamePlusId().c_str());
    ALOGV(__FUNCTION__);

    if (mIsDisconnected) {
+7 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <compositionengine/impl/OutputLayerCompositionState.h>
#include <compositionengine/impl/planner/Planner.h>
#include <ftl/future.h>
#include <gui/TraceUtils.h>

#include <thread>

@@ -116,6 +117,9 @@ const std::string& Output::getName() const {

void Output::setName(const std::string& name) {
    mName = name;
    auto displayIdOpt = getDisplayId();
    mNamePlusId = base::StringPrintf("%s (%s)", mName.c_str(),
                                     displayIdOpt ? to_string(*displayIdOpt).c_str() : "NA");
}

void Output::setCompositionEnabled(bool enabled) {
@@ -427,7 +431,7 @@ void Output::prepare(const compositionengine::CompositionRefreshArgs& refreshArg
}

void Output::present(const compositionengine::CompositionRefreshArgs& refreshArgs) {
    ATRACE_CALL();
    ATRACE_FORMAT("%s for %s", __func__, mNamePlusId.c_str());
    ALOGV(__FUNCTION__);

    updateColorProfile(refreshArgs);
@@ -1322,6 +1326,7 @@ renderengine::DisplaySettings Output::generateClientCompositionDisplaySettings()
    const auto& outputState = getState();

    renderengine::DisplaySettings clientCompositionDisplay;
    clientCompositionDisplay.namePlusId = mNamePlusId;
    clientCompositionDisplay.physicalDisplay = outputState.framebufferSpace.getContent();
    clientCompositionDisplay.clip = outputState.layerStackSpace.getContent();
    clientCompositionDisplay.orientation =
@@ -1488,7 +1493,7 @@ bool Output::isPowerHintSessionEnabled() {
}

void Output::postFramebuffer() {
    ATRACE_CALL();
    ATRACE_FORMAT("%s for %s", __func__, mNamePlusId.c_str());
    ALOGV(__FUNCTION__);

    if (!getState().isEnabled) {