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
29napi_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
235EXTERN_C_START
236static 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}
241EXTERN_C_END
242
243static 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
253extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
254