Fix wrong surfaceRequiresRedraw check
We only need to redraw if the size /changed/ not if it was the same. Also fix damageId to not use frameNumber as repeated redraws of the same frame would toggle. Bug: 143711430 Test: systrace Change-Id: I8ac4629c9ff4fd51de33d1be7aa46ccc995ba342
This commit is contained in:
@@ -24,7 +24,6 @@ TreeInfo::TreeInfo(TraversalMode mode, renderthread::CanvasContext& canvasContex
|
||||
: mode(mode)
|
||||
, prepareTextures(mode == MODE_FULL)
|
||||
, canvasContext(canvasContext)
|
||||
, damageGenerationId(canvasContext.getFrameNumber())
|
||||
, disableForceDark(canvasContext.useForceDark() ? 0 : 1)
|
||||
, screenSize(canvasContext.getNextFrameSize()) {}
|
||||
|
||||
|
||||
@@ -303,6 +303,7 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t sy
|
||||
|
||||
info.damageAccumulator = &mDamageAccumulator;
|
||||
info.layerUpdateQueue = &mLayerUpdateQueue;
|
||||
info.damageGenerationId = mDamageId++;
|
||||
info.out.canDrawThisFrame = true;
|
||||
|
||||
mAnimationContext->startFrame(info.mode);
|
||||
@@ -702,7 +703,7 @@ bool CanvasContext::surfaceRequiresRedraw() {
|
||||
surface->query(NATIVE_WINDOW_WIDTH, &width);
|
||||
surface->query(NATIVE_WINDOW_HEIGHT, &height);
|
||||
|
||||
return width == mLastFrameWidth && height == mLastFrameHeight;
|
||||
return width != mLastFrameWidth || height != mLastFrameHeight;
|
||||
}
|
||||
|
||||
void CanvasContext::setRenderAheadDepth(int renderAhead) {
|
||||
|
||||
@@ -245,6 +245,7 @@ private:
|
||||
// Need at least 4 because we do quad buffer. Add a 5th for good measure.
|
||||
RingBuffer<SwapHistory, 5> mSwapHistory;
|
||||
int64_t mFrameNumber = -1;
|
||||
int64_t mDamageId = 0;
|
||||
|
||||
// last vsync for a dropped frame due to stuffed queue
|
||||
nsecs_t mLastDropVsync = 0;
|
||||
|
||||
Reference in New Issue
Block a user