Merge cherrypicks of ['googleplex-android-review.googlesource.com/24394600'] into udc-release.
Change-Id: I13498717ea42becd292db5e949317a94377cdb30
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
index d72d228..feca03d 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -67,6 +67,7 @@
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 @@
// 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 @@
mCCodecCallback(callback),
mFrameIndex(0u),
mFirstValidFrameIndex(0u),
+ mAreRenderMetricsEnabled(areRenderMetricsEnabled()),
mIsSurfaceToDisplay(false),
mHasPresentFenceTimes(false),
mRenderingDepth(3u),
@@ -174,8 +181,7 @@
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 @@
int64_t mediaTimeUs = 0;
(void)buffer->meta()->findInt64("timeUs", &mediaTimeUs);
- if (mIsSurfaceToDisplay) {
+ if (mAreRenderMetricsEnabled && mIsSurfaceToDisplay) {
trackReleasedFrame(qbo, mediaTimeUs, timestampNs);
processRenderedFrames(qbo.frameTimestamps);
} else {
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.h b/media/codec2/sfplugin/CCodecBufferChannel.h
index 2d87aa9..41f5ae2 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.h
+++ b/media/codec2/sfplugin/CCodecBufferChannel.h
@@ -334,6 +334,7 @@
sp<MemoryDealer> makeMemoryDealer(size_t heapSize);
std::deque<TrackedFrame> mTrackedFrames;
+ bool mAreRenderMetricsEnabled;
bool mIsSurfaceToDisplay;
bool mHasPresentFenceTimes;
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index e0ebc11..2970aab 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -92,6 +92,7 @@
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 @@
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;
@@ -1025,9 +1031,10 @@
mHavePendingInputBuffers(false),
mCpuBoostRequested(false),
mIsSurfaceToDisplay(false),
+ mAreRenderMetricsEnabled(areRenderMetricsEnabled()),
mVideoRenderQualityTracker(
VideoRenderQualityTracker::Configuration::getFromServerConfigurableFlags(
- server_configurable_flags::GetServerConfigurableFlag)),
+ GetServerConfigurableFlag)),
mLatencyUnknown(0),
mBytesEncoded(0),
mEarliestEncodedPtsUs(INT64_MAX),
@@ -6044,7 +6051,7 @@
// 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,
diff --git a/media/libstagefright/VideoRenderQualityTracker.cpp b/media/libstagefright/VideoRenderQualityTracker.cpp
index 4f12a37..fbd8577 100644
--- a/media/libstagefright/VideoRenderQualityTracker.cpp
+++ b/media/libstagefright/VideoRenderQualityTracker.cpp
@@ -154,7 +154,7 @@
}
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.
diff --git a/media/libstagefright/include/media/stagefright/MediaCodec.h b/media/libstagefright/include/media/stagefright/MediaCodec.h
index 52d7d3d..163408d 100644
--- a/media/libstagefright/include/media/stagefright/MediaCodec.h
+++ b/media/libstagefright/include/media/stagefright/MediaCodec.h
@@ -572,6 +572,7 @@
sp<ALooper> mCryptoLooper;
bool mIsSurfaceToDisplay;
+ bool mAreRenderMetricsEnabled;
PlaybackDurationAccumulator mPlaybackDurationAccumulator;
VideoRenderQualityTracker mVideoRenderQualityTracker;