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

Commit aa51651e 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
parent 8694d14b
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ cc_test {
    ],
    ],
    static_libs: [
    static_libs: [
        "libgmock",
        "libgmock",
        "libperfetto_client_experimental",
        "perfetto_trace_protos",
        "perfetto_trace_protos",
    ],
    ],
    require_root: true,
    require_root: true,
+18 −2
Original line number Original line Diff line number Diff line
@@ -75,6 +75,22 @@ public:


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


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


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


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


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


#include <thread>
#include <thread>
@@ -63,22 +62,6 @@ void GpuMemTracer::initializeForTest(std::shared_ptr<GpuMem> gpuMem) {
    tracerThreadCount++;
    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.
// Each tracing session can be used for a single block of Start -> Stop.
std::unique_ptr<perfetto::TracingSession> GpuMemTracer::getTracingSessionForTest() {
std::unique_ptr<perfetto::TracingSession> GpuMemTracer::getTracingSessionForTest() {
    perfetto::TraceConfig cfg;
    perfetto::TraceConfig cfg;