summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWiwit Rifa'i <wiwitrifai@google.com>2023-09-14 16:15:14 +0800
committerWiwit Rifa'i <wiwitrifai@google.com>2023-09-18 20:59:23 +0800
commit578af9e67c4bcc533d0d741c7e9d2054cdfb03bb (patch)
treef05809c11b786cf60c74caeade0dc3ef68d6d51d
parentafbc2293eb633e0dbfac32d8e4ef712fc6aa94b8 (diff)
downloadzuma-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.cpp15
-rw-r--r--libhwc2.1/libresource/ExynosResourceManagerModule.h11
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;