diff options
| author | 2020-07-10 19:08:57 +0000 | |
|---|---|---|
| committer | 2020-07-10 19:08:57 +0000 | |
| commit | 1feaa2a1d15a8edb3c8f0feaa3a806b3f8f16e0f (patch) | |
| tree | 1f76a90aef6f21010ddedc2fd60f72e7b86db1cf | |
| parent | 29e1ae6598404ecdaa58b19b8c28ca2145439e31 (diff) | |
| parent | a371dfa3b8d368265e6e6d5ced55d5dce6315bee (diff) | |
Merge "sf: only look for graphics frame packets when asserting on traces" into rvc-dev-plus-aosp
| -rw-r--r-- | services/surfaceflinger/tests/unittests/FrameTracerTest.cpp | 93 |
1 files changed, 37 insertions, 56 deletions
diff --git a/services/surfaceflinger/tests/unittests/FrameTracerTest.cpp b/services/surfaceflinger/tests/unittests/FrameTracerTest.cpp index 68cb52fe87..a119e27d41 100644 --- a/services/surfaceflinger/tests/unittests/FrameTracerTest.cpp +++ b/services/surfaceflinger/tests/unittests/FrameTracerTest.cpp @@ -77,6 +77,22 @@ public: return tracingSession; } + std::vector<perfetto::protos::TracePacket> readGraphicsFramePacketsBlocking( + perfetto::TracingSession* tracingSession) { + std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); + perfetto::protos::Trace trace; + EXPECT_TRUE(trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()))); + + std::vector<perfetto::protos::TracePacket> packets; + for (const auto& packet : trace.packet()) { + if (!packet.has_graphics_frame_event()) { + continue; + } + packets.emplace_back(packet); + } + return packets; + } + std::unique_ptr<FrameTracer> mFrameTracer; FenceToFenceTimeMap fenceFactory; }; @@ -142,40 +158,29 @@ TEST_F(FrameTracerTest, canTraceAfterAddingLayer) { auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); - mFrameTracer->traceTimestamp(layerId, bufferID, frameNumber, timestamp, type, duration); // Create second trace packet to finalize the previous one. mFrameTracer->traceTimestamp(layerId, 0, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - EXPECT_EQ(raw_trace.size(), 0); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 0); } { auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); - mFrameTracer->traceNewLayer(layerId, layerName); mFrameTracer->traceTimestamp(layerId, bufferID, frameNumber, timestamp, type, duration); // Create second trace packet to finalize the previous one. mFrameTracer->traceTimestamp(layerId, 0, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - ASSERT_GT(raw_trace.size(), 0); - - perfetto::protos::Trace trace; - ASSERT_TRUE(trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()))); - ASSERT_FALSE(trace.packet().empty()); - EXPECT_EQ(trace.packet().size(), 1); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 1); - const auto& packet = trace.packet().Get(0); + const auto& packet = packets[0]; ASSERT_TRUE(packet.has_timestamp()); EXPECT_EQ(packet.timestamp(), timestamp); ASSERT_TRUE(packet.has_graphics_frame_event()); @@ -205,24 +210,21 @@ TEST_F(FrameTracerTest, traceFenceTriggersOnNextTraceAfterFenceFired) { fenceFactory.signalAllForTest(Fence::NO_FENCE, Fence::SIGNAL_TIME_PENDING); auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); // Trace. mFrameTracer->traceNewLayer(layerId, layerName); mFrameTracer->traceFence(layerId, bufferID, frameNumber, fenceTime, type); // Create extra trace packet to (hopefully not) trigger and finalize the fence packet. mFrameTracer->traceTimestamp(layerId, bufferID, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - EXPECT_EQ(raw_trace.size(), 0); + + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 0); } { auto fenceTime = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE); auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); mFrameTracer->traceNewLayer(layerId, layerName); mFrameTracer->traceFence(layerId, bufferID, frameNumber, fenceTime, type); const nsecs_t timestamp = systemTime(); @@ -231,15 +233,10 @@ TEST_F(FrameTracerTest, traceFenceTriggersOnNextTraceAfterFenceFired) { mFrameTracer->traceTimestamp(layerId, bufferID, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - ASSERT_GT(raw_trace.size(), 0); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 2); // Two packets because of the extra trace made above. - perfetto::protos::Trace trace; - ASSERT_TRUE(trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()))); - ASSERT_FALSE(trace.packet().empty()); - EXPECT_EQ(trace.packet().size(), 2); // Two packets because of the extra trace made above. - - const auto& packet = trace.packet().Get(1); + const auto& packet = packets[1]; ASSERT_TRUE(packet.has_timestamp()); EXPECT_EQ(packet.timestamp(), timestamp); ASSERT_TRUE(packet.has_graphics_frame_event()); @@ -266,8 +263,6 @@ TEST_F(FrameTracerTest, traceFenceWithStartTimeAfterSignalTime_ShouldHaveNoDurat auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); mFrameTracer->traceNewLayer(layerId, layerName); // traceFence called after fence signalled. @@ -288,22 +283,17 @@ TEST_F(FrameTracerTest, traceFenceWithStartTimeAfterSignalTime_ShouldHaveNoDurat mFrameTracer->traceTimestamp(layerId, bufferID, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - ASSERT_GT(raw_trace.size(), 0); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 2); - perfetto::protos::Trace trace; - ASSERT_TRUE(trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()))); - ASSERT_FALSE(trace.packet().empty()); - EXPECT_EQ(trace.packet().size(), 2); - - const auto& packet1 = trace.packet().Get(0); + const auto& packet1 = packets[0]; ASSERT_TRUE(packet1.has_timestamp()); EXPECT_EQ(packet1.timestamp(), signalTime1); ASSERT_TRUE(packet1.has_graphics_frame_event()); ASSERT_TRUE(packet1.graphics_frame_event().has_buffer_event()); ASSERT_FALSE(packet1.graphics_frame_event().buffer_event().has_duration_ns()); - const auto& packet2 = trace.packet().Get(1); + const auto& packet2 = packets[1]; ASSERT_TRUE(packet2.has_timestamp()); EXPECT_EQ(packet2.timestamp(), signalTime2); ASSERT_TRUE(packet2.has_graphics_frame_event()); @@ -323,8 +313,6 @@ TEST_F(FrameTracerTest, traceFenceOlderThanDeadline_ShouldBeIgnored) { auto fence = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); mFrameTracer->traceNewLayer(layerId, layerName); mFrameTracer->traceFence(layerId, bufferID, frameNumber, fence, type); fenceFactory.signalAllForTest(Fence::NO_FENCE, signalTime); @@ -332,8 +320,8 @@ TEST_F(FrameTracerTest, traceFenceOlderThanDeadline_ShouldBeIgnored) { mFrameTracer->traceTimestamp(layerId, bufferID, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - EXPECT_EQ(raw_trace.size(), 0); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 0); } TEST_F(FrameTracerTest, traceFenceWithValidStartTime_ShouldHaveCorrectDuration) { @@ -347,8 +335,6 @@ TEST_F(FrameTracerTest, traceFenceWithValidStartTime_ShouldHaveCorrectDuration) auto tracingSession = getTracingSessionForTest(); tracingSession->StartBlocking(); - // Clean up irrelevant traces. - tracingSession->ReadTraceBlocking(); mFrameTracer->traceNewLayer(layerId, layerName); // traceFence called after fence signalled. @@ -369,15 +355,10 @@ TEST_F(FrameTracerTest, traceFenceWithValidStartTime_ShouldHaveCorrectDuration) mFrameTracer->traceTimestamp(layerId, bufferID, 0, 0, FrameTracer::FrameEvent::UNSPECIFIED); tracingSession->StopBlocking(); - std::vector<char> raw_trace = tracingSession->ReadTraceBlocking(); - ASSERT_GT(raw_trace.size(), 0); - - perfetto::protos::Trace trace; - ASSERT_TRUE(trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()))); - ASSERT_FALSE(trace.packet().empty()); - EXPECT_EQ(trace.packet().size(), 2); + auto packets = readGraphicsFramePacketsBlocking(tracingSession.get()); + EXPECT_EQ(packets.size(), 2); - const auto& packet1 = trace.packet().Get(0); + const auto& packet1 = packets[0]; ASSERT_TRUE(packet1.has_timestamp()); EXPECT_EQ(packet1.timestamp(), startTime1); ASSERT_TRUE(packet1.has_graphics_frame_event()); @@ -386,7 +367,7 @@ TEST_F(FrameTracerTest, traceFenceWithValidStartTime_ShouldHaveCorrectDuration) const auto& buffer_event1 = packet1.graphics_frame_event().buffer_event(); EXPECT_EQ(buffer_event1.duration_ns(), duration); - const auto& packet2 = trace.packet().Get(1); + const auto& packet2 = packets[1]; ASSERT_TRUE(packet2.has_timestamp()); EXPECT_EQ(packet2.timestamp(), startTime2); ASSERT_TRUE(packet2.has_graphics_frame_event()); |