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

Commit 54fbff34 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add logic to clean up resources more frequently" into sc-dev

parents 1e40e406 dd1fcab1
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -210,6 +210,14 @@ void CacheManager::onFrameCompleted() {
    }
}

void CacheManager::performDeferredCleanup(nsecs_t cleanupOlderThanMillis) {
    if (mGrContext) {
        mGrContext->performDeferredCleanup(
            std::chrono::milliseconds(cleanupOlderThanMillis),
            /* scratchResourcesOnly */true);
    }
}

} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <SkSurface.h>
#include <utils/String8.h>
#include <vector>
#include "utils/TimeUtils.h"

namespace android {

@@ -53,6 +54,8 @@ public:
    size_t getBackgroundCacheSize() const { return mBackgroundResourceBytes; }
    void onFrameCompleted();

    void performDeferredCleanup(nsecs_t cleanupOlderThanMillis);

private:
    friend class RenderThread;

+16 −0
Original line number Diff line number Diff line
@@ -461,6 +461,7 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t sy
}

void CanvasContext::stopDrawing() {
    cleanupResources();
    mRenderThread.removeFrameCallback(this);
    mAnimationContext->pauseAnimators();
    mGenerationID++;
@@ -619,10 +620,25 @@ nsecs_t CanvasContext::draw() {
        }
    }

    cleanupResources();
    mRenderThread.cacheManager().onFrameCompleted();
    return mCurrentFrameInfo->get(FrameInfoIndex::DequeueBufferDuration);
}

void CanvasContext::cleanupResources() {
    auto& tracker = mJankTracker.frames();
    auto size = tracker.size();
    auto capacity = tracker.capacity();
    if (size == capacity) {
        nsecs_t nowNanos = systemTime(SYSTEM_TIME_MONOTONIC);
        nsecs_t frameCompleteNanos =
            tracker[0].get(FrameInfoIndex::FrameCompleted);
        nsecs_t frameDiffNanos = nowNanos - frameCompleteNanos;
        nsecs_t cleanupMillis = ns2ms(std::max(frameDiffNanos, 10_s));
        mRenderThread.cacheManager().performDeferredCleanup(cleanupMillis);
    }
}

void CanvasContext::reportMetricsWithPresentTime() {
    if (mFrameMetricsReporter == nullptr) {
        return;
+1 −0
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ private:
    bool mExpectSurfaceStats = false;

    std::function<void(int64_t, int64_t, int64_t)> mASurfaceTransactionCallback;
    void cleanupResources();
};

} /* namespace renderthread */