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

Commit a9f976b5 authored by Dan Stoza's avatar Dan Stoza Committed by android-build-merger
Browse files

SF/HWC2: Add a layer minidump

am: e22aec74

Change-Id: Ib97254ebbf2e914c965b529e7d1e59a01db48214
parents f7e80993 e22aec74
Loading
Loading
Loading
Loading
+64 −10
Original line number Original line Diff line number Diff line
@@ -591,19 +591,25 @@ void Layer::setGeometry(
    const Transform& tr(displayDevice->getTransform());
    const Transform& tr(displayDevice->getTransform());
    Rect transformedFrame = tr.transform(frame);
    Rect transformedFrame = tr.transform(frame);
    auto error = hwcLayer->setDisplayFrame(transformedFrame);
    auto error = hwcLayer->setDisplayFrame(transformedFrame);
    ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set display frame "
    if (error != HWC2::Error::None) {
            "[%d, %d, %d, %d]: %s (%d)", mName.string(), transformedFrame.left,
        ALOGE("[%s] Failed to set display frame [%d, %d, %d, %d]: %s (%d)",
            transformedFrame.top, transformedFrame.right,
                mName.string(), transformedFrame.left, transformedFrame.top,
            transformedFrame.bottom, to_string(error).c_str(),
                transformedFrame.right, transformedFrame.bottom,
            static_cast<int32_t>(error));
                to_string(error).c_str(), static_cast<int32_t>(error));
    } else {
        hwcInfo.displayFrame = transformedFrame;
    }


    FloatRect sourceCrop = computeCrop(displayDevice);
    FloatRect sourceCrop = computeCrop(displayDevice);
    error = hwcLayer->setSourceCrop(sourceCrop);
    error = hwcLayer->setSourceCrop(sourceCrop);
    ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set source crop "
    if (error != HWC2::Error::None) {
            "[%.3f, %.3f, %.3f, %.3f]: %s (%d)", mName.string(),
        ALOGE("[%s] Failed to set source crop [%.3f, %.3f, %.3f, %.3f]: "
            sourceCrop.left, sourceCrop.top, sourceCrop.right,
                "%s (%d)", mName.string(), sourceCrop.left, sourceCrop.top,
            sourceCrop.bottom, to_string(error).c_str(),
                sourceCrop.right, sourceCrop.bottom, to_string(error).c_str(),
                static_cast<int32_t>(error));
                static_cast<int32_t>(error));
    } else {
        hwcInfo.sourceCrop = sourceCrop;
    }


    error = hwcLayer->setPlaneAlpha(s.alpha);
    error = hwcLayer->setPlaneAlpha(s.alpha);
    ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set plane alpha %.3f: "
    ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set plane alpha %.3f: "
@@ -2235,6 +2241,54 @@ void Layer::dump(String8& result, Colorizer& colorizer) const
    }
    }
}
}


#ifdef USE_HWC2
void Layer::miniDumpHeader(String8& result) {
    result.append("----------------------------------------");
    result.append("---------------------------------------\n");
    result.append(" Layer name\n");
    result.append("           Z | ");
    result.append(" Comp Type | ");
    result.append("  Disp Frame (LTRB) | ");
    result.append("         Source Crop (LTRB)\n");
    result.append("----------------------------------------");
    result.append("---------------------------------------\n");
}

void Layer::miniDump(String8& result, int32_t hwcId) const {
    if (mHwcLayers.count(hwcId) == 0) {
        return;
    }

    String8 name;
    if (mName.length() > 77) {
        std::string shortened;
        shortened.append(mName.string(), 36);
        shortened.append("[...]");
        shortened.append(mName.string() + (mName.length() - 36), 36);
        name = shortened.c_str();
    } else {
        name = mName;
    }

    result.appendFormat(" %s\n", name.string());

    const Layer::State& layerState(getDrawingState());
    const HWCInfo& hwcInfo = mHwcLayers.at(hwcId);
    result.appendFormat("  %10u | ", layerState.z);
    result.appendFormat("%10s | ",
            to_string(getCompositionType(hwcId)).c_str());
    const Rect& frame = hwcInfo.displayFrame;
    result.appendFormat("%4d %4d %4d %4d | ", frame.left, frame.top,
            frame.right, frame.bottom);
    const FloatRect& crop = hwcInfo.sourceCrop;
    result.appendFormat("%6.1f %6.1f %6.1f %6.1f\n", crop.left, crop.top,
            crop.right, crop.bottom);

    result.append("- - - - - - - - - - - - - - - - - - - - ");
    result.append("- - - - - - - - - - - - - - - - - - - -\n");
}
#endif

void Layer::dumpFrameStats(String8& result) const {
void Layer::dumpFrameStats(String8& result) const {
    mFrameTracker.dumpStats(result);
    mFrameTracker.dumpStats(result);
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -402,6 +402,10 @@ public:


    /* always call base class first */
    /* always call base class first */
    void dump(String8& result, Colorizer& colorizer) const;
    void dump(String8& result, Colorizer& colorizer) const;
#ifdef USE_HWC2
    static void miniDumpHeader(String8& result);
    void miniDump(String8& result, int32_t hwcId) const;
#endif
    void dumpFrameStats(String8& result) const;
    void dumpFrameStats(String8& result) const;
    void clearFrameStats();
    void clearFrameStats();
    void logFrameStats();
    void logFrameStats();
@@ -588,6 +592,8 @@ private:
        bool forceClientComposition;
        bool forceClientComposition;
        HWC2::Composition compositionType;
        HWC2::Composition compositionType;
        bool clearClientTarget;
        bool clearClientTarget;
        Rect displayFrame;
        FloatRect sourceCrop;
    };
    };
    std::unordered_map<int32_t, HWCInfo> mHwcLayers;
    std::unordered_map<int32_t, HWCInfo> mHwcLayers;
#else
#else
+20 −0
Original line number Original line Diff line number Diff line
@@ -3057,6 +3057,26 @@ void SurfaceFlinger::dumpAllLocked(const Vector<String16>& args, size_t& index,
     * VSYNC state
     * VSYNC state
     */
     */
    mEventThread->dump(result);
    mEventThread->dump(result);
    result.append("\n");

    /*
     * HWC layer minidump
     */
    for (size_t d = 0; d < mDisplays.size(); d++) {
        const sp<const DisplayDevice>& displayDevice(mDisplays[d]);
        int32_t hwcId = displayDevice->getHwcDisplayId();
        if (hwcId == DisplayDevice::DISPLAY_ID_INVALID) {
            continue;
        }

        result.appendFormat("Display %d HWC layers:\n", hwcId);
        Layer::miniDumpHeader(result);
        for (size_t l = 0; l < count; l++) {
            const sp<Layer>& layer(currentLayers[l]);
            layer->miniDump(result, hwcId);
        }
        result.append("\n");
    }


    /*
    /*
     * Dump HWComposer state
     * Dump HWComposer state