1 /*
2  * Copyright (c) 2023 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 "napi/native_api.h"
17 #include <GLES2/gl2.h>
18 #include <IPCKit/ipc_cparcel.h>
19 #include <ctime>
20 #include <native_buffer/native_buffer.h>
21 #include <native_image/native_image.h>
22 #include <native_window/external_window.h>
23 #include "nativewindow.h"
24 #include "hilog/log.h"
25 
26 #define SUCCESS 0
27 #define FAIL (-1)
28 
29 napi_property_descriptor desc[] = {
30     // native window test
31     {"testNativeWindowCreateNativeWindowNullptr", nullptr, testNativeWindowCreateNativeWindowNullptr, nullptr, nullptr,
32      nullptr, napi_default, nullptr},
33     {"testNativeWindowDestroyNativeWindowNullptr", nullptr, testNativeWindowDestroyNativeWindowNullptr, nullptr,
34      nullptr, nullptr, napi_default, nullptr},
35     {"testNativeWindowGetSurfaceIdNullptr", nullptr, testNativeWindowGetSurfaceIdNullptr, nullptr, nullptr, nullptr,
36      napi_default, nullptr},
37     {"testNativeWindowCreateNativeWindowFromSurfaceIdNullptr", nullptr,
38      testNativeWindowCreateNativeWindowFromSurfaceIdNullptr, nullptr, nullptr, nullptr, napi_default, nullptr},
39     {"testNativeWindowCreateNativeWindowFromSurfaceIdNormal", nullptr,
40      testNativeWindowCreateNativeWindowFromSurfaceIdNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
41     {"testNativeWindowCreateNativeWindowFromSurfaceIdSurfaceId", nullptr,
42      testNativeWindowCreateNativeWindowFromSurfaceIdSurfaceId, nullptr, nullptr, nullptr, napi_default, nullptr},
43 
44     {"testNativeWindowCreateNativeWindowBufferFromNativeBufferNullptr", nullptr,
45      testNativeWindowCreateNativeWindowBufferFromNativeBufferNullptr, nullptr, nullptr, nullptr, napi_default, nullptr},
46     {"testNativeWindowCreateNativeWindowBufferFromSurfaceBufferNullptr", nullptr,
47      testNativeWindowCreateNativeWindowBufferFromSurfaceBufferNullptr, nullptr, nullptr, nullptr, napi_default,
48      nullptr},
49     {"testNativeWindowDestroyNativeWindowBufferNullptr", nullptr, testNativeWindowDestroyNativeWindowBufferNullptr,
50      nullptr, nullptr, nullptr, napi_default, nullptr},
51     {"testNativeWindowGetBufferHandleFromNativeNullptr", nullptr, testNativeWindowGetBufferHandleFromNativeNullptr,
52      nullptr, nullptr, nullptr, napi_default, nullptr},
53     {"testNativeWindowCreateNativeWindowBufferFromNativeBufferNormal", nullptr,
54      testNativeWindowCreateNativeWindowBufferFromNativeBufferNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
55     {"testNativeWindowCreateNativeWindowBufferFromNativeBufferMuch", nullptr,
56      testNativeWindowCreateNativeWindowBufferFromNativeBufferMuch, nullptr, nullptr, nullptr, napi_default, nullptr},
57 
58     {"testNativeWindowNativeWindowRequestBufferNullptr", nullptr, testNativeWindowNativeWindowRequestBufferNullptr,
59      nullptr, nullptr, nullptr, napi_default, nullptr},
60     {"testNativeWindowNativeWindowAbortBufferNullptr", nullptr, testNativeWindowNativeWindowAbortBufferNullptr, nullptr,
61      nullptr, nullptr, napi_default, nullptr},
62     {"testNativeWindowNativeWindowRequestAbortBufferNormal", nullptr,
63      testNativeWindowNativeWindowRequestAbortBufferNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
64     {"testNativeWindowNativeWindowRequestAbortBufferAbnormal", nullptr,
65      testNativeWindowNativeWindowRequestAbortBufferAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
66     {"testNativeWindowNativeWindowRequestBufferFenceFdNormal", nullptr,
67      testNativeWindowNativeWindowRequestBufferFenceFdNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
68     {"testNativeWindowNativeWindowRequestBufferFenceFdAbnormal", nullptr,
69      testNativeWindowNativeWindowRequestBufferFenceFdAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
70     {"testNativeWindowNativeWindowRequestAbortBufferMax", nullptr, testNativeWindowNativeWindowRequestAbortBufferMax,
71      nullptr, nullptr, nullptr, napi_default, nullptr},
72     {"testNativeWindowNativeWindowRequestAbortBufferErrorCode", nullptr,
73      testNativeWindowNativeWindowRequestAbortBufferErrorCode, nullptr, nullptr, nullptr, napi_default, nullptr},
74 
75     {"testNativeWindowWriteToParcelErrptr", nullptr, testNativeWindowWriteToParcelErrptr, nullptr, nullptr, nullptr,
76      napi_default, nullptr},
77     {"testNativeWindowReadFromParcelErrptr", nullptr, testNativeWindowReadFromParcelErrptr, nullptr, nullptr, nullptr,
78      napi_default, nullptr},
79     {"testNativeWindowWRParcelNormal", nullptr, testNativeWindowWRParcelNormal, nullptr, nullptr, nullptr, napi_default,
80      nullptr},
81     {"testNativeWindowWriteToParcelAbNormal", nullptr, testNativeWindowWriteToParcelAbNormal, nullptr, nullptr, nullptr,
82      napi_default, nullptr},
83     {"testNativeWindowReadFromParcelAbNormal", nullptr, testNativeWindowReadFromParcelAbNormal, nullptr, nullptr,
84      nullptr, napi_default, nullptr},
85     {"testNativeWindowWRParcelDifferent", nullptr, testNativeWindowWRParcelDifferent, nullptr, nullptr, nullptr,
86      napi_default, nullptr},
87 
88     {"testNativeWindowNativeWindowFlushBufferNullptr", nullptr, testNativeWindowNativeWindowFlushBufferNullptr, nullptr,
89      nullptr, nullptr, napi_default, nullptr},
90     {"testNativeWindowNativeWindowFlushBufferNormal", nullptr, testNativeWindowNativeWindowFlushBufferNormal, nullptr,
91      nullptr, nullptr, napi_default, nullptr},
92     {"testNativeWindowNativeWindowFlushBufferAbnormal", nullptr, testNativeWindowNativeWindowFlushBufferAbnormal,
93      nullptr, nullptr, nullptr, napi_default, nullptr},
94     {"testNativeWindowGetLastFlushedBufferV2Nullptr", nullptr, testNativeWindowGetLastFlushedBufferV2Nullptr, nullptr,
95      nullptr, nullptr, napi_default, nullptr},
96     {"testNativeWindowGetLastFlushedBufferNullptr", nullptr, testNativeWindowGetLastFlushedBufferNullptr, nullptr,
97      nullptr, nullptr, napi_default, nullptr},
98     {"testNativeWindowGetLastFlushedBufferV2Normal", nullptr, testNativeWindowGetLastFlushedBufferV2Normal, nullptr,
99      nullptr, nullptr, napi_default, nullptr},
100     {"testNativeWindowGetLastFlushedBufferNormal", nullptr, testNativeWindowGetLastFlushedBufferNormal, nullptr,
101      nullptr, nullptr, napi_default, nullptr},
102 
103     {"testNativeWindowSetBufferHold", nullptr, testNativeWindowSetBufferHold, nullptr, nullptr, nullptr, napi_default,
104      nullptr},
105     {"testNativeWindowGetNativeObjectMagicNullptr", nullptr, testNativeWindowGetNativeObjectMagicNullptr, nullptr,
106      nullptr, nullptr, napi_default, nullptr},
107     {"testNativeWindowGetNativeObjectMagicNormal", nullptr, testNativeWindowGetNativeObjectMagicNormal, nullptr,
108      nullptr, nullptr, napi_default, nullptr},
109     {"testNativeWindowNativeObjectReferenceNullptr", nullptr, testNativeWindowNativeObjectReferenceNullptr, nullptr,
110      nullptr, nullptr, napi_default, nullptr},
111     {"testNativeWindowNativeObjectReferenceNormal", nullptr, testNativeWindowNativeObjectReferenceNormal, nullptr,
112      nullptr, nullptr, napi_default, nullptr},
113     {"testNativeWindowNativeObjectUnreferenceNullptr", nullptr, testNativeWindowNativeObjectUnreferenceNullptr, nullptr,
114      nullptr, nullptr, napi_default, nullptr},
115     {"testNativeWindowNativeObjectUnreferenceNormal", nullptr, testNativeWindowNativeObjectUnreferenceNormal, nullptr,
116      nullptr, nullptr, napi_default, nullptr},
117     {"testNativeWindowNativeWindowAttachBufferNullptr", nullptr, testNativeWindowNativeWindowAttachBufferNullptr,
118      nullptr, nullptr, nullptr, napi_default, nullptr},
119     {"testNativeWindowNativeWindowDetachBufferNullptr", nullptr, testNativeWindowNativeWindowDetachBufferNullptr,
120      nullptr, nullptr, nullptr, napi_default, nullptr},
121     {"testNativeWindowNativeWindowDetachBufferNormal", nullptr, testNativeWindowNativeWindowDetachBufferNormal, nullptr,
122      nullptr, nullptr, napi_default, nullptr},
123     {"testNativeWindowNativeWindowAttachBufferErrorCode", nullptr, testNativeWindowNativeWindowAttachBufferErrorCode,
124      nullptr, nullptr, nullptr, napi_default, nullptr},
125 
126     {"testNativeWindowNativeWindowAttachBufferNormal", nullptr, testNativeWindowNativeWindowAttachBufferNormal, nullptr,
127      nullptr, nullptr, napi_default, nullptr},
128     {"testNativeWindowNativeWindowDetachBufferErrorCode", nullptr, testNativeWindowNativeWindowDetachBufferErrorCode,
129      nullptr, nullptr, nullptr, napi_default, nullptr},
130 
131     {"testNativeWindowNativeWindowAtDetachDifferentBufferNormal", nullptr,
132      testNativeWindowNativeWindowAtDetachDifferentBufferNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
133     {"testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal", nullptr,
134      testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
135     {"testNativeWindowNativeWindowHandleOptNullptr", nullptr, testNativeWindowNativeWindowHandleOptNullptr, nullptr,
136      nullptr, nullptr, napi_default, nullptr},
137     {"testNativeWindowNativeWindowHandleOptSetGetBufferGeometryNormal", nullptr,
138      testNativeWindowNativeWindowHandleOptSetGetBufferGeometryNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
139     {"testNativeWindowNativeWindowHandleOptSetGetBufferGeometryAbnormal", nullptr,
140      testNativeWindowNativeWindowHandleOptSetGetBufferGeometryAbnormal, nullptr, nullptr, nullptr, napi_default,
141      nullptr},
142     {"testNativeWindowNativeWindowHandleOptSetGetFormatNormal", nullptr,
143      testNativeWindowNativeWindowHandleOptSetGetFormatNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
144     {"testNativeWindowNativeWindowHandleOptSetGetFormatAbnormal", nullptr,
145      testNativeWindowNativeWindowHandleOptSetGetFormatAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
146     {"testNativeWindowNativeWindowHandleOptSetGetUsageNormal", nullptr,
147      testNativeWindowNativeWindowHandleOptSetGetUsageNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
148     {"testNativeWindowNativeWindowHandleOptSetGetUsageAbnormal", nullptr,
149      testNativeWindowNativeWindowHandleOptSetGetUsageAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
150     {"testNativeWindowNativeWindowHandleOptSetGetStrideNormal", nullptr,
151      testNativeWindowNativeWindowHandleOptSetGetStrideNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
152     {"testNativeWindowNativeWindowHandleOptSetGetStrideAbnormal", nullptr,
153      testNativeWindowNativeWindowHandleOptSetGetStrideAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
154     {"testNativeWindowNativeWindowHandleOptSetGetSwapIntervalNormal", nullptr,
155      testNativeWindowNativeWindowHandleOptSetGetSwapIntervalNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
156     {"testNativeWindowNativeWindowHandleOptSetGetSwapIntervalAbnormal", nullptr,
157      testNativeWindowNativeWindowHandleOptSetGetSwapIntervalAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
158     {"testNativeWindowNativeWindowHandleOptSetGetColorGamutNormal", nullptr,
159      testNativeWindowNativeWindowHandleOptSetGetColorGamutNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
160     {"testNativeWindowNativeWindowHandleOptSetGetColorGamutAbnormal", nullptr,
161      testNativeWindowNativeWindowHandleOptSetGetColorGamutAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
162     {"testNativeWindowNativeWindowHandleOptSetGetTransformNormal", nullptr,
163      testNativeWindowNativeWindowHandleOptSetGetTransformNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
164     {"testNativeWindowNativeWindowHandleOptSetGetTransformAbnormal", nullptr,
165      testNativeWindowNativeWindowHandleOptSetGetTransformAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
166     {"testNativeWindowNativeWindowHandleOptSetUiTimeStampNormal", nullptr,
167      testNativeWindowNativeWindowHandleOptSetUiTimeStampNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
168     {"testNativeWindowNativeWindowHandleOptSetUiTimeStampAbnormal", nullptr,
169      testNativeWindowNativeWindowHandleOptSetUiTimeStampAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
170     {"testNativeWindowNativeWindowHandleOptGetBufferQueueSize", nullptr,
171      testNativeWindowNativeWindowHandleOptGetBufferQueueSize, nullptr, nullptr, nullptr, napi_default, nullptr},
172     {"testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessNormal", nullptr,
173      testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessNormal, nullptr, nullptr, nullptr, napi_default,
174      nullptr},
175     {"testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessAbnormal", nullptr,
176      testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessAbnormal, nullptr, nullptr, nullptr, napi_default,
177      nullptr},
178     {"testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessNormal", nullptr,
179      testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessNormal, nullptr, nullptr, nullptr, napi_default,
180      nullptr},
181     {"testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessAbnormal", nullptr,
182      testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessAbnormal, nullptr, nullptr, nullptr, napi_default,
183      nullptr},
184     {"testNativeWindowNativeWindowHandleOptSetGetSourceTypeNormal", nullptr,
185      testNativeWindowNativeWindowHandleOptSetGetSourceTypeNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
186     {"testNativeWindowNativeWindowHandleOptSetGetSourceTypeAbnormal", nullptr,
187      testNativeWindowNativeWindowHandleOptSetGetSourceTypeAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
188     {"testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeNormal", nullptr,
189      testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeNormal, nullptr, nullptr, nullptr, napi_default,
190      nullptr},
191     {"testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeAbnormal", nullptr,
192      testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeAbnormal, nullptr, nullptr, nullptr, napi_default,
193      nullptr},
194     {"testNativeWindowNativeWindowSetSetScalingModeV2Nullptr", nullptr,
195      testNativeWindowNativeWindowSetSetScalingModeV2Nullptr, nullptr, nullptr, nullptr, napi_default, nullptr},
196     {"testNativeWindowNativeWindowSetScalingModeV2ScalingMode", nullptr,
197      testNativeWindowNativeWindowSetScalingModeV2ScalingMode, nullptr, nullptr, nullptr, napi_default, nullptr},
198     {"testNativeWindowGetColorSpaceFirst", nullptr, testNativeWindowGetColorSpaceFirst, nullptr, nullptr, nullptr,
199      napi_default, nullptr},
200     {"testNativeWindowSetColorSpaceNormal", nullptr, testNativeWindowSetColorSpaceNormal, nullptr, nullptr, nullptr,
201      napi_default, nullptr},
202     {"testNativeWindowSetColorSpaceNullptr", nullptr, testNativeWindowSetColorSpaceNullptr, nullptr, nullptr, nullptr,
203      napi_default, nullptr},
204     {"testNativeWindowSetColorSpaceAbnormal", nullptr, testNativeWindowSetColorSpaceAbnormal, nullptr, nullptr, nullptr,
205      napi_default, nullptr},
206     {"testNativeWindowGetMetadataValueFirst", nullptr, testNativeWindowGetMetadataValueFirst, nullptr, nullptr, nullptr,
207      napi_default, nullptr},
208     {"testNativeWindowSetDynamicMetadataValue", nullptr, testNativeWindowSetDynamicMetadataValue, nullptr, nullptr,
209      nullptr, napi_default, nullptr},
210     {"testNativeWindowSetMetadataValueTimes", nullptr, testNativeWindowSetMetadataValueTimes, nullptr, nullptr, nullptr,
211      napi_default, nullptr},
212     {"testNativeWindowSetStaticMetadataValue", nullptr, testNativeWindowSetStaticMetadataValue, nullptr, nullptr,
213      nullptr, napi_default, nullptr},
214     {"testNativeWindowSetMetadataValue", nullptr, testNativeWindowSetMetadataValue, nullptr, nullptr, nullptr,
215      napi_default, nullptr},
216     {"testNativeWindowSetNullMetadataValue", nullptr, testNativeWindowSetNullMetadataValue, nullptr, nullptr, nullptr,
217      napi_default, nullptr},
218     {"testNativeWindowSetMetadataValueNullptr", nullptr, testNativeWindowSetMetadataValueNullptr, nullptr, nullptr,
219      nullptr, napi_default, nullptr},
220     {"testNativeWindowGetMetadataValueAbnormal", nullptr, testNativeWindowGetMetadataValueAbnormal, nullptr, nullptr,
221      nullptr, napi_default, nullptr},
222     {"testNativeWindowGetMetadataValueNullptr", nullptr, testNativeWindowGetMetadataValueNullptr, nullptr, nullptr,
223      nullptr, napi_default, nullptr},
224     {"testNativeWindowNativeWindowFlushBufferErrorCode", nullptr, testNativeWindowNativeWindowFlushBufferErrorCode,
225      nullptr, nullptr, nullptr, napi_default, nullptr},
226     {"testNativeWindowGetColorSpaceNullptr", nullptr, testNativeWindowGetColorSpaceNullptr, nullptr, nullptr, nullptr,
227      napi_default, nullptr},
228     {"testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampNormal", nullptr,
229      testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampNormal, nullptr, nullptr, nullptr, napi_default,
230      nullptr},
231     {"testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampAbNormal", nullptr,
232      testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampAbNormal, nullptr, nullptr, nullptr, napi_default,
233      nullptr}};
234 
235 EXTERN_C_START
Init(napi_env env, napi_value exports)236 static napi_value Init(napi_env env, napi_value exports)
237 {
238     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
239     return exports;
240 }
241 EXTERN_C_END
242 
243 static napi_module demoModule = {
244     .nm_version = 1,
245     .nm_flags = 0,
246     .nm_filename = nullptr,
247     .nm_register_func = Init,
248     .nm_modname = "nativewindow",
249     .nm_priv = ((void *)0),
250     .reserved = {0},
251 };
252 
RegisterModule(void)253 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
254