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

Commit 24c62b63 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Add dump of hdr event history" into main

parents f485f766 2a3d29dc
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -18,14 +18,22 @@
#define LOG_TAG "HdrLayerInfoReporter"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS

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

#include "HdrLayerInfoReporter.h"

namespace android {

using base::StringAppendF;

void HdrLayerInfoReporter::dispatchHdrLayerInfo(const HdrLayerInfo& info) {
    ATRACE_CALL();
    if (mHdrInfoHistory.size() == 0 || mHdrInfoHistory.back().info != info) {
        mHdrInfoHistory.next() = EventHistoryEntry{info};
    }

    std::vector<sp<gui::IHdrLayerInfoListener>> toInvoke;
    {
        std::scoped_lock lock(mMutex);
@@ -62,4 +70,15 @@ void HdrLayerInfoReporter::removeListener(const sp<gui::IHdrLayerInfoListener>&
    mListeners.erase(wp<IBinder>(IInterface::asBinder(listener)));
}

void HdrLayerInfoReporter::dump(std::string& result) const {
    for (size_t i = 0; i < mHdrInfoHistory.size(); i++) {
        const auto& event = mHdrInfoHistory[i];
        const auto& info = event.info;
        StringAppendF(&result,
                      "%" PRId64 ": numHdrLayers(%d), size(%dx%d), flags(%X), desiredRatio(%.2f)\n",
                      event.timestamp, info.numberOfHdrLayers, info.maxW, info.maxH, info.flags,
                      info.maxDesiredHdrSdrRatio);
    }
}

} // namespace android
 No newline at end of file
+15 −0
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@
#include <android-base/thread_annotations.h>
#include <android/gui/IHdrLayerInfoListener.h>
#include <binder/IBinder.h>
#include <utils/Timers.h>

#include <unordered_map>

#include "Utils/RingBuffer.h"
#include "WpHash.h"

namespace android {
@@ -79,6 +81,8 @@ public:
        return !mListeners.empty();
    }

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

private:
    mutable std::mutex mMutex;

@@ -88,6 +92,17 @@ private:
    };

    std::unordered_map<wp<IBinder>, TrackedListener, WpHash> mListeners GUARDED_BY(mMutex);

    struct EventHistoryEntry {
        nsecs_t timestamp = -1;
        HdrLayerInfo info;

        EventHistoryEntry() {}

        EventHistoryEntry(const HdrLayerInfo& info) : info(info) { timestamp = systemTime(); }
    };

    utils::RingBuffer<EventHistoryEntry, 32> mHdrInfoHistory;
};

} // namespace android
 No newline at end of file
+11 −0
Original line number Diff line number Diff line
@@ -5750,6 +5750,7 @@ status_t SurfaceFlinger::doDump(int fd, const DumpArgs& args, bool asProto) {
                {"--edid"s, argsDumper(&SurfaceFlinger::dumpRawDisplayIdentificationData)},
                {"--events"s, dumper(&SurfaceFlinger::dumpEvents)},
                {"--frametimeline"s, argsDumper(&SurfaceFlinger::dumpFrameTimeline)},
                {"--hdrinfo"s, dumper(&SurfaceFlinger::dumpHdrInfo)},
                {"--hwclayers"s, dumper(&SurfaceFlinger::dumpHwcLayersMinidumpLockedLegacy)},
                {"--latency"s, argsDumper(&SurfaceFlinger::dumpStatsLocked)},
                {"--latency-clear"s, argsDumper(&SurfaceFlinger::clearStatsLocked)},
@@ -6058,6 +6059,14 @@ void SurfaceFlinger::dumpWideColorInfo(std::string& result) const {
    result.append("\n");
}

void SurfaceFlinger::dumpHdrInfo(std::string& result) const {
    for (const auto& [displayId, listener] : mHdrLayerInfoListeners) {
        StringAppendF(&result, "HDR events for display %" PRIu64 "\n", displayId.value);
        listener->dump(result);
        result.append("\n");
    }
}

LayersProto SurfaceFlinger::dumpDrawingStateProto(uint32_t traceFlags) const {
    std::unordered_set<uint64_t> stackIdsToSkip;

@@ -6222,6 +6231,8 @@ void SurfaceFlinger::dumpAllLocked(const DumpArgs& args, const std::string& comp
    result.append("\nWide-Color information:\n");
    dumpWideColorInfo(result);

    dumpHdrInfo(result);

    colorizer.bold(result);
    result.append("Sync configuration: ");
    colorizer.reset(result);
+1 −0
Original line number Diff line number Diff line
@@ -1086,6 +1086,7 @@ private:
    void dumpDisplayIdentificationData(std::string& result) const REQUIRES(mStateLock);
    void dumpRawDisplayIdentificationData(const DumpArgs&, std::string& result) const;
    void dumpWideColorInfo(std::string& result) const REQUIRES(mStateLock);
    void dumpHdrInfo(std::string& result) const REQUIRES(mStateLock);

    LayersProto dumpDrawingStateProto(uint32_t traceFlags) const;
    void dumpOffscreenLayersProto(LayersProto& layersProto,
+3 −2
Original line number Diff line number Diff line
@@ -27,12 +27,13 @@
#include <utils/Trace.h>

#include "LayerTracing.h"
#include "RingBuffer.h"
#include "TransactionRingBuffer.h"

namespace android {

LayerTracing::LayerTracing()
      : mBuffer(std::make_unique<RingBuffer<LayersTraceFileProto, LayersTraceProto>>()) {}
      : mBuffer(std::make_unique<TransactionRingBuffer<LayersTraceFileProto, LayersTraceProto>>()) {
}

LayerTracing::~LayerTracing() = default;

Loading