Loading libs/hwui/BakedOpRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ void BakedOpRenderer::setViewport(uint32_t width, uint32_t height) { } void BakedOpRenderer::clearColorBuffer(const Rect& rect) { if (Rect(mRenderTarget.viewportWidth, mRenderTarget.viewportHeight).contains(rect)) { if (rect.contains(Rect(mRenderTarget.viewportWidth, mRenderTarget.viewportHeight))) { // Full viewport is being cleared - disable scissor mRenderState.scissor().setEnabled(false); } else { Loading libs/hwui/FrameReorderer.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -40,7 +40,8 @@ FrameReorderer::FrameReorderer(const LayerUpdateQueue& layers, const SkRect& cli mLayerStack.reserve(layers.entries().size()); // Prepare to defer Fbo0 mLayerReorderers.emplace_back(viewportWidth, viewportHeight, Rect(clip)); auto fbo0 = mAllocator.create<LayerReorderer>(viewportWidth, viewportHeight, Rect(clip)); mLayerReorderers.push_back(fbo0); mLayerStack.push_back(0); mCanvasState.initializeSaveStack(viewportWidth, viewportHeight, clip.fLeft, clip.fTop, clip.fRight, clip.fBottom, Loading Loading @@ -602,7 +603,9 @@ void FrameReorderer::saveForLayer(uint32_t layerWidth, uint32_t layerHeight, // create a new layer repaint, and push its index on the stack mLayerStack.push_back(mLayerReorderers.size()); mLayerReorderers.emplace_back(layerWidth, layerHeight, repaintRect, beginLayerOp, renderNode); auto newFbo = mAllocator.create<LayerReorderer>(layerWidth, layerHeight, repaintRect, beginLayerOp, renderNode); mLayerReorderers.push_back(newFbo); } void FrameReorderer::restoreForLayer() { Loading Loading @@ -671,7 +674,7 @@ void FrameReorderer::deferEndLayerOp(const EndLayerOp& /* ignored */) { beginLayerOp.localMatrix, beginLayerOp.localClip, beginLayerOp.paint, &mLayerReorderers[finishedLayerIndex].offscreenBuffer); &(mLayerReorderers[finishedLayerIndex]->offscreenBuffer)); BakedOpState* bakedOpState = tryBakeOpState(*drawLayerOp); if (bakedOpState) { Loading @@ -681,7 +684,7 @@ void FrameReorderer::deferEndLayerOp(const EndLayerOp& /* ignored */) { // Layer won't be drawn - delete its drawing batches to prevent it from doing any work // TODO: need to prevent any render work from being done // - create layerop earlier for reject purposes? mLayerReorderers[finishedLayerIndex].clear(); mLayerReorderers[finishedLayerIndex]->clear(); return; } } Loading libs/hwui/FrameReorderer.h +5 −5 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ public: // 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); Loading @@ -112,7 +112,7 @@ public: } } 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); Loading @@ -120,7 +120,7 @@ public: void dump() const { for (auto&& layer : mLayerReorderers) { layer.dump(); layer->dump(); } } Loading @@ -143,7 +143,7 @@ private: 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); Loading Loading @@ -183,7 +183,7 @@ private: #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 Loading libs/hwui/LayerReorderer.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -269,8 +269,6 @@ void LayerReorderer::flushLayerClears(LinearAllocator& allocator) { verts, vertCount); BakedOpState* bakedState = BakedOpState::directConstruct(allocator, &viewportClip, bounds, *op); deferUnmergeableOp(allocator, bakedState, OpBatchType::Vertices); } } Loading libs/hwui/LayerReorderer.h +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "ClipArea.h" #include "Rect.h" #include "utils/Macros.h" #include <vector> #include <unordered_map> Loading Loading @@ -67,6 +68,8 @@ typedef void (*MergedOpReceiver)(void*, const MergedBakedOpList& opList); * for a single FBO/layer. */ class LayerReorderer { // Prevent copy/assign because users may stash pointer to offscreenBuffer and viewportClip PREVENT_COPY_AND_ASSIGN(LayerReorderer); public: // Create LayerReorderer for Fbo0 LayerReorderer(uint32_t width, uint32_t height, const Rect& repaintRect) Loading Loading
libs/hwui/BakedOpRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ void BakedOpRenderer::setViewport(uint32_t width, uint32_t height) { } void BakedOpRenderer::clearColorBuffer(const Rect& rect) { if (Rect(mRenderTarget.viewportWidth, mRenderTarget.viewportHeight).contains(rect)) { if (rect.contains(Rect(mRenderTarget.viewportWidth, mRenderTarget.viewportHeight))) { // Full viewport is being cleared - disable scissor mRenderState.scissor().setEnabled(false); } else { Loading
libs/hwui/FrameReorderer.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -40,7 +40,8 @@ FrameReorderer::FrameReorderer(const LayerUpdateQueue& layers, const SkRect& cli mLayerStack.reserve(layers.entries().size()); // Prepare to defer Fbo0 mLayerReorderers.emplace_back(viewportWidth, viewportHeight, Rect(clip)); auto fbo0 = mAllocator.create<LayerReorderer>(viewportWidth, viewportHeight, Rect(clip)); mLayerReorderers.push_back(fbo0); mLayerStack.push_back(0); mCanvasState.initializeSaveStack(viewportWidth, viewportHeight, clip.fLeft, clip.fTop, clip.fRight, clip.fBottom, Loading Loading @@ -602,7 +603,9 @@ void FrameReorderer::saveForLayer(uint32_t layerWidth, uint32_t layerHeight, // create a new layer repaint, and push its index on the stack mLayerStack.push_back(mLayerReorderers.size()); mLayerReorderers.emplace_back(layerWidth, layerHeight, repaintRect, beginLayerOp, renderNode); auto newFbo = mAllocator.create<LayerReorderer>(layerWidth, layerHeight, repaintRect, beginLayerOp, renderNode); mLayerReorderers.push_back(newFbo); } void FrameReorderer::restoreForLayer() { Loading Loading @@ -671,7 +674,7 @@ void FrameReorderer::deferEndLayerOp(const EndLayerOp& /* ignored */) { beginLayerOp.localMatrix, beginLayerOp.localClip, beginLayerOp.paint, &mLayerReorderers[finishedLayerIndex].offscreenBuffer); &(mLayerReorderers[finishedLayerIndex]->offscreenBuffer)); BakedOpState* bakedOpState = tryBakeOpState(*drawLayerOp); if (bakedOpState) { Loading @@ -681,7 +684,7 @@ void FrameReorderer::deferEndLayerOp(const EndLayerOp& /* ignored */) { // Layer won't be drawn - delete its drawing batches to prevent it from doing any work // TODO: need to prevent any render work from being done // - create layerop earlier for reject purposes? mLayerReorderers[finishedLayerIndex].clear(); mLayerReorderers[finishedLayerIndex]->clear(); return; } } Loading
libs/hwui/FrameReorderer.h +5 −5 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ public: // 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); Loading @@ -112,7 +112,7 @@ public: } } 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); Loading @@ -120,7 +120,7 @@ public: void dump() const { for (auto&& layer : mLayerReorderers) { layer.dump(); layer->dump(); } } Loading @@ -143,7 +143,7 @@ private: 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); Loading Loading @@ -183,7 +183,7 @@ private: #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 Loading
libs/hwui/LayerReorderer.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -269,8 +269,6 @@ void LayerReorderer::flushLayerClears(LinearAllocator& allocator) { verts, vertCount); BakedOpState* bakedState = BakedOpState::directConstruct(allocator, &viewportClip, bounds, *op); deferUnmergeableOp(allocator, bakedState, OpBatchType::Vertices); } } Loading
libs/hwui/LayerReorderer.h +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "ClipArea.h" #include "Rect.h" #include "utils/Macros.h" #include <vector> #include <unordered_map> Loading Loading @@ -67,6 +68,8 @@ typedef void (*MergedOpReceiver)(void*, const MergedBakedOpList& opList); * for a single FBO/layer. */ class LayerReorderer { // Prevent copy/assign because users may stash pointer to offscreenBuffer and viewportClip PREVENT_COPY_AND_ASSIGN(LayerReorderer); public: // Create LayerReorderer for Fbo0 LayerReorderer(uint32_t width, uint32_t height, const Rect& repaintRect) Loading