sdm: Destroy singleton DRMMaster instance
Destroy singleton DRMMaster instance on teardown, this is important
for back to back API test runs
Change-Id: I27e5d2adcc9d0805281dd0c858eaed5af745b269
CRs-fixed: 1114808
diff --git a/libdrmutils/drm_master.cpp b/libdrmutils/drm_master.cpp
index 239ec4c..e12b933 100644
--- a/libdrmutils/drm_master.cpp
+++ b/libdrmutils/drm_master.cpp
@@ -73,6 +73,12 @@
return 0;
}
+void DRMMaster::DestroyInstance() {
+ lock_guard<mutex> obj(s_lock);
+ delete s_instance;
+ s_instance = nullptr;
+}
+
int DRMMaster::Init() {
dev_fd_ = drmOpen("msm_drm", nullptr);
if (dev_fd_ < 0) {
diff --git a/libdrmutils/drm_master.h b/libdrmutils/drm_master.h
index 8c32a1b..15fae68 100644
--- a/libdrmutils/drm_master.h
+++ b/libdrmutils/drm_master.h
@@ -79,6 +79,7 @@
* -ENODEV if device cannot be opened or initilization fails
*/
static int GetInstance(DRMMaster **master);
+ static void DestroyInstance();
private:
DRMMaster() {}
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index d41206f..2fdef4e 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -117,6 +117,9 @@
DRMLibLoader::GetInstance()->FuncDestroyDRMManager()();
drm_mgr_intf_ = nullptr;
}
+
+ DRMLibLoader::Destroy();
+ DRMMaster::DestroyInstance();
}
DisplayError HWInfoDRM::GetDynamicBWLimits(HWResourceInfo *hw_resource) {
@@ -390,17 +393,13 @@
void HWInfoDRM::GetRotatorFormatsForType(int fd, uint32_t type,
vector<LayerBufferFormat> *supported_formats) {
- int ret = 0;
struct v4l2_fmtdesc fmtdesc = {};
fmtdesc.type = type;
- while (!ret) {
- ret = Sys::ioctl_(fd, static_cast<int>(VIDIOC_ENUM_FMT), &fmtdesc);
- if (!ret) {
- LayerBufferFormat sdm_format = kFormatInvalid;
- GetSDMFormat(fmtdesc.pixelformat, &sdm_format);
- if (sdm_format != kFormatInvalid) {
- supported_formats->push_back(sdm_format);
- }
+ while (!Sys::ioctl_(fd, static_cast<int>(VIDIOC_ENUM_FMT), &fmtdesc)) {
+ LayerBufferFormat sdm_format = kFormatInvalid;
+ GetSDMFormat(fmtdesc.pixelformat, &sdm_format);
+ if (sdm_format != kFormatInvalid) {
+ supported_formats->push_back(sdm_format);
}
fmtdesc.index++;
}
@@ -432,9 +431,8 @@
DisplayError HWInfoDRM::GetHWRotatorInfo(HWResourceInfo *hw_resource) {
const uint32_t kMaxV4L2Nodes = 64;
- bool found = false;
- for (uint32_t i = 0; (i < kMaxV4L2Nodes) && (false == found); i++) {
+ for (uint32_t i = 0; i < kMaxV4L2Nodes; i++) {
string path = "/sys/class/video4linux/video" + to_string(i) + "/name";
Sys::fstream fs(path, fstream::in);
if (!fs.is_open()) {
@@ -447,9 +445,9 @@
hw_resource->hw_rot_info.num_rotator++;
hw_resource->hw_rot_info.type = HWRotatorInfo::ROT_TYPE_V4L2;
hw_resource->hw_rot_info.has_downscale = true;
- // We support only 1 rotator
- found = true;
GetRotatorSupportedFormats(i, hw_resource);
+ // We support only 1 rotator
+ break;
}
}