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

This commit is contained in:
TreeHugger Robot
2021-06-15 18:33:38 +00:00
committed by Android (Google) Code Review
4 changed files with 28 additions and 0 deletions

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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;

View File

@@ -312,6 +312,7 @@ private:
bool mExpectSurfaceStats = false;
std::function<void(int64_t, int64_t, int64_t)> mASurfaceTransactionCallback;
void cleanupResources();
};
} /* namespace renderthread */