#include "pan_pps_perf.h" #include #include #include #include namespace pps { PanfrostDevice::PanfrostDevice(int fd) : ctx {ralloc_context(nullptr)} , dev {reinterpret_cast(new struct panfrost_device())} { assert(fd >= 0); panfrost_open_device(ctx, fd, dev); } PanfrostDevice::~PanfrostDevice() { if (ctx) { panfrost_close_device(dev); } if (dev) { delete dev; } } PanfrostDevice::PanfrostDevice(PanfrostDevice &&o) : ctx {o.ctx} , dev {o.dev} { o.ctx = nullptr; o.dev = nullptr; } PanfrostDevice &PanfrostDevice::operator=(PanfrostDevice &&o) { std::swap(ctx, o.ctx); std::swap(dev, o.dev); return *this; } PanfrostPerf::PanfrostPerf(const PanfrostDevice& dev) : perf {reinterpret_cast(rzalloc(nullptr, struct panfrost_perf))} { assert(perf); assert(dev.dev); panfrost_perf_init(perf, dev.dev); } PanfrostPerf::~PanfrostPerf() { if (perf) { panfrost_perf_disable(perf); ralloc_free(perf); } } PanfrostPerf::PanfrostPerf(PanfrostPerf &&o) : perf {o.perf} { o.perf = nullptr; } PanfrostPerf &PanfrostPerf::operator=(PanfrostPerf &&o) { std::swap(perf, o.perf); return *this; } int PanfrostPerf::enable() const { assert(perf); return panfrost_perf_enable(perf); } void PanfrostPerf::disable() const { assert(perf); panfrost_perf_disable(perf); } int PanfrostPerf::dump() const { assert(perf); return panfrost_perf_dump(perf); } } // namespace pps