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