Loading services/surfaceflinger/Tracing/LayerTracing.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -192,9 +192,11 @@ void LayerTracing::writeSnapshotToStream(perfetto::protos::LayersSnapshotProto&& void LayerTracing::writeSnapshotToPerfetto(const perfetto::protos::LayersSnapshotProto& snapshot, Mode srcMode) { SFTRACE_CALL(); const auto snapshotBytes = snapshot.SerializeAsString(); LayerDataSource::Trace([&](LayerDataSource::TraceContext context) { SFTRACE_NAME("writeSnapshotToPerfetto_traceFunction"); auto dstMode = context.GetCustomTlsState()->mMode; if (srcMode == Mode::MODE_GENERATED) { // Layers snapshots produced by LayerTraceGenerator have srcMode == MODE_GENERATED Loading services/surfaceflinger/Tracing/TransactionTracing.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define LOG_TAG "TransactionTracing" #include <android-base/stringprintf.h> #include <common/trace.h> #include <log/log.h> #include <utils/SystemClock.h> Loading Loading @@ -87,6 +88,7 @@ void TransactionTracing::onFlush(TransactionTracing::Mode mode) { void TransactionTracing::writeRingBufferToPerfetto(TransactionTracing::Mode mode) { // Write the ring buffer (starting state + following sequence of transactions) to perfetto // tracing sessions with the specified mode. SFTRACE_CALL(); const auto fileProto = writeToProto(); TransactionDataSource::Trace([&](TransactionDataSource::TraceContext context) { Loading Loading @@ -132,6 +134,7 @@ status_t TransactionTracing::writeToFile(const std::string& filename) { } perfetto::protos::TransactionTraceFile TransactionTracing::writeToProto() { SFTRACE_CALL(); std::scoped_lock<std::mutex> lock(mTraceLock); perfetto::protos::TransactionTraceFile fileProto = createTraceFileProto(); const auto startingStateProto = createStartingStateProtoLocked(); Loading Loading @@ -160,6 +163,7 @@ perfetto::protos::TransactionTraceFile TransactionTracing::createTraceFileProto( } void TransactionTracing::dump(std::string& result) const { SFTRACE_CALL(); std::scoped_lock lock(mTraceLock); base::StringAppendF(&result, " queued transactions=%zu created layers=%zu states=%zu\n", mQueuedTransactions.size(), mCreatedLayers.size(), mStartingStates.size()); Loading @@ -167,6 +171,7 @@ void TransactionTracing::dump(std::string& result) const { } void TransactionTracing::addQueuedTransaction(const QueuedTransactionState& transaction) { SFTRACE_CALL(); perfetto::protos::TransactionState* state = new perfetto::protos::TransactionState(mProtoParser.toProto(transaction)); mTransactionQueue.push(state); Loading @@ -176,6 +181,7 @@ void TransactionTracing::addCommittedTransactions(int64_t vsyncId, nsecs_t commi frontend::Update& newUpdate, const frontend::DisplayInfos& displayInfos, bool displayInfoChanged) { SFTRACE_CALL(); CommittedUpdates update; update.vsyncId = vsyncId; update.timestamp = commitTime; Loading Loading @@ -228,6 +234,7 @@ void TransactionTracing::loop() { void TransactionTracing::addEntry(const std::vector<CommittedUpdates>& committedUpdates, const std::vector<uint32_t>& destroyedLayers) { SFTRACE_CALL(); std::scoped_lock lock(mTraceLock); std::vector<std::string> removedEntries; perfetto::protos::TransactionTraceEntry entryProto; Loading Loading @@ -354,6 +361,7 @@ void TransactionTracing::onLayerRemoved(int32_t layerId) { void TransactionTracing::tryPushToTracingThread() { // Try to acquire the lock from main thread. if (mMainThreadLock.try_lock()) { SFTRACE_NAME("pushTransactionsToTracingThread"); // We got the lock! Collect any pending transactions and continue. mUpdates.insert(mUpdates.end(), std::make_move_iterator(mPendingUpdates.begin()), std::make_move_iterator(mPendingUpdates.end())); Loading @@ -370,6 +378,7 @@ void TransactionTracing::tryPushToTracingThread() { void TransactionTracing::updateStartingStateLocked( const perfetto::protos::TransactionTraceEntry& removedEntry) { SFTRACE_CALL(); mStartingTimestamp = removedEntry.elapsed_realtime_nanos(); // Keep track of layer starting state so we can reconstruct the layer state as we purge // transactions from the buffer. Loading Loading @@ -410,6 +419,7 @@ void TransactionTracing::updateStartingStateLocked( std::optional<perfetto::protos::TransactionTraceEntry> TransactionTracing::createStartingStateProtoLocked() { SFTRACE_CALL(); if (mStartingStates.empty()) { return std::nullopt; } Loading Loading
services/surfaceflinger/Tracing/LayerTracing.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -192,9 +192,11 @@ void LayerTracing::writeSnapshotToStream(perfetto::protos::LayersSnapshotProto&& void LayerTracing::writeSnapshotToPerfetto(const perfetto::protos::LayersSnapshotProto& snapshot, Mode srcMode) { SFTRACE_CALL(); const auto snapshotBytes = snapshot.SerializeAsString(); LayerDataSource::Trace([&](LayerDataSource::TraceContext context) { SFTRACE_NAME("writeSnapshotToPerfetto_traceFunction"); auto dstMode = context.GetCustomTlsState()->mMode; if (srcMode == Mode::MODE_GENERATED) { // Layers snapshots produced by LayerTraceGenerator have srcMode == MODE_GENERATED Loading
services/surfaceflinger/Tracing/TransactionTracing.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define LOG_TAG "TransactionTracing" #include <android-base/stringprintf.h> #include <common/trace.h> #include <log/log.h> #include <utils/SystemClock.h> Loading Loading @@ -87,6 +88,7 @@ void TransactionTracing::onFlush(TransactionTracing::Mode mode) { void TransactionTracing::writeRingBufferToPerfetto(TransactionTracing::Mode mode) { // Write the ring buffer (starting state + following sequence of transactions) to perfetto // tracing sessions with the specified mode. SFTRACE_CALL(); const auto fileProto = writeToProto(); TransactionDataSource::Trace([&](TransactionDataSource::TraceContext context) { Loading Loading @@ -132,6 +134,7 @@ status_t TransactionTracing::writeToFile(const std::string& filename) { } perfetto::protos::TransactionTraceFile TransactionTracing::writeToProto() { SFTRACE_CALL(); std::scoped_lock<std::mutex> lock(mTraceLock); perfetto::protos::TransactionTraceFile fileProto = createTraceFileProto(); const auto startingStateProto = createStartingStateProtoLocked(); Loading Loading @@ -160,6 +163,7 @@ perfetto::protos::TransactionTraceFile TransactionTracing::createTraceFileProto( } void TransactionTracing::dump(std::string& result) const { SFTRACE_CALL(); std::scoped_lock lock(mTraceLock); base::StringAppendF(&result, " queued transactions=%zu created layers=%zu states=%zu\n", mQueuedTransactions.size(), mCreatedLayers.size(), mStartingStates.size()); Loading @@ -167,6 +171,7 @@ void TransactionTracing::dump(std::string& result) const { } void TransactionTracing::addQueuedTransaction(const QueuedTransactionState& transaction) { SFTRACE_CALL(); perfetto::protos::TransactionState* state = new perfetto::protos::TransactionState(mProtoParser.toProto(transaction)); mTransactionQueue.push(state); Loading @@ -176,6 +181,7 @@ void TransactionTracing::addCommittedTransactions(int64_t vsyncId, nsecs_t commi frontend::Update& newUpdate, const frontend::DisplayInfos& displayInfos, bool displayInfoChanged) { SFTRACE_CALL(); CommittedUpdates update; update.vsyncId = vsyncId; update.timestamp = commitTime; Loading Loading @@ -228,6 +234,7 @@ void TransactionTracing::loop() { void TransactionTracing::addEntry(const std::vector<CommittedUpdates>& committedUpdates, const std::vector<uint32_t>& destroyedLayers) { SFTRACE_CALL(); std::scoped_lock lock(mTraceLock); std::vector<std::string> removedEntries; perfetto::protos::TransactionTraceEntry entryProto; Loading Loading @@ -354,6 +361,7 @@ void TransactionTracing::onLayerRemoved(int32_t layerId) { void TransactionTracing::tryPushToTracingThread() { // Try to acquire the lock from main thread. if (mMainThreadLock.try_lock()) { SFTRACE_NAME("pushTransactionsToTracingThread"); // We got the lock! Collect any pending transactions and continue. mUpdates.insert(mUpdates.end(), std::make_move_iterator(mPendingUpdates.begin()), std::make_move_iterator(mPendingUpdates.end())); Loading @@ -370,6 +378,7 @@ void TransactionTracing::tryPushToTracingThread() { void TransactionTracing::updateStartingStateLocked( const perfetto::protos::TransactionTraceEntry& removedEntry) { SFTRACE_CALL(); mStartingTimestamp = removedEntry.elapsed_realtime_nanos(); // Keep track of layer starting state so we can reconstruct the layer state as we purge // transactions from the buffer. Loading Loading @@ -410,6 +419,7 @@ void TransactionTracing::updateStartingStateLocked( std::optional<perfetto::protos::TransactionTraceEntry> TransactionTracing::createStartingStateProtoLocked() { SFTRACE_CALL(); if (mStartingStates.empty()) { return std::nullopt; } Loading