17ec681f3Smrg#include "pan_pps_perf.h" 27ec681f3Smrg 37ec681f3Smrg#include <lib/pan_device.h> 47ec681f3Smrg#include <perf/pan_perf.h> 57ec681f3Smrg#include <util/ralloc.h> 67ec681f3Smrg#include <pps/pps.h> 77ec681f3Smrg 87ec681f3Smrgnamespace pps 97ec681f3Smrg{ 107ec681f3SmrgPanfrostDevice::PanfrostDevice(int fd) 117ec681f3Smrg : ctx {ralloc_context(nullptr)} 127ec681f3Smrg , dev {reinterpret_cast<struct panfrost_device*>(new struct panfrost_device())} 137ec681f3Smrg{ 147ec681f3Smrg assert(fd >= 0); 157ec681f3Smrg panfrost_open_device(ctx, fd, dev); 167ec681f3Smrg} 177ec681f3Smrg 187ec681f3SmrgPanfrostDevice::~PanfrostDevice() 197ec681f3Smrg{ 207ec681f3Smrg if (ctx) { 217ec681f3Smrg panfrost_close_device(dev); 227ec681f3Smrg } 237ec681f3Smrg if (dev) { 247ec681f3Smrg delete dev; 257ec681f3Smrg } 267ec681f3Smrg} 277ec681f3Smrg 287ec681f3SmrgPanfrostDevice::PanfrostDevice(PanfrostDevice &&o) 297ec681f3Smrg : ctx {o.ctx} 307ec681f3Smrg , dev {o.dev} 317ec681f3Smrg{ 327ec681f3Smrg o.ctx = nullptr; 337ec681f3Smrg o.dev = nullptr; 347ec681f3Smrg} 357ec681f3Smrg 367ec681f3SmrgPanfrostDevice &PanfrostDevice::operator=(PanfrostDevice &&o) 377ec681f3Smrg{ 387ec681f3Smrg std::swap(ctx, o.ctx); 397ec681f3Smrg std::swap(dev, o.dev); 407ec681f3Smrg return *this; 417ec681f3Smrg} 427ec681f3Smrg 437ec681f3SmrgPanfrostPerf::PanfrostPerf(const PanfrostDevice& dev) 447ec681f3Smrg : perf {reinterpret_cast<struct panfrost_perf *>(rzalloc(nullptr, struct panfrost_perf))} 457ec681f3Smrg{ 467ec681f3Smrg assert(perf); 477ec681f3Smrg assert(dev.dev); 487ec681f3Smrg panfrost_perf_init(perf, dev.dev); 497ec681f3Smrg} 507ec681f3Smrg 517ec681f3SmrgPanfrostPerf::~PanfrostPerf() 527ec681f3Smrg{ 537ec681f3Smrg if (perf) { 547ec681f3Smrg panfrost_perf_disable(perf); 557ec681f3Smrg ralloc_free(perf); 567ec681f3Smrg } 577ec681f3Smrg} 587ec681f3Smrg 597ec681f3SmrgPanfrostPerf::PanfrostPerf(PanfrostPerf &&o) 607ec681f3Smrg : perf {o.perf} 617ec681f3Smrg{ 627ec681f3Smrg o.perf = nullptr; 637ec681f3Smrg} 647ec681f3Smrg 657ec681f3SmrgPanfrostPerf &PanfrostPerf::operator=(PanfrostPerf &&o) 667ec681f3Smrg{ 677ec681f3Smrg std::swap(perf, o.perf); 687ec681f3Smrg return *this; 697ec681f3Smrg} 707ec681f3Smrg 717ec681f3Smrgint PanfrostPerf::enable() const 727ec681f3Smrg{ 737ec681f3Smrg assert(perf); 747ec681f3Smrg return panfrost_perf_enable(perf); 757ec681f3Smrg} 767ec681f3Smrg 777ec681f3Smrgvoid PanfrostPerf::disable() const 787ec681f3Smrg{ 797ec681f3Smrg assert(perf); 807ec681f3Smrg panfrost_perf_disable(perf); 817ec681f3Smrg} 827ec681f3Smrg 837ec681f3Smrgint PanfrostPerf::dump() const 847ec681f3Smrg{ 857ec681f3Smrg assert(perf); 867ec681f3Smrg return panfrost_perf_dump(perf); 877ec681f3Smrg} 887ec681f3Smrg 897ec681f3Smrg} // namespace pps 90