diff options
author | Wiwit Rifa'i <wiwitrifai@google.com> | 2023-09-14 16:15:14 +0800 |
---|---|---|
committer | Wiwit Rifa'i <wiwitrifai@google.com> | 2023-09-18 20:59:23 +0800 |
commit | 578af9e67c4bcc533d0d741c7e9d2054cdfb03bb (patch) | |
tree | f05809c11b786cf60c74caeade0dc3ef68d6d51d | |
parent | afbc2293eb633e0dbfac32d8e4ef712fc6aa94b8 (diff) | |
download | zuma-578af9e67c4bcc533d0d741c7e9d2054cdfb03bb.tar.gz |
libhwc2.1: change small std::map to std::array
Constructing and accessing a map are more expensive than a fixed-size
array for small container with small indices.
Bug: 295892886
Test: trigger assignResource using hwc-tester & check simpleperf
Change-Id: I9b059a4de276f9906e9361dff6520628965054ae
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManagerModule.cpp | 15 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManagerModule.h | 11 |
2 files changed, 12 insertions, 14 deletions
diff --git a/libhwc2.1/libresource/ExynosResourceManagerModule.cpp b/libhwc2.1/libresource/ExynosResourceManagerModule.cpp index c2befbd..859eb48 100644 --- a/libhwc2.1/libresource/ExynosResourceManagerModule.cpp +++ b/libhwc2.1/libresource/ExynosResourceManagerModule.cpp @@ -54,8 +54,8 @@ ExynosResourceManagerModule::~ExynosResourceManagerModule() {} bool ExynosResourceManagerModule::checkTDMResource(ExynosDisplay *display, ExynosMPP *currentMPP, ExynosMPPSource *mppSrc) { - std::map<tdm_attr_t, uint32_t> accumulatedDPUFAmount; - std::map<tdm_attr_t, uint32_t> accumulatedDPUFAXIAmount; + std::array<uint32_t, TDM_ATTR_MAX> accumulatedDPUFAmount{}; + std::array<uint32_t, TDM_ATTR_MAX> accumulatedDPUFAXIAmount{}; const uint32_t blkId = currentMPP->getHWBlockId(); const uint32_t axiId = currentMPP->getAXIPortId(); HDEBUGLOGD(eDebugTDM, "%s : %p trying to assign to %s, compare with layers", __func__, @@ -606,12 +606,11 @@ bool ExynosResourceManagerModule::isOverlapped(ExynosDisplay *display, ExynosMPP return false; } -uint32_t ExynosResourceManagerModule::getAmounts(ExynosDisplay *display, - uint32_t currentBlockId, uint32_t currentAXIId, - ExynosMPP *compOtfMPP, - ExynosMPPSource *curSrc, ExynosMPPSource *compSrc, - std::map<tdm_attr_t, uint32_t> &DPUFAmounts, - std::map<tdm_attr_t, uint32_t> &AXIAmounts) { +uint32_t ExynosResourceManagerModule::getAmounts(ExynosDisplay* display, uint32_t currentBlockId, + uint32_t currentAXIId, ExynosMPP* compOtfMPP, + ExynosMPPSource* curSrc, ExynosMPPSource* compSrc, + std::array<uint32_t, TDM_ATTR_MAX>& DPUFAmounts, + std::array<uint32_t, TDM_ATTR_MAX>& AXIAmounts) { const uint32_t blockId = compOtfMPP->getHWBlockId(); const uint32_t AXIId = compOtfMPP->getAXIPortId(); if (currentBlockId == blockId && isOverlapped(display, curSrc, compSrc)) { diff --git a/libhwc2.1/libresource/ExynosResourceManagerModule.h b/libhwc2.1/libresource/ExynosResourceManagerModule.h index eb20259..cf6c4fe 100644 --- a/libhwc2.1/libresource/ExynosResourceManagerModule.h +++ b/libhwc2.1/libresource/ExynosResourceManagerModule.h @@ -37,12 +37,11 @@ class ExynosResourceManagerModule : public gs201::ExynosResourceManagerModule { bool isOverlapped(ExynosDisplay *display, ExynosMPPSource *current, ExynosMPPSource *compare); - uint32_t getAmounts(ExynosDisplay *display, - uint32_t currentBlockId, uint32_t currentAXIId, - ExynosMPP *compOtfMPP, - ExynosMPPSource *curSrc, ExynosMPPSource *compSrc, - std::map<tdm_attr_t, uint32_t> &DPUFAmounts, - std::map<tdm_attr_t, uint32_t> &AXIAmounts); + uint32_t getAmounts(ExynosDisplay* display, uint32_t currentBlockId, uint32_t currentAXIId, + ExynosMPP* compOtfMPP, ExynosMPPSource* curSrc, + ExynosMPPSource* compSrc, + std::array<uint32_t, TDM_ATTR_MAX>& DPUFAmounts, + std::array<uint32_t, TDM_ATTR_MAX>& AXIAmounts); bool checkTDMResource(ExynosDisplay *display, ExynosMPP *currentMPP, ExynosMPPSource *mppSrc); const std::map<HWResourceIndexes, HWResourceAmounts_t> *mHWResourceTables = nullptr; |