• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 #include "rs_test_util.h"
16 #include "pipeline/rs_render_node_gc.h"
17 
18 namespace OHOS::Rosen {
19 NodeId RSTestUtil::id = 0;
CreateSurfaceNode()20 std::shared_ptr<RSSurfaceRenderNode> RSTestUtil::CreateSurfaceNode()
21 {
22     id++;
23     RSSurfaceRenderNodeConfig config;
24     config.id = id;
25     config.name += std::to_string(id);
26     auto rsSurfaceRenderNode = std::make_shared<RSSurfaceRenderNode>(config);
27     csurf = IConsumerSurface::Create(config.name);
28     rsSurfaceRenderNode->GetRSSurfaceHandler()->SetConsumer(csurf);
29     rsSurfaceRenderNode->InitRenderParams();
30     std::weak_ptr<RSSurfaceRenderNode> surfaceRenderNode(rsSurfaceRenderNode);
31     sptr<IBufferConsumerListener> listener = new RSRenderServiceListener(surfaceRenderNode);
32     csurf->RegisterConsumerListener(listener);
33     return rsSurfaceRenderNode;
34 }
35 
CreateSurfaceNodeWithBuffer()36 std::shared_ptr<RSSurfaceRenderNode> RSTestUtil::CreateSurfaceNodeWithBuffer()
37 {
38     auto rsSurfaceRenderNode = CreateSurfaceNode();
39     const auto& surfaceConsumer = rsSurfaceRenderNode->GetRSSurfaceHandler()->GetConsumer();
40     auto producer = surfaceConsumer->GetProducer();
41     psurf = Surface::CreateSurfaceAsProducer(producer);
42     psurf->SetQueueSize(1);
43     sptr<SurfaceBuffer> buffer;
44     sptr<SyncFence> requestFence = SyncFence::INVALID_FENCE;
45     [[maybe_unused]] GSError ret = psurf->RequestBuffer(buffer, requestFence, requestConfig);
46     sptr<SyncFence> flushFence = SyncFence::INVALID_FENCE;
47     ret = psurf->FlushBuffer(buffer, flushFence, flushConfig);
48     OHOS::sptr<SurfaceBuffer> cbuffer;
49     Rect damage;
50     sptr<SyncFence> acquireFence = SyncFence::INVALID_FENCE;
51     int64_t timestamp = 0;
52     ret = surfaceConsumer->AcquireBuffer(cbuffer, acquireFence, timestamp, damage);
53     auto& surfaceHandler = *rsSurfaceRenderNode->GetRSSurfaceHandler();
54     surfaceHandler.SetBuffer(cbuffer, acquireFence, damage, timestamp);
55     auto drGPUContext = std::make_shared<Drawing::GPUContext>();
56     rsSurfaceRenderNode->SetDrawingGPUContext(drGPUContext.get());
57     return rsSurfaceRenderNode;
58 }
59 
InitRenderNodeGC()60 void RSTestUtil::InitRenderNodeGC()
61 {
62     auto& renderNodeGC = RSRenderNodeGC::Instance();
63     renderNodeGC.nodeBucket_ = std::queue<std::vector<RSRenderNode*>>();
64     renderNodeGC.drawableBucket_ = std::queue<std::vector<DrawableV2::RSRenderNodeDrawableAdapter*>>();
65 }
66 }
67