Add support for render-ahead
For periods of time during which latency is less important
allow a client to request a deeper render-ahead pipeline.
The latency tradeoff results in less overall visual jank
Test: none, only used by macrobench
Change-Id: I516203b70bdc75b6415fa08bf9c4fb1b598b0102
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index c2cc72a..8aaa8c1 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -78,7 +78,7 @@
bool createOrUpdateLayer(RenderNode* node, const DamageAccumulator& dmgAccumulator,
ErrorHandler* errorHandler) {
return mRenderPipeline->createOrUpdateLayer(node, dmgAccumulator, mWideColorGamut,
- errorHandler);
+ errorHandler);
}
/**
@@ -190,6 +190,8 @@
IRenderPipeline* getRenderPipeline() { return mRenderPipeline.get(); }
+ void setRenderAheadDepth(int renderAhead);
+
private:
CanvasContext(RenderThread& thread, bool translucent, RenderNode* rootRenderNode,
IContextFactory* contextFactory, std::unique_ptr<IRenderPipeline> renderPipeline);
@@ -202,6 +204,7 @@
void freePrefetchedLayers();
bool isSwapChainStuffed();
+ void updateBufferCount();
SkRect computeDirtyRect(const Frame& frame, SkRect* dirty);
@@ -227,6 +230,7 @@
RingBuffer<SwapHistory, 3> mSwapHistory;
int64_t mFrameNumber = -1;
+ int mRenderAheadDepth = 0;
// last vsync for a dropped frame due to stuffed queue
nsecs_t mLastDropVsync = 0;