From 3dda34cf983627160210636379ae82b722a66f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E9=B9=8F=E8=BE=89?= Date: Thu, 4 Sep 2025 21:30:45 +0800 Subject: [PATCH 1/3] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 梁鹏辉 --- .../display_command/display_cmd_requester.h | 95 ++++++++++++++++++- .../v1_0/display_command/display_cmd_utils.h | 6 +- .../display_command/display_cmd_requester.h | 9 +- .../v1_2/display_command/display_cmd_utils.h | 2 + 4 files changed, 107 insertions(+), 5 deletions(-) diff --git a/display/composer/v1_0/display_command/display_cmd_requester.h b/display/composer/v1_0/display_command/display_cmd_requester.h index 5137c0a4..d7400d83 100755 --- a/display/composer/v1_0/display_command/display_cmd_requester.h +++ b/display/composer/v1_0/display_command/display_cmd_requester.h @@ -100,6 +100,7 @@ public: { uint32_t replyEleCnt; std::vector outFds; + size_t writePos = requestPacker_.ValidSize(); int32_t ret = CmdUtils::StartSection(REQUEST_CMD_PREPARE_DISPLAY_LAYERS, requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -110,6 +111,8 @@ public: ret = CmdUtils::EndSection(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); + ReqStatistic(devId, REQUEST_CMD_PREPARE_DISPLAY_LAYERS, writePos); + ret = CmdUtils::EndPack(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -166,6 +169,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_DISPLAY_CLIENT_BUFFER, writePos); return HDF_SUCCESS; } @@ -207,6 +212,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_DISPLAY_CLIENT_DAMAGE, writePos); return HDF_SUCCESS; } @@ -214,6 +221,7 @@ EXIT: { uint32_t replyEleCnt = 0; std::vector outFds; + size_t writePos = requestPacker_.ValidSize(); int32_t ret = CmdUtils::StartSection(REQUEST_CMD_COMMIT, requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -224,6 +232,8 @@ EXIT: ret = CmdUtils::EndSection(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); + ReqStatistic(devId, REQUEST_CMD_COMMIT, writePos); + ret = CmdUtils::EndPack(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -287,6 +297,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_ALPHA, writePos); return HDF_SUCCESS; } @@ -318,6 +330,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_REGION, writePos); return HDF_SUCCESS; } @@ -349,6 +363,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_CROP, writePos); return HDF_SUCCESS; } @@ -381,6 +397,7 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_ZORDER, writePos); return HDF_SUCCESS; } @@ -414,6 +431,7 @@ EXIT: return HDF_FAILURE; } + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_PREMULTI, writePos); return HDF_SUCCESS; } @@ -446,6 +464,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_TRANSFORM_MODE, writePos); return HDF_SUCCESS; } @@ -486,6 +506,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_DIRTY_REGION, writePos); return HDF_SUCCESS; } @@ -526,6 +548,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_VISIBLE_REGION, writePos); return HDF_SUCCESS; } @@ -581,6 +605,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_BUFFER, writePos); return HDF_SUCCESS; } @@ -613,6 +639,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_COMPOSITION_TYPE, writePos); return HDF_SUCCESS; } @@ -645,6 +673,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_BLEND_TYPE, writePos); return HDF_SUCCESS; } @@ -677,6 +707,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_MASK_INFO, writePos); return HDF_SUCCESS; } @@ -708,6 +740,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_LAYER_COLOR, writePos); return HDF_SUCCESS; } @@ -876,8 +910,14 @@ protected: uint32_t eleCnt = requestPacker_.ValidSize() >> CmdUtils::MOVE_SIZE; int32_t ret = request_->Write( reinterpret_cast(requestPacker_.GetDataPtr()), eleCnt, CmdUtils::TRANSFER_WAIT_TIME); - DISPLAY_CHK_RETURN(ret != HDF_SUCCESS, ret, - HDF_LOGE("%{public}s: CmdRequest write failed", __func__)); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%{public}s: CmdRequest write failed, ret=[%{public}d], eleCnt=[%{public}u]", + __func__, ret, eleCnt); + ReqCmdDump(); + reqCmdMaps.clear(); + return ret; + } + reqCmdMaps.clear(); ret = hdi_->CmdRequest(eleCnt, requestHdiFds_, replyEleCnt, outFds); DISPLAY_CHK_RETURN(ret != HDF_SUCCESS, ret, @@ -894,6 +934,7 @@ protected: return ret; } +protected: int32_t PeriodDataReset() { for (uint32_t i = 0; i < requestHdiFds_.size(); ++i) { @@ -903,6 +944,7 @@ protected: } } requestHdiFds_.clear(); + reqCmdMaps.clear(); int32_t ret = CmdUtils::StartPack(CONTROL_CMD_REQUEST_BEGIN, requestPacker_); DISPLAY_CHK_RETURN(ret != HDF_SUCCESS, ret, HDF_LOGE("%{public}s: StartPack failed", __func__)); @@ -910,7 +952,52 @@ protected: return HDF_SUCCESS; } -protected: + struct ReqCmdInfo { + uint32_t count = 0; + uint32_t len = 0; + }; + + static inline ReqCmdInfo GetFirstCmdInfo(size_t writeLen) + { + return ReqCmdInfo { + .count = 1, + .len = static_cast(writeLen) + }; + } + + void ReqStatistic(uint32_t devId, int32_t cmdId, size_t writePos) + { + size_t writeLen = requestPacker_.ValidSize() - writePos; + + auto iterDev = reqCmdMaps.find(devId); + if (iterDev == reqCmdMaps.end()) { + reqCmdMaps.insert({devId, {{cmdId, GetFirstCmdInfo(writeLen)}}}); + return; + } + + auto iterCmd = iterDev->second.find(cmdId); + if (iterCmd == iterDev->second.end()) { + iterDev->second.insert({cmdId, GetFirstCmdInfo(writeLen)}); + return; + } + + iterCmd->second.count++; + iterCmd->second.len += writeLen; + } + + void ReqCmdDump() + { + HDF_LOGW("@ DevId | count | len | cmdId \n"); + HDF_LOGW("@ -------+-------+-------+--------------------------------------------------\n"); + for (auto iterDev = reqCmdMaps.begin(); iterDev != reqCmdMaps.end(); iterDev++) { + for (auto iterCmdInfo = iterDev->second.begin(); iterCmdInfo != iterDev->second.end(); iterCmdInfo++) { + HDF_LOGW("@ %{public}u | %{public}u | %{public}u | %{public}s \n", + iterDev->first, iterCmdInfo->second.count, iterCmdInfo->second.len, + CmdUtils::CommandToString(iterCmdInfo->first)); + } + } + } + bool initFlag_; sptr hdi_; std::shared_ptr request_; @@ -922,6 +1009,8 @@ protected: // Composition layers/types changed std::unordered_map> compChangeLayers_; std::unordered_map> compChangeTypes_; + // devId: [cmdId: (count, len)] + std::unordered_map> reqCmdMaps = {}; }; using HdiDisplayCmdRequester = DisplayCmdRequester, IDisplayComposer>; } // namespace V1_0 diff --git a/display/composer/v1_0/display_command/display_cmd_utils.h b/display/composer/v1_0/display_command/display_cmd_utils.h index f9c1f763..bca209ad 100644 --- a/display/composer/v1_0/display_command/display_cmd_utils.h +++ b/display/composer/v1_0/display_command/display_cmd_utils.h @@ -20,7 +20,7 @@ #include "command_pack/command_data_packer.h" #include "command_pack/command_data_unpacker.h" #include "common/include/display_interface_utils.h" -#include "v1_0/display_composer_type.h" +#include "v1_2/display_composer_type.h" #undef LOG_TAG #define LOG_TAG "DISP_CMD" @@ -69,6 +69,10 @@ public: SWITCHCASE(REQUEST_CMD_SET_LAYER_VISIBLE); SWITCHCASE(REQUEST_CMD_SET_LAYER_MASK_INFO); SWITCHCASE(REQUEST_CMD_SET_LAYER_COLOR); + SWITCHCASE(V1_2::REQUEST_CMD_COMMIT_AND_GET_RELEASE_FENCE); + SWITCHCASE(V1_2::REQUEST_CMD_SET_DISPLAY_CONSTRAINT); + SWITCHCASE(V1_2::REQUEST_CMD_SET_LAYER_PERFRAME_PARAM); + SWITCHCASE(V1_2::REQUEST_CMD_SET_DISPLAY_PERFRAME_PARAM); /* reply cmd */ SWITCHCASE(REPLY_CMD_SET_ERROR); SWITCHCASE(REPLY_CMD_PREPARE_DISPLAY_LAYERS); diff --git a/display/composer/v1_2/display_command/display_cmd_requester.h b/display/composer/v1_2/display_command/display_cmd_requester.h index b7bf3701..85297ac5 100644 --- a/display/composer/v1_2/display_command/display_cmd_requester.h +++ b/display/composer/v1_2/display_command/display_cmd_requester.h @@ -52,6 +52,7 @@ public: { uint32_t replyEleCnt = 0; std::vector outFds; + size_t writePos = requestPacker_.ValidSize(); int32_t ret = CmdUtils::StartSection(REQUEST_CMD_COMMIT_AND_GET_RELEASE_FENCE, requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -68,6 +69,8 @@ public: ret = CmdUtils::EndSection(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); + ReqStatistic(devId, REQUEST_CMD_COMMIT_AND_GET_RELEASE_FENCE, writePos); + ret = CmdUtils::EndPack(requestPacker_); DISPLAY_CHECK(ret != HDF_SUCCESS, goto EXIT); @@ -296,6 +299,8 @@ EXIT: HDF_LOGE("%{public}s: writePos_ rollback", __func__); return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_DISPLAY_CONSTRAINT, writePos); return HDF_SUCCESS; } @@ -407,9 +412,10 @@ EXIT: requestPacker_.RollBack(writePos); HDF_LOGE("SetDisplayPerFrameParameterSmq writePos_ rollback %{public}s, %{public}d", key.c_str(), devId); - return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_DISPLAY_PERFRAME_PARAM, writePos); return HDF_SUCCESS; } @@ -423,6 +429,7 @@ private: using BaseType1_1::replyData_; using BaseType1_1::DoRequest; using BaseType1_1::PeriodDataReset; + using BaseType1_1::ReqStatistic; // Composition layers/types changed using BaseType1_1::compChangeLayers_; diff --git a/display/composer/v1_2/display_command/display_cmd_utils.h b/display/composer/v1_2/display_command/display_cmd_utils.h index bf839d2c..329a42cf 100644 --- a/display/composer/v1_2/display_command/display_cmd_utils.h +++ b/display/composer/v1_2/display_command/display_cmd_utils.h @@ -57,6 +57,8 @@ public: SWITCHCASE(REQUEST_CMD_SET_LAYER_COLOR); SWITCHCASE(REQUEST_CMD_COMMIT_AND_GET_RELEASE_FENCE); SWITCHCASE(REQUEST_CMD_SET_DISPLAY_CONSTRAINT); + SWITCHCASE(REQUEST_CMD_SET_LAYER_PERFRAME_PARAM); + SWITCHCASE(REQUEST_CMD_SET_DISPLAY_PERFRAME_PARAM); /* reply cmd */ SWITCHCASE(REPLY_CMD_SET_ERROR); SWITCHCASE(REPLY_CMD_PREPARE_DISPLAY_LAYERS); -- Gitee From 8dacb0378b8fd8799b289f1f68bc7be01f3d2830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E9=B9=8F=E8=BE=89?= Date: Thu, 4 Sep 2025 21:38:47 +0800 Subject: [PATCH 2/3] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 梁鹏辉 --- display/composer/v1_2/display_command/display_cmd_requester.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/display/composer/v1_2/display_command/display_cmd_requester.h b/display/composer/v1_2/display_command/display_cmd_requester.h index 85297ac5..2705a73d 100644 --- a/display/composer/v1_2/display_command/display_cmd_requester.h +++ b/display/composer/v1_2/display_command/display_cmd_requester.h @@ -357,9 +357,10 @@ EXIT: requestPacker_.RollBack(writePos); HDF_LOGE("SetLayerPerFrameParameterSmq writePos_ rollback %{public}s, %{public}d, %{public}d", key.c_str(), devId, layerId); - return HDF_FAILURE; } + + ReqStatistic(devId, REQUEST_CMD_SET_DISPLAY_PERFRAME_PARAM, writePos); return HDF_SUCCESS; } -- Gitee From e71431217a126cefad92ac94cb6f071bb117f4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E9=B9=8F=E8=BE=89?= Date: Fri, 5 Sep 2025 11:34:16 +0800 Subject: [PATCH 3/3] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 梁鹏辉 --- display/composer/v1_0/display_command/display_cmd_requester.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/display/composer/v1_0/display_command/display_cmd_requester.h b/display/composer/v1_0/display_command/display_cmd_requester.h index d7400d83..6c6fe5e3 100755 --- a/display/composer/v1_0/display_command/display_cmd_requester.h +++ b/display/composer/v1_0/display_command/display_cmd_requester.h @@ -992,8 +992,8 @@ protected: for (auto iterDev = reqCmdMaps.begin(); iterDev != reqCmdMaps.end(); iterDev++) { for (auto iterCmdInfo = iterDev->second.begin(); iterCmdInfo != iterDev->second.end(); iterCmdInfo++) { HDF_LOGW("@ %{public}u | %{public}u | %{public}u | %{public}s \n", - iterDev->first, iterCmdInfo->second.count, iterCmdInfo->second.len, - CmdUtils::CommandToString(iterCmdInfo->first)); + iterDev->first, iterCmdInfo->second.count, iterCmdInfo->second.len, + CmdUtils::CommandToString(iterCmdInfo->first)); } } } -- Gitee