Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34bedcdd authored by Brian Lindahl's avatar Brian Lindahl Committed by Automerger Merge Worker
Browse files

Hide accurate onFrameRendered calls behind render metrics feature flag am: 7e7d3ebb

parents 4e66b49e 7e7d3ebb
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ using hardware::hidl_string;
using hardware::hidl_vec;
using hardware::fromHeap;
using hardware::HidlMemory;
using server_configurable_flags::GetServerConfigurableFlag;

using namespace hardware::cas::V1_0;
using namespace hardware::cas::native::V1_0;
@@ -82,6 +83,11 @@ constexpr size_t kSmoothnessFactor = 4;
// than making it non-blocking. Do not change this value.
const static size_t kDequeueTimeoutNs = 0;

static bool areRenderMetricsEnabled() {
    std::string v = GetServerConfigurableFlag("media_native", "render_metrics_enabled", "false");
    return v == "true";
}

}  // namespace

CCodecBufferChannel::QueueGuard::QueueGuard(
@@ -148,6 +154,7 @@ CCodecBufferChannel::CCodecBufferChannel(
      mCCodecCallback(callback),
      mFrameIndex(0u),
      mFirstValidFrameIndex(0u),
      mAreRenderMetricsEnabled(areRenderMetricsEnabled()),
      mIsSurfaceToDisplay(false),
      mHasPresentFenceTimes(false),
      mRenderingDepth(3u),
@@ -174,8 +181,7 @@ CCodecBufferChannel::CCodecBufferChannel(
        Mutexed<BlockPools>::Locked pools(mBlockPools);
        pools->outputPoolId = C2BlockPool::BASIC_LINEAR;
    }
    std::string value = server_configurable_flags::GetServerConfigurableFlag(
            "media_native", "ccodec_rendering_depth", "3");
    std::string value = GetServerConfigurableFlag("media_native", "ccodec_rendering_depth", "3");
    android::base::ParseInt(value, &mRenderingDepth);
    mOutputSurface.lock()->maxDequeueBuffers = kSmoothnessFactor + mRenderingDepth;
}
@@ -996,7 +1002,7 @@ status_t CCodecBufferChannel::renderOutputBuffer(

    int64_t mediaTimeUs = 0;
    (void)buffer->meta()->findInt64("timeUs", &mediaTimeUs);
    if (mIsSurfaceToDisplay) {
    if (mAreRenderMetricsEnabled && mIsSurfaceToDisplay) {
        trackReleasedFrame(qbo, mediaTimeUs, timestampNs);
        processRenderedFrames(qbo.frameTimestamps);
    } else {
+1 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ private:
    sp<MemoryDealer> makeMemoryDealer(size_t heapSize);

    std::deque<TrackedFrame> mTrackedFrames;
    bool mAreRenderMetricsEnabled;
    bool mIsSurfaceToDisplay;
    bool mHasPresentFenceTimes;

+9 −2
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ using aidl::android::media::BnResourceManagerClient;
using aidl::android::media::IResourceManagerClient;
using aidl::android::media::IResourceManagerService;
using aidl::android::media::ClientInfoParcel;
using server_configurable_flags::GetServerConfigurableFlag;
using FreezeEvent = VideoRenderQualityTracker::FreezeEvent;
using JudderEvent = VideoRenderQualityTracker::JudderEvent;

@@ -282,6 +283,11 @@ static bool isResourceError(status_t err) {
    return (err == NO_MEMORY);
}

static bool areRenderMetricsEnabled() {
    std::string v = GetServerConfigurableFlag("media_native", "render_metrics_enabled", "false");
    return v == "true";
}

static const int kMaxRetry = 2;
static const int kMaxReclaimWaitTimeInUs = 500000;  // 0.5s
static const int kNumBuffersAlign = 16;
@@ -1148,9 +1154,10 @@ MediaCodec::MediaCodec(
      mHavePendingInputBuffers(false),
      mCpuBoostRequested(false),
      mIsSurfaceToDisplay(false),
      mAreRenderMetricsEnabled(areRenderMetricsEnabled()),
      mVideoRenderQualityTracker(
              VideoRenderQualityTracker::Configuration::getFromServerConfigurableFlags(
                      server_configurable_flags::GetServerConfigurableFlag)),
                      GetServerConfigurableFlag)),
      mLatencyUnknown(0),
      mBytesEncoded(0),
      mEarliestEncodedPtsUs(INT64_MAX),
@@ -6171,7 +6178,7 @@ status_t MediaCodec::onReleaseOutputBuffer(const sp<AMessage> &msg) {

        // If rendering to the screen, then schedule a time in the future to poll to see if this
        // frame was ever rendered to seed onFrameRendered callbacks.
        if (mIsSurfaceToDisplay) {
        if (mAreRenderMetricsEnabled && mIsSurfaceToDisplay) {
            if (mediaTimeUs != INT64_MIN) {
                noRenderTime ? mVideoRenderQualityTracker.onFrameReleased(mediaTimeUs)
                             : mVideoRenderQualityTracker.onFrameReleased(mediaTimeUs,
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ VideoRenderQualityTracker::Configuration
}

VideoRenderQualityTracker::Configuration::Configuration() {
    enabled = true;
    enabled = false;

    // Assume that the app is skipping frames because it's detected that the frame couldn't be
    // rendered in time.
+1 −0
Original line number Diff line number Diff line
@@ -572,6 +572,7 @@ private:
    sp<ALooper> mCryptoLooper;

    bool mIsSurfaceToDisplay;
    bool mAreRenderMetricsEnabled;
    PlaybackDurationAccumulator mPlaybackDurationAccumulator;
    VideoRenderQualityTracker mVideoRenderQualityTracker;