Fix a couple crashes in the new reorderer
Also fixes the layer clear scissor logic in BakedOpRenderer, fixing a
flicker.
Change-Id: I61106a18938ea35e31f0a0b585b5743544245773
diff --git a/libs/hwui/FrameReorderer.h b/libs/hwui/FrameReorderer.h
index 562e6a1..3bb8626 100644
--- a/libs/hwui/FrameReorderer.h
+++ b/libs/hwui/FrameReorderer.h
@@ -99,7 +99,7 @@
// Relay through layers in reverse order, since layers
// later in the list will be drawn by earlier ones
for (int i = mLayerReorderers.size() - 1; i >= 1; i--) {
- LayerReorderer& layer = mLayerReorderers[i];
+ LayerReorderer& layer = *(mLayerReorderers[i]);
if (layer.renderNode) {
// cached HW layer - can't skip layer if empty
renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
@@ -112,7 +112,7 @@
}
}
- const LayerReorderer& fbo0 = mLayerReorderers[0];
+ const LayerReorderer& fbo0 = *(mLayerReorderers[0]);
renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
renderer.endFrame(fbo0.repaintRect);
@@ -120,7 +120,7 @@
void dump() const {
for (auto&& layer : mLayerReorderers) {
- layer.dump();
+ layer->dump();
}
}
@@ -143,7 +143,7 @@
const BeginLayerOp* beginLayerOp, RenderNode* renderNode);
void restoreForLayer();
- LayerReorderer& currentLayer() { return mLayerReorderers[mLayerStack.back()]; }
+ LayerReorderer& currentLayer() { return *(mLayerReorderers[mLayerStack.back()]); }
BakedOpState* tryBakeOpState(const RecordedOp& recordedOp) {
return BakedOpState::tryConstruct(mAllocator, *mCanvasState.writableSnapshot(), recordedOp);
@@ -183,7 +183,7 @@
#undef X
// List of every deferred layer's render state. Replayed in reverse order to render a frame.
- std::vector<LayerReorderer> mLayerReorderers;
+ std::vector<LayerReorderer*> mLayerReorderers;
/*
* Stack of indices within mLayerReorderers representing currently active layers. If drawing