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

Commit 45583460 authored by Adithya Srinivasan's avatar Adithya Srinivasan
Browse files

Remove gpumemtracer bloat

The size of gpuservice regressed while adding perfetto trace functions
inside GpuMemTracer for unittests. This change fixes the regression by
moving readPackets into the unittest, thereby removing the need to
include some libraries in gpumemtracer.so

Bug: 175904796
Test: atest gpuservice_unittest:GpuMemTracerTest
Change-Id: Ifaafdbfb24f8c51712276ef7efd645ce43c987f4
Merged-In: Ifaafdbfb24f8c51712276ef7efd645ce43c987f4
parent 134332b6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ cc_test {
    ],
    static_libs: [
        "libgmock",
        "libperfetto_client_experimental",
        "perfetto_trace_protos",
    ],
    require_root: true,
+18 −2
Original line number Diff line number Diff line
@@ -75,6 +75,22 @@ public:

    int getTracerThreadCount() { return mGpuMemTracer->tracerThreadCount; }

    std::vector<perfetto::protos::TracePacket> readGpuMemTotalPacketsBlocking(
            perfetto::TracingSession* tracingSession) {
        std::vector<char> raw_trace = tracingSession->ReadTraceBlocking();
        perfetto::protos::Trace trace;
        trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()));

        std::vector<perfetto::protos::TracePacket> packets;
        for (const auto& packet : trace.packet()) {
            if (!packet.has_gpu_mem_total_event()) {
                continue;
            }
            packets.emplace_back(packet);
        }
        return packets;
    }

    std::shared_ptr<GpuMem> mGpuMem;
    TestableGpuMem mTestableGpuMem;
    std::unique_ptr<GpuMemTracer> mGpuMemTracer;
@@ -125,7 +141,7 @@ TEST_F(GpuMemTracerTest, traceInitialCountersAfterGpuMemInitialize) {
    // The test tracer thread should have finished its execution by now.
    EXPECT_EQ(getTracerThreadCount(), 0);

    auto packets = mGpuMemTracer->readGpuMemTotalPacketsForTestBlocking(tracingSession.get());
    auto packets = readGpuMemTotalPacketsBlocking(tracingSession.get());
    EXPECT_EQ(packets.size(), 3);

    const auto& packet0 = packets[0];
@@ -176,7 +192,7 @@ TEST_F(GpuMemTracerTest, noTracingWithoutGpuMemInitialize) {
    // The test tracer thread should have finished its execution by now.
    EXPECT_EQ(getTracerThreadCount(), 0);

    auto packets = mGpuMemTracer->readGpuMemTotalPacketsForTestBlocking(tracingSession.get());
    auto packets = readGpuMemTotalPacketsBlocking(tracingSession.get());
    EXPECT_EQ(packets.size(), 0);
}
} // namespace android
+0 −3
Original line number Diff line number Diff line
@@ -21,13 +21,10 @@ cc_library_shared {
        "libgpumem",
        "libbase",
        "liblog",
        "libprotobuf-cpp-lite",
        "libprotoutil",
        "libutils",
    ],
    static_libs: [
        "libperfetto_client_experimental",
        "perfetto_trace_protos",
    ],
    export_include_dirs: ["include"],
    export_static_lib_headers: [
+0 −17
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@

#include <gpumem/GpuMem.h>
#include <perfetto/trace/android/gpu_mem_event.pbzero.h>
#include <perfetto/trace/trace.pb.h>
#include <unistd.h>

#include <thread>
@@ -63,22 +62,6 @@ void GpuMemTracer::initializeForTest(std::shared_ptr<GpuMem> gpuMem) {
    tracerThreadCount++;
}

std::vector<perfetto::protos::TracePacket> GpuMemTracer::readGpuMemTotalPacketsForTestBlocking(
        perfetto::TracingSession* tracingSession) {
    std::vector<char> raw_trace = tracingSession->ReadTraceBlocking();
    perfetto::protos::Trace trace;
    trace.ParseFromArray(raw_trace.data(), int(raw_trace.size()));

    std::vector<perfetto::protos::TracePacket> packets;
    for (const auto& packet : trace.packet()) {
        if (!packet.has_gpu_mem_total_event()) {
            continue;
        }
        packets.emplace_back(packet);
    }
    return packets;
}

// Each tracing session can be used for a single block of Start -> Stop.
std::unique_ptr<perfetto::TracingSession> GpuMemTracer::getTracingSessionForTest() {
    perfetto::TraceConfig cfg;