diff options
| author | 2021-10-07 23:29:04 +0000 | |
|---|---|---|
| committer | 2021-10-07 23:29:04 +0000 | |
| commit | b4bc092f8772538de5a134a2e025a66b851f6520 (patch) | |
| tree | d51222daf1c50866589723035df31049eab4dfbb | |
| parent | 8373483bae07951f447c7cc6e7babab11e4b6d7a (diff) | |
| parent | 1dc4bfa7abbdab74ad7dd29d3c860583bfe0fd0c (diff) | |
Merge "Remove buffer occupancy stats"
| -rw-r--r-- | services/surfaceflinger/BufferLayer.cpp | 5 | ||||
| -rw-r--r-- | services/surfaceflinger/BufferLayer.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/BufferQueueLayer.cpp | 10 | ||||
| -rw-r--r-- | services/surfaceflinger/BufferQueueLayer.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.h | 10 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 62 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 21 |
7 files changed, 7 insertions, 105 deletions
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index ef05fe2138..8de43e0fe6 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -346,13 +346,13 @@ TimeStats::SetFrameRateVote frameRateToSetFrameRateVotePayload(Layer::FrameRate } } // namespace -bool BufferLayer::onPostComposition(const DisplayDevice* display, +void BufferLayer::onPostComposition(const DisplayDevice* display, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { // mFrameLatencyNeeded is true when a new frame was latched for the // composition. - if (!mBufferInfo.mFrameLatencyNeeded) return false; + if (!mBufferInfo.mFrameLatencyNeeded) return; // Update mFrameEventHistory. { @@ -426,7 +426,6 @@ bool BufferLayer::onPostComposition(const DisplayDevice* display, mFrameTracker.advanceFrame(); mBufferInfo.mFrameLatencyNeeded = false; - return true; } void BufferLayer::gatherBufferInfo() { diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h index 2da73f81e5..61e7ac5d05 100644 --- a/services/surfaceflinger/BufferLayer.h +++ b/services/surfaceflinger/BufferLayer.h @@ -77,7 +77,7 @@ public: bool isHdrY410() const override; - bool onPostComposition(const DisplayDevice*, const std::shared_ptr<FenceTime>& glDoneFence, + void onPostComposition(const DisplayDevice*, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming&) override; diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp index 8bbe43865a..f98681e1ce 100644 --- a/services/surfaceflinger/BufferQueueLayer.cpp +++ b/services/surfaceflinger/BufferQueueLayer.cpp @@ -65,16 +65,6 @@ void BufferQueueLayer::setTransformHint(ui::Transform::RotationFlags displayTran mConsumer->setTransformHint(mTransformHint); } -std::vector<OccupancyTracker::Segment> BufferQueueLayer::getOccupancyHistory(bool forceFlush) { - std::vector<OccupancyTracker::Segment> history; - status_t result = mConsumer->getOccupancyHistory(forceFlush, &history); - if (result != NO_ERROR) { - ALOGW("[%s] Failed to obtain occupancy history (%d)", getDebugName(), result); - return {}; - } - return history; -} - void BufferQueueLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { if (!mConsumer->releasePendingBuffer()) { return; diff --git a/services/surfaceflinger/BufferQueueLayer.h b/services/surfaceflinger/BufferQueueLayer.h index be2902bba6..a3bd725cfe 100644 --- a/services/surfaceflinger/BufferQueueLayer.h +++ b/services/surfaceflinger/BufferQueueLayer.h @@ -44,8 +44,6 @@ public: void onLayerDisplayed(const sp<Fence>& releaseFence) override; - std::vector<OccupancyTracker::Segment> getOccupancyHistory(bool forceFlush) override; - // If a buffer was replaced this frame, release the former buffer void releasePendingBuffer(nsecs_t dequeueReadyTime) override; diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index d17c05b3fa..8209c51ecb 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -525,12 +525,10 @@ public: * called after composition. * returns true if the layer latched a new buffer this frame. */ - virtual bool onPostComposition(const DisplayDevice*, + virtual void onPostComposition(const DisplayDevice*, const std::shared_ptr<FenceTime>& /*glDoneFence*/, const std::shared_ptr<FenceTime>& /*presentFence*/, - const CompositorTiming&) { - return false; - } + const CompositorTiming&) {} // If a buffer was replaced this frame, release the former buffer virtual void releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) { } @@ -591,10 +589,6 @@ public: } virtual FrameRate getFrameRateForLayerTree() const; - virtual std::vector<OccupancyTracker::Segment> getOccupancyHistory(bool /*forceFlush*/) { - return {}; - } - virtual bool getTransformToDisplayInverse() const { return false; } // Returns how rounded corners should be drawn for this layer. diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index e90af3a64a..81f20edca1 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2308,13 +2308,9 @@ void SurfaceFlinger::postComposition() { } for (const auto& layer: mLayersWithQueuedFrames) { - const bool frameLatched = - layer->onPostComposition(display, glCompositionDoneFenceTime, - mPreviousPresentFences[0].fenceTime, compositorTiming); + layer->onPostComposition(display, glCompositionDoneFenceTime, + mPreviousPresentFences[0].fenceTime, compositorTiming); layer->releasePendingBuffer(/*dequeueReadyTime*/ now); - if (frameLatched) { - recordBufferingStats(layer->getName(), layer->getOccupancyHistory(false)); - } } std::vector<std::pair<std::shared_ptr<compositionengine::Display>, sp<HdrLayerInfoReporter>>> @@ -3244,8 +3240,6 @@ void SurfaceFlinger::doCommitTransactions() { if (!mLayersPendingRemoval.isEmpty()) { // Notify removed layers now that they can't be drawn from for (const auto& l : mLayersPendingRemoval) { - recordBufferingStats(l->getName(), l->getOccupancyHistory(true)); - // Ensure any buffers set to display on any children are released. if (l->isRemovedFromCurrentState()) { l->latchAndReleaseBuffer(); @@ -4814,24 +4808,6 @@ void SurfaceFlinger::dumpStaticScreenStats(std::string& result) const { bucketTimeSec, percent); } -void SurfaceFlinger::recordBufferingStats(const std::string& layerName, - std::vector<OccupancyTracker::Segment>&& history) { - Mutex::Autolock lock(getBE().mBufferingStatsMutex); - auto& stats = getBE().mBufferingStats[layerName]; - for (const auto& segment : history) { - if (!segment.usedThirdBuffer) { - stats.twoBufferTime += segment.totalTime; - } - if (segment.occupancyAverage < 1.0f) { - stats.doubleBufferedTime += segment.totalTime; - } else if (segment.occupancyAverage < 2.0f) { - stats.tripleBufferedTime += segment.totalTime; - } - ++stats.numSegments; - stats.totalTime += segment.totalTime; - } -} - void SurfaceFlinger::dumpFrameEventsLocked(std::string& result) { result.append("Layer frame timestamps:\n"); // Traverse all layers to dump frame-events for each layer @@ -4839,38 +4815,6 @@ void SurfaceFlinger::dumpFrameEventsLocked(std::string& result) { [&] (Layer* layer) { layer->dumpFrameEvents(result); }); } -void SurfaceFlinger::dumpBufferingStats(std::string& result) const { - result.append("Buffering stats:\n"); - result.append(" [Layer name] <Active time> <Two buffer> " - "<Double buffered> <Triple buffered>\n"); - Mutex::Autolock lock(getBE().mBufferingStatsMutex); - typedef std::tuple<std::string, float, float, float> BufferTuple; - std::map<float, BufferTuple, std::greater<float>> sorted; - for (const auto& statsPair : getBE().mBufferingStats) { - const char* name = statsPair.first.c_str(); - const SurfaceFlingerBE::BufferingStats& stats = statsPair.second; - if (stats.numSegments == 0) { - continue; - } - float activeTime = ns2ms(stats.totalTime) / 1000.0f; - float twoBufferRatio = static_cast<float>(stats.twoBufferTime) / - stats.totalTime; - float doubleBufferRatio = static_cast<float>( - stats.doubleBufferedTime) / stats.totalTime; - float tripleBufferRatio = static_cast<float>( - stats.tripleBufferedTime) / stats.totalTime; - sorted.insert({activeTime, {name, twoBufferRatio, - doubleBufferRatio, tripleBufferRatio}}); - } - for (const auto& sortedPair : sorted) { - float activeTime = sortedPair.first; - const BufferTuple& values = sortedPair.second; - StringAppendF(&result, " [%s] %.2f %.3f %.3f %.3f\n", std::get<0>(values).c_str(), - activeTime, std::get<1>(values), std::get<2>(values), std::get<3>(values)); - } - result.append("\n"); -} - void SurfaceFlinger::dumpDisplayIdentificationData(std::string& result) const { for (const auto& [token, display] : mDisplays) { const auto displayId = PhysicalDisplayId::tryCast(display->getId()); @@ -5062,8 +5006,6 @@ void SurfaceFlinger::dumpAllLocked(const DumpArgs& args, std::string& result) co StringAppendF(&result, "HWC missed frame count: %u\n", mHwcFrameMissedCount.load()); StringAppendF(&result, "GPU missed frame count: %u\n\n", mGpuFrameMissedCount.load()); - dumpBufferingStats(result); - /* * Dump the visible layer list */ diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 1217d6369b..1f0e42ddf3 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -32,7 +32,6 @@ #include <gui/ISurfaceComposerClient.h> #include <gui/ITransactionCompletedListener.h> #include <gui/LayerState.h> -#include <gui/OccupancyTracker.h> #include <layerproto/LayerProtoHeader.h> #include <math/mat4.h> #include <renderengine/LayerSettings.h> @@ -155,22 +154,6 @@ struct SurfaceFlingerBE { nsecs_t mFrameBuckets[NUM_BUCKETS] = {}; nsecs_t mTotalTime = 0; std::atomic<nsecs_t> mLastSwapTime = 0; - - // Double- vs. triple-buffering stats - struct BufferingStats { - size_t numSegments = 0; - nsecs_t totalTime = 0; - - // "Two buffer" means that a third buffer was never used, whereas - // "double-buffered" means that on average the segment only used two - // buffers (though it may have used a third for some part of the - // segment) - nsecs_t twoBufferTime = 0; - nsecs_t doubleBufferedTime = 0; - nsecs_t tripleBufferedTime = 0; - }; - mutable Mutex mBufferingStatsMutex; - std::unordered_map<std::string, BufferingStats> mBufferingStats; }; class SurfaceFlinger : public BnSurfaceComposer, @@ -1158,10 +1141,6 @@ private: void dumpStaticScreenStats(std::string& result) const; // Not const because each Layer needs to query Fences and cache timestamps. void dumpFrameEventsLocked(std::string& result); - - void recordBufferingStats(const std::string& layerName, - std::vector<OccupancyTracker::Segment>&& history); - void dumpBufferingStats(std::string& result) const; void dumpDisplayIdentificationData(std::string& result) const REQUIRES(mStateLock); void dumpRawDisplayIdentificationData(const DumpArgs&, std::string& result) const; void dumpWideColorInfo(std::string& result) const REQUIRES(mStateLock); |