1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef RENDER_SERVICE_CORE_PIPELINE_PARALLEL_RENDER_RS_RENDER_TASK_H 17 #define RENDER_SERVICE_CORE_PIPELINE_PARALLEL_RENDER_RS_RENDER_TASK_H 18 19 #include <cstdint> 20 #include <memory> 21 #include <queue> 22 #include "pipeline/rs_base_render_node.h" 23 #include "pipeline/rs_display_render_node.h" 24 #include "pipeline/rs_paint_filter_canvas.h" 25 #include "pipeline/rs_surface_render_node.h" 26 27 namespace OHOS { 28 namespace Rosen { 29 class RSRenderTaskBase { 30 public: RSRenderTaskBase(std::shared_ptr<RSBaseRenderNode> node)31 explicit RSRenderTaskBase(std::shared_ptr<RSBaseRenderNode> node) : node_(node), loadId_(node->GetId()) {} 32 virtual ~RSRenderTaskBase() = default; SetIdx(uint64_t idx)33 void SetIdx(uint64_t idx) 34 { 35 loadId_ = idx; 36 } GetIdx()37 uint64_t GetIdx() const 38 { 39 return loadId_; 40 } GetNode()41 std::shared_ptr<RSBaseRenderNode> GetNode() const 42 { 43 return node_; 44 } 45 46 private: 47 std::shared_ptr<RSBaseRenderNode> node_; 48 uint64_t loadId_; 49 }; 50 51 class RSRenderTask : public RSRenderTaskBase { 52 public: 53 enum class RenderNodeStage { 54 PREPARE = 0, 55 PROCESS, 56 CACHE, 57 CALC_COST 58 }; RSRenderTask(RSSurfaceRenderNode & node,RenderNodeStage stage)59 explicit RSRenderTask(RSSurfaceRenderNode &node, RenderNodeStage stage) 60 : RSRenderTaskBase(node.shared_from_this()), stage_(stage) {} ~RSRenderTask()61 ~RSRenderTask() override {}; GetNodeStage()62 RenderNodeStage GetNodeStage() const 63 { 64 return stage_; 65 } 66 private: 67 RenderNodeStage stage_; 68 }; 69 70 class RSSuperRenderTask : public RSRenderTaskBase { 71 public: RSSuperRenderTask(RSDisplayRenderNode & node)72 explicit RSSuperRenderTask(RSDisplayRenderNode &node) 73 : RSRenderTaskBase(node.shared_from_this()) {} 74 explicit RSSuperRenderTask(std::shared_ptr<RSBaseRenderNode> node, uint64_t frameCount = 0) RSRenderTaskBase(node)75 : RSRenderTaskBase(node), frameCount_(frameCount) {} 76 ~RSSuperRenderTask() override; 77 78 void AddTask(std::unique_ptr<RSRenderTask> &&task); 79 GetTaskSize()80 int GetTaskSize() const 81 { 82 return tasks_.size(); 83 } 84 GetFrameCount()85 uint64_t GetFrameCount() const 86 { 87 return frameCount_; 88 } 89 90 std::shared_ptr<RSBaseRenderNode> GetSurfaceNode(); 91 std::unique_ptr<RSRenderTask> GetNextRenderTask(); 92 93 private: 94 std::queue<std::unique_ptr<RSRenderTask>> tasks_; 95 uint64_t frameCount_ = 0; 96 }; 97 98 class RSCompositionTask : public RSRenderTaskBase { 99 public: RSCompositionTask(std::shared_ptr<RSDisplayRenderNode> node)100 explicit RSCompositionTask(std::shared_ptr<RSDisplayRenderNode> node) : RSRenderTaskBase(node) {} ~RSCompositionTask()101 ~RSCompositionTask() override {}; 102 }; 103 104 } // namespace Rosen 105 } // namespace OHOS 106 #endif // RENDER_SERVICE_CORE_PIPELINE_PARALLEL_RENDER_RS_RENDER_TASK_H