blob: e8d4a85cf60922f51fc55875ecb1351739b3b6c2 [file]
#include "pan_pps_perf.h"
#include <lib/pan_device.h>
#include <perf/pan_perf.h>
#include <util/ralloc.h>
#include <pps/pps.h>
namespace pps
{
PanfrostDevice::PanfrostDevice(int fd)
: ctx {ralloc_context(nullptr)}
, dev {reinterpret_cast<struct panfrost_device*>(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<struct panfrost_perf *>(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