• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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