From 22c26898edd994fb13e29f3fe2cd483d6af22027 Mon Sep 17 00:00:00 2001 From: Bo Hu Date: Thu, 14 Jul 2022 06:53:08 -0700 Subject: reduce log spam from RanchuHwc ALOGW "presentDisplay display has no layers to compose" shows up too frequently, turn it to Verbose mode. Bug: 239019769 Change-Id: I89caf2481332e6ed07a14afeacc0f84268b41336 --- system/hwc2/HostComposer.cpp | 2 +- system/hwc3/HostFrameComposer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system/hwc2/HostComposer.cpp b/system/hwc2/HostComposer.cpp index 5bf324e0..472e7829 100644 --- a/system/hwc2/HostComposer.cpp +++ b/system/hwc2/HostComposer.cpp @@ -570,7 +570,7 @@ std::tuple HostComposer::presentDisplay( display->clearReleaseFencesAndIdsLocked(); if (numLayer == 0) { - ALOGW( + ALOGV( "%s display has no layers to compose, flushing client target buffer.", __FUNCTION__); diff --git a/system/hwc3/HostFrameComposer.cpp b/system/hwc3/HostFrameComposer.cpp index 7b090c2d..f976e053 100644 --- a/system/hwc3/HostFrameComposer.cpp +++ b/system/hwc3/HostFrameComposer.cpp @@ -578,7 +578,7 @@ HWC3::Error HostFrameComposer::presentDisplay( displayId, static_cast(layers.size())); if (numLayer == 0) { - ALOGW( + ALOGV( "%s display has no layers to compose, flushing client target buffer.", __FUNCTION__); -- cgit v1.2.3 From e1f0b2c5a691b2a869c804c259eb71d28d1d38b9 Mon Sep 17 00:00:00 2001 From: Bo Hu Date: Thu, 7 Jul 2022 19:59:56 +0000 Subject: codecs: h264 limit the max number of decoders Bug: 238321873 Test: set avd memory to be at least 4G android.media.codec.cts.MediaCodecResourceTest Change-Id: I66d3c3f4a8004a5c09702da6c4cf307a3daa3265 --- .../codecs/c2/decoders/avcdec/C2GoldfishAvcDec.cpp | 40 +++++++++++++++++++++- .../codecs/c2/decoders/avcdec/C2GoldfishAvcDec.h | 1 + 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.cpp b/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.cpp index 90b56532..963558ee 100644 --- a/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.cpp +++ b/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.cpp @@ -42,6 +42,8 @@ #include "C2GoldfishAvcDec.h" +#include + #define DEBUG 0 #if DEBUG #define DDD(...) ALOGD(__VA_ARGS__) @@ -64,6 +66,35 @@ constexpr uint32_t kDefaultOutputDelay = 8; So total maximum output delay is 34 */ constexpr uint32_t kMaxOutputDelay = 34; constexpr uint32_t kMinInputBytes = 4; + +static std::mutex s_decoder_count_mutex; +static int s_decoder_count = 0; + +int allocateDecoderId() { + DDD("calling %s", __func__); + std::lock_guard lock(s_decoder_count_mutex); + if (s_decoder_count >= 32 || s_decoder_count < 0) { + ALOGE("calling %s failed", __func__); + return -1; + } + ++ s_decoder_count; + DDD("calling %s success total decoder %d", __func__, s_decoder_count); + return s_decoder_count;; +} + +bool deAllocateDecoderId() { + DDD("calling %s", __func__); + std::lock_guard lock(s_decoder_count_mutex); + if (s_decoder_count < 1) { + ALOGE("calling %s failed ", __func__); + return false; + } + -- s_decoder_count; + DDD("calling %s success total decoder %d", __func__, s_decoder_count); + return true; +} + + } // namespace class C2GoldfishAvcDec::IntfImpl : public SimpleInterface::BaseParams { @@ -393,6 +424,9 @@ C2GoldfishAvcDec::C2GoldfishAvcDec(const char *name, c2_node_id_t id, C2GoldfishAvcDec::~C2GoldfishAvcDec() { onRelease(); } c2_status_t C2GoldfishAvcDec::onInit() { + ALOGD("calling onInit"); + mId = allocateDecoderId(); + if (mId <= 0) return C2_NO_MEMORY; status_t err = initDecoder(); return err == OK ? C2_OK : C2_CORRUPTED; } @@ -407,6 +441,11 @@ c2_status_t C2GoldfishAvcDec::onStop() { void C2GoldfishAvcDec::onReset() { (void)onStop(); } void C2GoldfishAvcDec::onRelease() { + DDD("calling onRelease"); + if (mId > 0) { + deAllocateDecoderId(); + mId = -1; + } deleteContext(); if (mOutBlock) { mOutBlock.reset(); @@ -476,7 +515,6 @@ status_t C2GoldfishAvcDec::setParams(size_t stride) { } status_t C2GoldfishAvcDec::initDecoder() { - // if (OK != createDecoder()) return UNKNOWN_ERROR; mStride = ALIGN2(mWidth); mSignalledError = false; resetPlugin(); diff --git a/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.h b/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.h index afa27f56..5b5e760a 100644 --- a/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.h +++ b/system/codecs/c2/decoders/avcdec/C2GoldfishAvcDec.h @@ -155,6 +155,7 @@ class C2GoldfishAvcDec : public SimpleC2Component { std::unique_ptr mH264Helper; + int mId = -1; C2_DO_NOT_COPY(C2GoldfishAvcDec); }; -- cgit v1.2.3