1 /*
2 * Copyright (c) 2021 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 #include "hdi_test_device.h"
17 #include <mutex>
18 #include "hdi_test_device_common.h"
19
20 namespace OHOS {
21 namespace HDI {
22 namespace DISPLAY {
23 namespace TEST {
GetInstance()24 HdiTestDevice &HdiTestDevice::GetInstance()
25 {
26 static HdiTestDevice device;
27 return device;
28 }
29
HotPlug(uint32_t outputId,bool connected,void * data)30 void HdiTestDevice::HotPlug(uint32_t outputId, bool connected, void *data)
31 {
32 DISPLAY_TEST_LOGD("outputId %d connected %d", outputId, connected);
33 DISPLAY_TEST_CHK_RETURN_NOT_VALUE((data == nullptr), DISPLAY_TEST_LOGE("the data is null ptr"));
34 HdiTestDevice *device = static_cast<HdiTestDevice *>(data);
35 if (connected) {
36 device->FindDisplayOrCreate(outputId);
37 }
38 DISPLAY_TEST_LOGD("end");
39 }
40
InitDevice()41 int32_t HdiTestDevice::InitDevice()
42 {
43 int ret = DeviceInitialize(&mDeviceFuncs);
44 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("DeviceInitialize Failed"));
45 DISPLAY_TEST_CHK_RETURN((mDeviceFuncs == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("device funcs is null"));
46 ret = LayerInitialize(&mLayerFuncs);
47 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("LayerInitialize Failed"));
48 DISPLAY_TEST_CHK_RETURN((mLayerFuncs == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("layer funcs is null"));
49 ret = GrallocInitialize(&mGrallocFuncs);
50 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("GrallocInitialize Failed"));
51 DISPLAY_TEST_CHK_RETURN((mGrallocFuncs == nullptr), DISPLAY_FAILURE, DISPLAY_TEST_LOGE("gralloc funcs is null"));
52
53 mDeviceFuncs->RegHotPlugCallback(HotPlug, static_cast<void *>(this));
54 return DISPLAY_SUCCESS;
55 }
56
GetDisplayFromId(uint32_t id)57 std::shared_ptr<HdiTestDisplay> HdiTestDevice::GetDisplayFromId(uint32_t id)
58 {
59 auto iter = mDisplays.find(id);
60 DISPLAY_TEST_CHK_RETURN((iter == mDisplays.end()), nullptr, DISPLAY_TEST_LOGD("can not find the display %d", id));
61 return mDisplays[id];
62 }
63
FindDisplayOrCreate(uint32_t id)64 std::shared_ptr<HdiTestDisplay> HdiTestDevice::FindDisplayOrCreate(uint32_t id)
65 {
66 int ret;
67 std::shared_ptr<HdiTestDisplay> display = GetDisplayFromId(id);
68 if (display == nullptr) {
69 DISPLAY_TEST_LOGD("the display not find will creat a display");
70 }
71 display = std::make_shared<HdiTestDisplay>(id, *mDeviceFuncs);
72 ret = display->Init();
73 DISPLAY_TEST_CHK_RETURN((ret != DISPLAY_SUCCESS), nullptr, DISPLAY_TEST_LOGE("can not init the display"));
74 mDisplays.emplace(id, display);
75 return display;
76 }
77
GetFirstDisplay()78 std::shared_ptr<HdiTestDisplay> HdiTestDevice::GetFirstDisplay()
79 {
80 DISPLAY_TEST_CHK_RETURN((mDisplays.begin() == mDisplays.end()), nullptr,
81 DISPLAY_TEST_LOGE("the mDisplays is empty"));
82 return mDisplays.begin()->second;
83 }
84
Clear()85 void HdiTestDevice::Clear()
86 {
87 for (auto const & iter : mDisplays) {
88 iter.second->Clear();
89 }
90 }
91 } // OHOS
92 } // HDI
93 } // DISPLAY
94 } // TEST
95