diff --git a/OAT.xml b/OAT.xml
index 582e32b42f0e523179994eeb5be84f083e602749..65d905c7bf2f969a5b99baa41b212124553b691e 100644
--- a/OAT.xml
+++ b/OAT.xml
@@ -514,6 +514,7 @@ Note:If the text contains special characters, please escape them according to th
+
diff --git a/code/BasicFeature/Native/NdkNativeWindow/README_zh.md b/code/BasicFeature/Native/NdkNativeWindow/README_zh.md
index 294e72d284a30a949149f42e39587931de2dfbfa..fd41ec25213ec575d02a39bb7710e0fd22d29689 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/README_zh.md
+++ b/code/BasicFeature/Native/NdkNativeWindow/README_zh.md
@@ -8,11 +8,13 @@
> 本示例XComponent接口使用方法已停止演进,推荐使用方法请参考[ArkTSXComponent示例](../ArkTSXComponent/README_zh.md)。
### 效果预览
-| 主页 | 改变矩形框颜色 | 生产buffer | 获取可用帧回调次数 |
-|----------------------------------------------|---------------------------------------------------|---------------------------------------------------|-----------------------------------------------------------|
-|  |  |  |  |
-| attachbuffer | detachbuffer | fit模式(手机) | 拉伸模式(手机) |
-|  |  |  |  |
+| 主页 | 改变矩形框颜色 | 生产buffer | 获取可用帧回调次数 |
+|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------|-----------------------------------------------------------|
+|  |  |  |  |
+| attachbuffer | detachbuffer | fit模式(手机) | 拉伸模式(手机) |
+|  |  |  |  |
+| clean cache |
+|  |
使用说明
@@ -25,6 +27,7 @@
6. 点击页面底部”attachbuffer“, 在cachebuffer大于0时将buffer添加到nativewindow中,attachedbuffer数值加1,cachebuffer数值减1;cachebuffer为0时不做处理。(需要点第五步按钮更新数值)
7. 点击页面底部”detachbuffer", 在attachedbuffer大于0时将buffer添加到缓存区cachebuffer中,attachedbuffer数值减1,cachebuffer数值加1; attachedbuffer为0时不做处理。(需要点第五步按钮更新数值)
8. 点击页面顶部"Change ScalingMode"按钮,在支持fit模式的设备可以切换色块居中显示或平铺显示,开发板不支持fit模式。
+9. 点击页面底部“clean cache”按钮,将清理矩形框填充区域的NativeWindow缓存;
### 工程目录
@@ -60,30 +63,31 @@
涉及到的相关接口:
-| 接口名 | 描述 |
-| -------- | -------- |
-| OH_NativeWindow_CreateNativeWindow (void *pSurface) | 创建OHNativeWindow实例,每次调用都会产生一个新的OHNativeWindow实例 |
-| OH_NativeWindow_DestroyNativeWindow (OHNativeWindow *window) | 将OHNativeWindow对象的引用计数减1,当引用计数为0的时候,该OHNativeWindow对象会被析构掉 |
-| OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer (OH_NativeBuffer *nativeBuffer) | 创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例 |
-| OH_NativeWindow_DestroyNativeWindowBuffer (OHNativeWindowBuffer *buffer) | 将OHNativeWindowBuffer对象的引用计数减1,当引用计数为0的时候,该OHNativeWindowBuffer对象会被析构掉 |
-| OH_NativeWindow_NativeWindowRequestBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd) | 通过OHNativeWindow对象申请一块OHNativeWindowBuffer,用以内容生产 |
-| OH_NativeWindow_NativeWindowFlushBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer, int fenceFd, Region region) | 通过OHNativeWindow将生产好内容的OHNativeWindowBuffer放回到Buffer队列中,用以内容消费 |
-| OH_NativeWindow_GetLastFlushedBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer) | 从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer |
-| OH_NativeWindow_NativeWindowHandleOpt (OHNativeWindow *window, int code,...) | 设置/获取OHNativeWindow的属性,包括设置/获取宽高、内容格式等 |
-| OH_NativeWindow_GetBufferHandleFromNative (OHNativeWindowBuffer *buffer) | 通过OHNativeWindowBuffer获取该buffer的BufferHandle指针 |
-| OH_NativeBuffer_SetColorSpace (OH_NativeBuffer *buffer, OH_NativeBuffer_ColorSpace colorSpace) | 为OH_NativeBuffer设置颜色空间属性 |
-| OH_NativeImage_SetOnFrameAvailableListener (OH_NativeImage *image, OH_OnFrameAvailableListener listener) | 设置帧可用回调 |
-| OH_NativeImage_UnsetOnFrameAvailableListener (OH_NativeImage *image) | 取消设置帧可用回调 |
+| 接口名 | 描述 |
+| -------- |--------------------------------------------------------------------------------------------------------|
+| OH_NativeWindow_CreateNativeWindow (void *pSurface) | 创建OHNativeWindow实例,每次调用都会产生一个新的OHNativeWindow实例 |
+| OH_NativeWindow_DestroyNativeWindow (OHNativeWindow *window) | 将OHNativeWindow对象的引用计数减1,当引用计数为0的时候,该OHNativeWindow对象会被析构掉 |
+| OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer (OH_NativeBuffer *nativeBuffer) | 创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例 |
+| OH_NativeWindow_DestroyNativeWindowBuffer (OHNativeWindowBuffer *buffer) | 将OHNativeWindowBuffer对象的引用计数减1,当引用计数为0的时候,该OHNativeWindowBuffer对象会被析构掉 |
+| OH_NativeWindow_NativeWindowRequestBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd) | 通过OHNativeWindow对象申请一块OHNativeWindowBuffer,用以内容生产 |
+| OH_NativeWindow_NativeWindowFlushBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer, int fenceFd, Region region) | 通过OHNativeWindow将生产好内容的OHNativeWindowBuffer放回到Buffer队列中,用以内容消费 |
+| OH_NativeWindow_GetLastFlushedBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer) | 从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer |
+| OH_NativeWindow_NativeWindowHandleOpt (OHNativeWindow *window, int code,...) | 设置/获取OHNativeWindow的属性,包括设置/获取宽高、内容格式等 |
+| OH_NativeWindow_GetBufferHandleFromNative (OHNativeWindowBuffer *buffer) | 通过OHNativeWindowBuffer获取该buffer的BufferHandle指针 |
+| OH_NativeBuffer_SetColorSpace (OH_NativeBuffer *buffer, OH_NativeBuffer_ColorSpace colorSpace) | 为OH_NativeBuffer设置颜色空间属性 |
+| OH_NativeImage_SetOnFrameAvailableListener (OH_NativeImage *image, OH_OnFrameAvailableListener listener) | 设置帧可用回调 |
+| OH_NativeImage_UnsetOnFrameAvailableListener (OH_NativeImage *image) | 取消设置帧可用回调 |
| OH_NativeImage_AcquireNativeWindow (OH_NativeImage *image) | 获取与OH_NativeImage相关联的OHNativeWindow指针。 该OHNativeWindow后续不再需要时需要调用OH_NativeWindow_DestroyNativeWindow释放 |
-| OH_NativeWindow_GetSurfaceId (OHNativeWindow *window, uint64_t *surfaceId) | 获取surfaceId |
-| OH_NativeWindow_CreateNativeWindowFromSurfaceId (uint64_t surfaceId, OHNativeWindow **window) | 通过surfaceId获取对应的OHNativeWindow |
-| OH_NativeBuffer_MapPlanes (OH_NativeBuffer *buffer, void **virAddr, OH_NativeBuffer_Planes *outPlanes) | 将OH_NativeBuffer对应的多通道ION内存映射到进程空间 |
-| OH_NativeBuffer_FromNativeWindowBuffer (OHNativeWindowBuffer *nativeWindowBuffer, OH_NativeBuffer **buffer) | 将OHNativeWindowBuffer实例转换为OH_NativeBuffer实例 |
-| OH_NativeWindow_NativeWindowAttachBuffer(OHNativeWindow *window, OHNativeWindowBuffer *buffer) | 将缓存区OHNativeWindowBuffer添加到OHNativeWindow中 |
-| OH_NativeWindow_NativeWindowDetachBuffer(OHNativeWindow *window, OHNativeWindowBuffer *buffer) | 将OHNativeWindow中的buffer移除,放置到缓存区中 |
-| OH_NativeWindow_WriteToParcel(OHNativeWindow* window, OHIPCParcel* parcel)| 向OHIPCParcel对象中写入一个OHNativeWindow对象|
-| OH_NativeWindow_ReadFromParcel(OHIPCParcel *parcel, OHNativeWindow **window)| 从OHIPCParcel对象中读取一个OHNativeWindow对象|
-| OH_NativeWindow_NativeWindowSetScalingModeV2(OHNativeWindow *window, OHScalingModeV2 scalingMode)| 为OHNativeWindow设置显示模式|
+| OH_NativeWindow_GetSurfaceId (OHNativeWindow *window, uint64_t *surfaceId) | 获取surfaceId |
+| OH_NativeWindow_CreateNativeWindowFromSurfaceId (uint64_t surfaceId, OHNativeWindow **window) | 通过surfaceId获取对应的OHNativeWindow |
+| OH_NativeBuffer_MapPlanes (OH_NativeBuffer *buffer, void **virAddr, OH_NativeBuffer_Planes *outPlanes) | 将OH_NativeBuffer对应的多通道ION内存映射到进程空间 |
+| OH_NativeBuffer_FromNativeWindowBuffer (OHNativeWindowBuffer *nativeWindowBuffer, OH_NativeBuffer **buffer) | 将OHNativeWindowBuffer实例转换为OH_NativeBuffer实例 |
+| OH_NativeWindow_NativeWindowAttachBuffer(OHNativeWindow *window, OHNativeWindowBuffer *buffer) | 将缓存区OHNativeWindowBuffer添加到OHNativeWindow中 |
+| OH_NativeWindow_NativeWindowDetachBuffer(OHNativeWindow *window, OHNativeWindowBuffer *buffer) | 将OHNativeWindow中的buffer移除,放置到缓存区中 |
+| OH_NativeWindow_WriteToParcel(OHNativeWindow* window, OHIPCParcel* parcel)| 向OHIPCParcel对象中写入一个OHNativeWindow对象 |
+| OH_NativeWindow_ReadFromParcel(OHIPCParcel *parcel, OHNativeWindow **window)| 从OHIPCParcel对象中读取一个OHNativeWindow对象 |
+| OH_NativeWindow_NativeWindowSetScalingModeV2(OHNativeWindow *window, OHScalingModeV2 scalingMode)| 为OHNativeWindow设置显示模式 |
+| OH_NativeWindow_CleanCache(OHNativeWindow *window)| 为OHNativeWindow清理buffer缓存 |
详细的接口说明请参考[NativeWindow](https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-arkgraphics2d/_o_h___native_image.md),[NativeImage](https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-arkgraphics2d/_o_h___native_image.md),[NativeBuffer](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/native-apis/_o_h___native_buffer.md)。
@@ -98,8 +102,8 @@ XComponent NativeWindow NativeImage EGL。
### 约束与限制
1. 本示例仅支持标准系统上运行;
-2. 本示例为Stage模型,已适配API version 12版本SDK,SDK版本号5.0.0.19及以上版本,镜像版本号支持5.0.0.19及以上版本;
-3. 本示例需要使用DevEco Studio 4.0 Beta2 版本号(4.1.3.400)及以上版本才可编译运行。
+2. 本示例为Stage模型,已适配API version 18版本SDK,SDK版本号5.1.0.54及以上版本,镜像版本号支持5.1.0.54及以上版本;
+3. 本示例需要使用DevEco Studio 5.0.2 Release 版本号(5.0.7.210)及以上版本才可编译运行。
### 下载
如需单独下载本工程,执行如下命令:
diff --git a/code/BasicFeature/Native/NdkNativeWindow/build-profile.json5 b/code/BasicFeature/Native/NdkNativeWindow/build-profile.json5
index 4a6f21f792fc0fc64f738d032513190c239af6c7..b151a5bec5e34f8521264969f864606399ce1668 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/build-profile.json5
+++ b/code/BasicFeature/Native/NdkNativeWindow/build-profile.json5
@@ -20,8 +20,8 @@
{
"name": "default",
"signingConfig": "default",
- "compileSdkVersion": 14,
- "compatibleSdkVersion": 14,
+ "compileSdkVersion": 18,
+ "compatibleSdkVersion": 18,
"runtimeOS": "OpenHarmony",
}
]
diff --git a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.cpp b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.cpp
index f69d9178a515ff867469d2b9179322596880556b..1ae99208154f467c8c5a09253b1bb4ec05cc26d1 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.cpp
+++ b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.cpp
@@ -91,6 +91,7 @@ bool NativeRender::Export(napi_env env, napi_value exports)
napi_property_descriptor desc[] = {
{ "DrawColor", nullptr, NativeRender::NapiOnDraw, nullptr, nullptr, nullptr, napi_default, nullptr },
+ { "CleanCache", nullptr, NativeRender::NapiOnCleanCache, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "ChangeScalingMode", nullptr, NativeRender::NapiOnChangeScalingMode, nullptr, nullptr, nullptr,
napi_default, nullptr },
};
@@ -140,6 +141,12 @@ napi_value NativeRender::NapiOnDraw(napi_env env, napi_callback_info info)
return nullptr;
}
+napi_value NativeRender::NapiOnCleanCache(napi_env env, napi_callback_info info)
+{
+ NativeRender::GetInstance()->CleanCache();
+ return nullptr;
+}
+
napi_value NativeRender::NapiOnChangeScalingMode(napi_env env, napi_callback_info info)
{
NativeRender::GetInstance()->ChangeScalingMode();
@@ -260,6 +267,11 @@ void NativeRender::ChangeColor()
DrawBaseColor();
}
+void NativeRender::CleanCache()
+{
+ OH_NativeWindow_CleanCache(nativeWindow_);
+}
+
void NativeRender::ChangeScalingMode()
{
flagFit_ = !flagFit_;
diff --git a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.h b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.h
index 25ddd46640d22a94e02b2fa04d93214c5171bccb..7f6b454e12e1f70c139f722d2f0539bdf8d36452 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.h
+++ b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/cpp/NativeRender.h
@@ -28,12 +28,14 @@ public:
static napi_value GetNativeRender(napi_env env, napi_callback_info info);
static napi_value NapiOnDraw(napi_env env, napi_callback_info info);
static napi_value NapiOnChangeScalingMode(napi_env env, napi_callback_info info);
+ static napi_value NapiOnCleanCache(napi_env env, napi_callback_info info);
static void Release();
bool Export(napi_env env, napi_value exports);
void DrawBaseColor();
void ChangeColor();
void ChangeScalingMode();
void SetNativeWindow(OHNativeWindow* nativeWindow, uint64_t width, uint64_t height);
+ void CleanCache();
private:
void NativeBufferApi();
diff --git a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/interface/NativeWindowContext.ts b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/interface/NativeWindowContext.ts
index 7a1dfe24b8f3d8a1f6acf8cf7c804973ef13a2ef..59b96cd5da035c7a4597a89be260421f27dc5d12 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/interface/NativeWindowContext.ts
+++ b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/interface/NativeWindowContext.ts
@@ -39,4 +39,5 @@ export default interface NativeWindowContext {
GetBufferQueueSize(): number;
GetAttachBufferCount(): number;
GetCacheBufferCount(): number;
+ CleanCache(): number;
};
diff --git a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/pages/Index.ets b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/pages/Index.ets
index ff69360f918b713f0d3a3ea141aa2f19c6572881..ebf3ad2e935e0fc3df0965d954737fcc7d06d4fc 100644
--- a/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/pages/Index.ets
+++ b/code/BasicFeature/Native/NdkNativeWindow/entry/src/main/ets/pages/Index.ets
@@ -158,16 +158,28 @@ struct Index {
}
})
.height(60)
- Button(`attach buffer`)
- .fontSize('14fp')
- .fontWeight(500)
- .margin({ bottom: 24 })
- .onClick(() => {
- if (this.nativeWindowContext) {
- this.nativeWindowContext.AttachBuffer();
- }
- })
- .height(40)
+ Row() {
+ Button(`attach buffer`)
+ .fontSize('14fp')
+ .fontWeight(500)
+ .margin({ bottom: 24 })
+ .onClick(() => {
+ if (this.nativeWindowContext) {
+ this.nativeWindowContext.AttachBuffer();
+ }
+ })
+ .height(40)
+ Button(`clean cache`)
+ .fontSize('14fp')
+ .fontWeight(500)
+ .margin({ bottom: 24 })
+ .onClick(() => {
+ if (this.nativeWindowContext) {
+ this.nativeWindowContext.CleanCache();
+ }
+ })
+ .height(40)
+ }
Button(`dettach buffer`)
.fontSize('14fp')
.fontWeight(500)
diff --git a/code/BasicFeature/Native/NdkNativeWindow/screenshots/device/CleanCache.jpg b/code/BasicFeature/Native/NdkNativeWindow/screenshots/device/CleanCache.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8b7787713209b83de920ca2f469ab66567ee7209
Binary files /dev/null and b/code/BasicFeature/Native/NdkNativeWindow/screenshots/device/CleanCache.jpg differ