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

Commit 9f0be410 authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge "Avoid capturing always on tracing when generating layers trace" into main

parents 2481b2f8 20006dc3
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -218,6 +218,13 @@ class TransactionTraceWriter : public Singleton<TransactionTraceWriter> {
    friend class Singleton<TransactionTracing>;
    std::function<void(const std::string& prefix, bool overwrite)> mWriterFunction =
            [](const std::string&, bool) {};
    std::atomic<bool> mEnabled{true};

    void doInvoke(const std::string& filename, bool overwrite) {
        if (mEnabled) {
            mWriterFunction(filename, overwrite);
        }
    };

public:
    void setWriterFunction(
@@ -225,12 +232,15 @@ public:
        mWriterFunction = std::move(function);
    }
    void invoke(const std::string& prefix, bool overwrite) {
        mWriterFunction(TransactionTracing::getFilePath(prefix), overwrite);
        doInvoke(TransactionTracing::getFilePath(prefix), overwrite);
    }
    /* pass in a complete file path for testing */
    void invokeForTest(const std::string& filename, bool overwrite) {
        mWriterFunction(filename, overwrite);
        doInvoke(filename, overwrite);
    }
    /* hacky way to avoid generating traces when converting transaction trace to layers trace. */
    void disable() { mEnabled.store(false); }
    void enable() { mEnabled.store(true); }
};

} // namespace android
+15 −0
Original line number Diff line number Diff line
@@ -40,9 +40,24 @@
namespace android {
using namespace ftl::flag_operators;

namespace {
class ScopedTraceDisabler {
public:
    ScopedTraceDisabler() { TransactionTraceWriter::getInstance().disable(); }
    ~ScopedTraceDisabler() { TransactionTraceWriter::getInstance().enable(); }
};
} // namespace

bool LayerTraceGenerator::generate(const perfetto::protos::TransactionTraceFile& traceFile,
                                   std::uint32_t traceFlags, LayerTracing& layerTracing,
                                   bool onlyLastEntry) {
    // We are generating the layers trace by replaying back a set of transactions. If the
    // transactions have unexpected states, we may generate a transaction trace to debug
    // the unexpected state. This is silly. So we disable it by poking the
    // TransactionTraceWriter. This is really a hack since we should manage our depenecies a
    // little better.
    ScopedTraceDisabler fatalErrorTraceDisabler;

    if (traceFile.entry_size() == 0) {
        ALOGD("Trace file is empty");
        return false;
+12 −0
Original line number Diff line number Diff line
@@ -105,4 +105,16 @@ TEST_F(TransactionTraceWriterTest, overwriteOldFile) {
    verifyTraceFile();
}

// Check we cannot write to file if the trace write is disabled.
TEST_F(TransactionTraceWriterTest, canDisableTraceWriter) {
    TransactionTraceWriter::getInstance().disable();
    TransactionTraceWriter::getInstance().invokeForTest(mFilename, /* overwrite */ true);
    EXPECT_NE(access(mFilename.c_str(), F_OK), 0);

    TransactionTraceWriter::getInstance().enable();
    TransactionTraceWriter::getInstance().invokeForTest(mFilename, /* overwrite */ true);
    EXPECT_EQ(access(mFilename.c_str(), F_OK), 0);
    verifyTraceFile();
}

} // namespace android
 No newline at end of file