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

Commit 8c5b700a authored by Vishnu Nair's avatar Vishnu Nair
Browse files

[sf] Add TransactionTraceWriterTests

Bug: 238781169, 294989213
Test: presubmit
Change-Id: Ibeb4118b08424ae28f4f48442f977a433aeff18e
parent 3e7eb31b
Loading
Loading
Loading
Loading
+23 −21
Original line number Diff line number Diff line
@@ -863,12 +863,17 @@ void SurfaceFlinger::init() FTL_FAKE_GUARD(kMainThreadContext) {
        ALOGE("Run StartPropertySetThread failed!");
    }

    if (mTransactionTracing) {
        TransactionTraceWriter::getInstance().setWriterFunction([&](const std::string& prefix,
                                                                    bool overwrite) {
    initTransactionTraceWriter();
    ALOGV("Done initializing");
}

void SurfaceFlinger::initTransactionTraceWriter() {
    if (!mTransactionTracing) {
        return;
    }
    TransactionTraceWriter::getInstance().setWriterFunction(
            [&](const std::string& filename, bool overwrite) {
                auto writeFn = [&]() {
                const std::string filename =
                        TransactionTracing::DIR_NAME + prefix + TransactionTracing::FILE_NAME;
                    if (!overwrite && access(filename.c_str(), F_OK) == 0) {
                        ALOGD("TransactionTraceWriter: file=%s already exists", filename.c_str());
                        return;
@@ -884,9 +889,6 @@ void SurfaceFlinger::init() FTL_FAKE_GUARD(kMainThreadContext) {
            });
}

    ALOGV("Done initializing");
}

void SurfaceFlinger::readPersistentProperties() {
    Mutex::Autolock _l(mStateLock);

+1 −1
Original line number Diff line number Diff line
@@ -1134,7 +1134,7 @@ private:
    ui::Rotation getPhysicalDisplayOrientation(DisplayId, bool isPrimary) const
            REQUIRES(mStateLock);
    void traverseLegacyLayers(const LayerVector::Visitor& visitor) const;

    void initTransactionTraceWriter();
    sp<StartPropertySetThread> mStartPropertySetThread;
    surfaceflinger::Factory& mFactory;
    pid_t mPid;
+12 −2
Original line number Diff line number Diff line
@@ -73,12 +73,16 @@ public:
    static constexpr auto TRACING_VERSION = 1;

private:
    friend class TransactionTraceWriter;
    friend class TransactionTracingTest;
    friend class SurfaceFlinger;

    static constexpr auto DIR_NAME = "/data/misc/wmtrace/";
    static constexpr auto FILE_NAME = "transactions_trace.winscope";
    static constexpr auto FILE_PATH = "/data/misc/wmtrace/transactions_trace.winscope";
    static std::string getFilePath(const std::string& prefix) {
        return DIR_NAME + prefix + FILE_NAME;
    }

    mutable std::mutex mTraceLock;
    TransactionRingBuffer<proto::TransactionTraceFile, proto::TransactionTraceEntry> mBuffer
@@ -138,10 +142,16 @@ class TransactionTraceWriter : public Singleton<TransactionTraceWriter> {

public:
    void setWriterFunction(
            std::function<void(const std::string& prefix, bool overwrite)> function) {
            std::function<void(const std::string& filename, bool overwrite)> function) {
        mWriterFunction = std::move(function);
    }
    void invoke(const std::string& prefix, bool overwrite) { mWriterFunction(prefix, overwrite); }
    void invoke(const std::string& prefix, bool overwrite) {
        mWriterFunction(TransactionTracing::getFilePath(prefix), overwrite);
    }
    /* pass in a complete file path for testing */
    void invokeForTest(const std::string& filename, bool overwrite) {
        mWriterFunction(filename, overwrite);
    }
};

} // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ cc_test {
        // option to false temporarily.
        address: true,
    },
    static_libs: ["libc++fs"],
    srcs: [
        ":libsurfaceflinger_mock_sources",
        ":libsurfaceflinger_sources",
@@ -128,6 +129,7 @@ cc_test {
        "TransactionFrameTracerTest.cpp",
        "TransactionProtoParserTest.cpp",
        "TransactionSurfaceFrameTest.cpp",
        "TransactionTraceWriterTest.cpp",
        "TransactionTracingTest.cpp",
        "TunnelModeEnabledReporterTest.cpp",
        "StrongTypingTest.cpp",
+6 −0
Original line number Diff line number Diff line
@@ -651,6 +651,11 @@ public:

    auto fromHandle(const sp<IBinder>& handle) { return LayerHandle::getLayer(handle); }

    auto initTransactionTraceWriter() {
        mFlinger->mTransactionTracing.emplace();
        return mFlinger->initTransactionTraceWriter();
    }

    ~TestableSurfaceFlinger() {
        // All these pointer and container clears help ensure that GMock does
        // not report a leaked object, since the SurfaceFlinger instance may
@@ -664,6 +669,7 @@ public:
        mFlinger->mCompositionEngine->setHwComposer(std::unique_ptr<HWComposer>());
        mFlinger->mRenderEngine = std::unique_ptr<renderengine::RenderEngine>();
        mFlinger->mCompositionEngine->setRenderEngine(mFlinger->mRenderEngine.get());
        mFlinger->mTransactionTracing.reset();
    }

    /* ------------------------------------------------------------------------
Loading