diff options
| author | 2022-01-13 08:10:10 -0800 | |
|---|---|---|
| committer | 2022-01-19 16:58:02 -0800 | |
| commit | b8f2a2d5ada9bed7e430b3a5f64fa79e376ab905 (patch) | |
| tree | afb8d4133e92a51aefa561d7f4dcfe8a85fcb4be | |
| parent | 858a3b4c8dfa03a5952cad4b0b695ee2cb4c31e8 (diff) | |
SF: Only create a starting entry if there are starting states
Test: atest TransactionTracingTest
Bug: 200284593
Change-Id: Ie260fb094117ec754778f8277602d10df6606fb2
| -rw-r--r-- | services/surfaceflinger/Tracing/TransactionTracing.cpp | 12 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp | 21 |
2 files changed, 17 insertions, 16 deletions
diff --git a/services/surfaceflinger/Tracing/TransactionTracing.cpp b/services/surfaceflinger/Tracing/TransactionTracing.cpp index 5136295592..a46b79578f 100644 --- a/services/surfaceflinger/Tracing/TransactionTracing.cpp +++ b/services/surfaceflinger/Tracing/TransactionTracing.cpp @@ -128,7 +128,9 @@ void TransactionTracing::loop() { mCommittedTransactions.clear(); } // unlock mMainThreadLock - addEntry(committedTransactions, removedLayers); + if (!committedTransactions.empty() || !removedLayers.empty()) { + addEntry(committedTransactions, removedLayers); + } } } @@ -275,6 +277,7 @@ int32_t TransactionTracing::getLayerIdLocked(const sp<IBinder>& layerHandle) { void TransactionTracing::updateStartingStateLocked( const proto::TransactionTraceEntry& removedEntry) { + 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. for (const proto::LayerCreationArgs& addedLayer : removedEntry.added_layers()) { @@ -303,13 +306,14 @@ void TransactionTracing::updateStartingStateLocked( } void TransactionTracing::addStartingStateToProtoLocked(proto::TransactionTraceFile& proto) { - proto::TransactionTraceEntry* entryProto = proto.add_entry(); - entryProto->set_elapsed_realtime_nanos(mStartingTimestamp); - entryProto->set_vsync_id(0); if (mStartingStates.size() == 0) { return; } + proto::TransactionTraceEntry* entryProto = proto.add_entry(); + entryProto->set_elapsed_realtime_nanos(mStartingTimestamp); + entryProto->set_vsync_id(0); + entryProto->mutable_added_layers()->Reserve(static_cast<int32_t>(mStartingStates.size())); for (auto& [layerId, state] : mStartingStates) { entryProto->mutable_added_layers()->Add(TransactionProtoParser::toProto(state.args)); diff --git a/services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp b/services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp index 5ac581288e..39dbb07653 100644 --- a/services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp +++ b/services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp @@ -91,10 +91,9 @@ TEST_F(TransactionTracingTest, addTransactions) { flush(secondTransactionSetVsyncId); proto::TransactionTraceFile proto = writeToProto(); - EXPECT_EQ(proto.entry().size(), 3); - // skip starting entry - verifyEntry(proto.entry(1), firstTransactionSet, firstTransactionSetVsyncId); - verifyEntry(proto.entry(2), secondTransactionSet, secondTransactionSetVsyncId); + EXPECT_EQ(proto.entry().size(), 2); + verifyEntry(proto.entry(0), firstTransactionSet, firstTransactionSetVsyncId); + verifyEntry(proto.entry(1), secondTransactionSet, secondTransactionSetVsyncId); } class TransactionTracingLayerHandlingTest : public TransactionTracingTest { @@ -274,15 +273,13 @@ protected: TEST_F(TransactionTracingMirrorLayerTest, canAddMirrorLayers) { proto::TransactionTraceFile proto = writeToProto(); // We don't have any starting states since no layer was removed from. - EXPECT_EQ(proto.entry().size(), 2); - EXPECT_EQ(proto.entry(0).transactions().size(), 0); - EXPECT_EQ(proto.entry(0).added_layers().size(), 0); + EXPECT_EQ(proto.entry().size(), 1); // Verify the mirror layer was added - EXPECT_EQ(proto.entry(1).transactions().size(), 1); - EXPECT_EQ(proto.entry(1).added_layers().size(), 2); - EXPECT_EQ(proto.entry(1).added_layers(1).layer_id(), mMirrorLayerId); - EXPECT_EQ(proto.entry(1).transactions(0).layer_changes().size(), 2); - EXPECT_EQ(proto.entry(1).transactions(0).layer_changes(1).z(), 43); + EXPECT_EQ(proto.entry(0).transactions().size(), 1); + EXPECT_EQ(proto.entry(0).added_layers().size(), 2); + EXPECT_EQ(proto.entry(0).added_layers(1).layer_id(), mMirrorLayerId); + EXPECT_EQ(proto.entry(0).transactions(0).layer_changes().size(), 2); + EXPECT_EQ(proto.entry(0).transactions(0).layer_changes(1).z(), 43); } } // namespace android |