Pre Merge pull request !429 from Madi/master

This commit is contained in:
Madi 2024-11-15 04:20:28 +00:00 committed by Gitee
commit 59418c1e91
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
8 changed files with 80 additions and 57 deletions

View File

@ -3,6 +3,7 @@
- Dealing with exception scenarios where imageSource.getImageInfo return undefined - Dealing with exception scenarios where imageSource.getImageInfo return undefined
- Fix inability to parse Resource format images of other modules - Fix inability to parse Resource format images of other modules
- Improve the error logs - Improve the error logs
- Fix callback onLoadFailed when taskpool exception occurs
## 3.2.0-rc.2 ## 3.2.0-rc.2
- Added callback information for image loading - Added callback information for image loading

View File

@ -272,16 +272,16 @@ ImageKnifeComponent({ ImageKnifeOption: = {
objectFit: ImageFit.Contain, objectFit: ImageFit.Contain,
onLoadListener: { onLoadListener: {
onLoadStart: (req) => { onLoadStart: (req) => {
let startCallBackData = JSON.stringify(req?.getImageKnifeData()); let startCallBackData = JSON.stringify(req?.imageKnifeData);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
let failedBackData = res + ";" + JSON.stringify(req?.getImageKnifeData()); let failedBackData = res + ";" + JSON.stringify(req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
let successBackData = JSON.stringify(req?.getImageKnifeData()); let successBackData = JSON.stringify(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
let cancelBackData = res + ";" + JSON.stringify(req?.getImageKnifeData()); let cancelBackData = res + ";" + JSON.stringify(req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },

View File

@ -94,13 +94,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -124,13 +124,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -153,13 +153,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -185,13 +185,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -215,13 +215,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -244,13 +244,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -276,13 +276,13 @@ struct TestImageKnifeCallbackPage {
this.analyzeStartCallBackData(data); this.analyzeStartCallBackData(data);
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
}, },
onLoadSuccess: (data, imageData, req) => { onLoadSuccess: (data, imageData, req) => {
this.analyzeSuccessCallBackData(req?.getImageKnifeData()); this.analyzeSuccessCallBackData(req?.imageKnifeData);
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
this.analyzeFailedBackData(res, req?.getImageKnifeData()); this.analyzeFailedBackData(res, req?.imageKnifeData);
} }
}, },
border: { radius: 50 }, border: { radius: 50 },
@ -331,7 +331,7 @@ struct TestImageKnifeCallbackPage {
} }
analyzeStartCallBackData(req: ImageKnifeRequest | undefined) { analyzeStartCallBackData(req: ImageKnifeRequest | undefined) {
let data = req?.getImageKnifeData(); let data = req?.imageKnifeData;
if (data) { if (data) {
if (typeof req?.imageKnifeOption.loadSrc == 'string') { if (typeof req?.imageKnifeOption.loadSrc == 'string') {
this.url = req?.imageKnifeOption.loadSrc; this.url = req?.imageKnifeOption.loadSrc;

View File

@ -81,16 +81,16 @@ struct TestListImageKnifeCallbackPage {
console.log('listCache start:{ url:' + data?.imageKnifeOption.loadSrc + console.log('listCache start:{ url:' + data?.imageKnifeOption.loadSrc +
',componentWidth:' + data?.componentWidth + ',componentWidth:' + data?.componentWidth +
',componentHeight:' + data?.componentHeight + ',componentHeight:' + data?.componentHeight +
'},' + JSON.stringify(data?.getImageKnifeData())) '},' + JSON.stringify(data?.imageKnifeData))
}, },
onLoadFailed: (res, req) => { onLoadFailed: (res, req) => {
console.log('listCache onLoadFailed:res:' + res + ';' + JSON.stringify(req?.getImageKnifeData())) console.log('listCache onLoadFailed:res:' + res + ';' + JSON.stringify(req?.imageKnifeData))
}, },
onLoadSuccess: (data, imageData,req) => { onLoadSuccess: (data, imageData,req) => {
console.log('listCache onLoadSuccess:' + JSON.stringify(req?.getImageKnifeData())) console.log('listCache onLoadSuccess:' + JSON.stringify(req?.imageKnifeData))
}, },
onLoadCancel: (res, req) => { onLoadCancel: (res, req) => {
console.log('listCache onLoadCancel:res:' + res + ';' + JSON.stringify(req?.getImageKnifeData())) console.log('listCache onLoadCancel:res:' + res + ';' + JSON.stringify(req?.imageKnifeData))
} }
}, },
border: { radius: 50 }, border: { radius: 50 },

View File

@ -44,7 +44,7 @@ export default function ImageKnifeOptionTest() {
imageWidth: 0, imageWidth: 0,
imageHeight: 0, imageHeight: 0,
} }
let imageKnifeOption: ImageKnifeOption = new ImageKnifeOption({ let imageKnifeOption: ImageKnifeOption = {
loadSrc: $r("app.media.rabbit"), loadSrc: $r("app.media.rabbit"),
onLoadListener: { onLoadListener: {
onLoadFailed: (err) => { onLoadFailed: (err) => {
@ -58,7 +58,7 @@ export default function ImageKnifeOptionTest() {
return data; return data;
}, },
}, },
}) }
if (imageKnifeOption.onLoadListener && imageKnifeOption.onLoadListener.onLoadSuccess && imageKnifeOption.onLoadListener.onLoadFailed) { if (imageKnifeOption.onLoadListener && imageKnifeOption.onLoadListener.onLoadSuccess && imageKnifeOption.onLoadListener.onLoadFailed) {
imageKnifeOption.onLoadListener.onLoadSuccess(a,imageData); imageKnifeOption.onLoadListener.onLoadSuccess(a,imageData);
imageKnifeOption.onLoadListener.onLoadFailed(a); imageKnifeOption.onLoadListener.onLoadFailed(a);

View File

@ -53,10 +53,10 @@ export default function loadCallBackData() {
await new Promise<string>((resolve, reject) => { await new Promise<string>((resolve, reject) => {
imageKnifeOption.onLoadListener = { imageKnifeOption.onLoadListener = {
onLoadStart: (data) => { onLoadStart: (data) => {
startCallBack = data?.getImageKnifeData(); startCallBack = data?.imageKnifeData;
}, },
onLoadSuccess: (data, imageknifeData,req) => { onLoadSuccess: (data, imageknifeData,req) => {
successCallBack = req?.getImageKnifeData(); successCallBack = req?.imageKnifeData;
resolve("") resolve("")
}, },
onLoadFailed(err) { onLoadFailed(err) {
@ -93,7 +93,7 @@ export default function loadCallBackData() {
onLoadSuccess: (data, imageknifeData) => { onLoadSuccess: (data, imageknifeData) => {
}, },
onLoadFailed(res,req) { onLoadFailed(res,req) {
failedCallBack = req?.getImageKnifeData(); failedCallBack = req?.imageKnifeData;
resolve(res) resolve(res)
} }
} }

View File

@ -64,8 +64,8 @@ export class ImageKnifeDispatcher {
} }
//记录ImageKnifeRequestSource.SRC 开始内存检查的时间点 //记录ImageKnifeRequestSource.SRC 开始内存检查的时间点
if (requestSource == ImageKnifeRequestSource.SRC && request.getImageKnifeData()) { if (requestSource == ImageKnifeRequestSource.SRC && request.imageKnifeData) {
let timeInfo = request.getImageKnifeData()?.timeInfo let timeInfo = request.imageKnifeData?.timeInfo
if (timeInfo) { if (timeInfo) {
timeInfo.memoryCheckStartTime = memoryCheckStartTime; timeInfo.memoryCheckStartTime = memoryCheckStartTime;
timeInfo.memoryCheckEndTime = Date.now(); timeInfo.memoryCheckEndTime = Date.now();
@ -93,7 +93,7 @@ export class ImageKnifeDispatcher {
request.requestState = ImageKnifeRequestState.COMPLETE request.requestState = ImageKnifeRequestState.COMPLETE
// 回调请求开结束 // 回调请求开结束
if (request.imageKnifeOption.onLoadListener?.onLoadSuccess !== undefined) { if (request.imageKnifeOption.onLoadListener?.onLoadSuccess !== undefined) {
this.copyMemoryCacheInfo(memoryCache, request.getImageKnifeData()); this.copyMemoryCacheInfo(memoryCache, request.imageKnifeData);
request.imageKnifeOption.onLoadListener.onLoadSuccess(memoryCache.source, memoryCache, request) request.imageKnifeOption.onLoadListener.onLoadSuccess(memoryCache.source, memoryCache, request)
LogUtil.log('ImageKnife_DataTime_MemoryCache_onLoadSuccess:' + request.imageKnifeOption.loadSrc) LogUtil.log('ImageKnife_DataTime_MemoryCache_onLoadSuccess:' + request.imageKnifeOption.loadSrc)
} }
@ -131,7 +131,7 @@ export class ImageKnifeDispatcher {
afterCallData.timeInfo.memoryCheckEndTime = beforeCallData.timeInfo.memoryCheckEndTime; afterCallData.timeInfo.memoryCheckEndTime = beforeCallData.timeInfo.memoryCheckEndTime;
} }
} }
req.setImageKnifeData(afterCallData); req.imageKnifeData = afterCallData;
} }
private initCallData(request: ImageKnifeRequest) { private initCallData(request: ImageKnifeRequest) {
@ -151,7 +151,7 @@ export class ImageKnifeDispatcher {
callBackData.timeInfo = callBackTimeInfo; callBackData.timeInfo = callBackTimeInfo;
//跟隨請求保存回調信息點 //跟隨請求保存回調信息點
request.setImageKnifeData(callBackData); request.imageKnifeData = callBackData;
} }
enqueue(request: ImageKnifeRequest,isAnimator?: boolean): void { enqueue(request: ImageKnifeRequest,isAnimator?: boolean): void {
@ -295,8 +295,23 @@ export class ImageKnifeDispatcher {
if (isWatchProgress){ if (isWatchProgress){
emitter.off(Constants.PROGRESS_EMITTER + memoryKey) emitter.off(Constants.PROGRESS_EMITTER + memoryKey)
} }
this.executingJobMap.remove(memoryKey);
this.dispatchNextJob(); this.doTaskCallback({
pixelMap: undefined,
bufferSize: 0,
fileKey: '',
loadFail: 'Fail to requestJob in sub thread src=' + imageSrc + ' err=' + err,
imageKnifeData: {
source: '',
imageWidth: 0,
imageHeight: 0,
timeInfo: { requestEndTime: Date.now() },
errorInfo: {
phase: LoadPhase.PHASE_LOAD,
code: LoadPixelMapCode.IMAGE_CUSTOM_LOAD_FAILED_CODE,
}
}
}, requestList!, currentRequest, memoryKey, imageSrc, requestSource, isAnimator)
}) })
} else { //主线程请求 } else { //主线程请求
LogUtil.log('ImageKnife_DataTime_getAndShowImage_execute.start(mainthread):' + currentRequest.imageKnifeOption.loadSrc) LogUtil.log('ImageKnife_DataTime_getAndShowImage_execute.start(mainthread):' + currentRequest.imageKnifeOption.loadSrc)
@ -305,8 +320,23 @@ export class ImageKnifeDispatcher {
emitter.off(Constants.CALLBACK_EMITTER + memoryKey) emitter.off(Constants.CALLBACK_EMITTER + memoryKey)
LogUtil.error('Fail to requestJob in main thread src=' + imageSrc + ' err=' + err) LogUtil.error('Fail to requestJob in main thread src=' + imageSrc + ' err=' + err)
LogUtil.log('ImageKnife_DataTime_getAndShowImage.end:' + currentRequest.imageKnifeOption.loadSrc) LogUtil.log('ImageKnife_DataTime_getAndShowImage.end:' + currentRequest.imageKnifeOption.loadSrc)
this.executingJobMap.remove(memoryKey);
this.dispatchNextJob(); this.doTaskCallback({
pixelMap: undefined,
bufferSize: 0,
fileKey: '',
loadFail: 'Fail to requestJob in main thread src=' + imageSrc + ' err=' + err,
imageKnifeData: {
source: '',
imageWidth: 0,
imageHeight: 0,
timeInfo: { requestEndTime: Date.now() },
errorInfo: {
phase: LoadPhase.PHASE_LOAD,
code: LoadPixelMapCode.IMAGE_CUSTOM_LOAD_FAILED_CODE,
}
}
}, requestList!, currentRequest, memoryKey, imageSrc, requestSource, isAnimator)
}) })
} }
} }
@ -345,7 +375,7 @@ export class ImageKnifeDispatcher {
if (requestWithSource.source === ImageKnifeRequestSource.SRC && if (requestWithSource.source === ImageKnifeRequestSource.SRC &&
requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadFailed !== undefined && requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadFailed !== undefined &&
requestJobResult.loadFail) { requestJobResult.loadFail) {
this.assembleImageKnifeData(requestWithSource.request.getImageKnifeData(), requestJobResult.imageKnifeData, requestWithSource.request) this.assembleImageKnifeData(requestWithSource.request.imageKnifeData, requestJobResult.imageKnifeData, requestWithSource.request)
requestWithSource.request.imageKnifeOption.onLoadListener.onLoadFailed(requestJobResult.loadFail,requestWithSource.request); requestWithSource.request.imageKnifeOption.onLoadListener.onLoadFailed(requestJobResult.loadFail,requestWithSource.request);
LogUtil.log('ImageKnife_DataTime_getAndShowImage_onLoadFailed:'+currentRequest.imageKnifeOption.loadSrc) LogUtil.log('ImageKnife_DataTime_getAndShowImage_onLoadFailed:'+currentRequest.imageKnifeOption.loadSrc)
} }
@ -432,7 +462,7 @@ export class ImageKnifeDispatcher {
if (requestWithSource.request.imageKnifeOption.onLoadListener && if (requestWithSource.request.imageKnifeOption.onLoadListener &&
requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess) { requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess) {
// 回调请求成功 // 回调请求成功
this.assembleImageKnifeData(requestWithSource.request.getImageKnifeData(), imageKnifeData,requestWithSource.request); this.assembleImageKnifeData(requestWithSource.request.imageKnifeData, imageKnifeData,requestWithSource.request);
requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess(imageKnifeData.source, requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess(imageKnifeData.source,
saveCacheImageData, requestWithSource.request); saveCacheImageData, requestWithSource.request);
LogUtil.log('ImageKnife_DataTime_getAndShowImage_onLoadSuccess:'+currentRequest.imageKnifeOption.loadSrc) LogUtil.log('ImageKnife_DataTime_getAndShowImage_onLoadSuccess:'+currentRequest.imageKnifeOption.loadSrc)
@ -445,7 +475,7 @@ export class ImageKnifeDispatcher {
// 回调请求成功 // 回调请求成功
// 回调请求成功 // 回调请求成功
//设置失败回调的时间点 //设置失败回调的时间点
let callBackData = requestWithSource.request.getImageKnifeData(); let callBackData = requestWithSource.request.imageKnifeData;
if (requestJobResult.imageKnifeData && requestJobResult.imageKnifeData.timeInfo) { if (requestJobResult.imageKnifeData && requestJobResult.imageKnifeData.timeInfo) {
requestJobResult.imageKnifeData.timeInfo.requestCancelTime = Date.now(); requestJobResult.imageKnifeData.timeInfo.requestCancelTime = Date.now();
@ -484,7 +514,7 @@ export class ImageKnifeDispatcher {
break break
}else if (request.requestState == ImageKnifeRequestState.DESTROY && request.imageKnifeOption.onLoadListener?.onLoadCancel) { }else if (request.requestState == ImageKnifeRequestState.DESTROY && request.imageKnifeOption.onLoadListener?.onLoadCancel) {
//构建回调错误信息 //构建回调错误信息
let callBackData = request.getImageKnifeData(); let callBackData = request.imageKnifeData;
if (callBackData) { if (callBackData) {
let timeInfo: TimeInfo = ImageKnifeLoader.getTimeInfo(callBackData) let timeInfo: TimeInfo = ImageKnifeLoader.getTimeInfo(callBackData)
timeInfo.requestCancelTime = Date.now(); timeInfo.requestCancelTime = Date.now();

View File

@ -27,7 +27,7 @@ export class ImageKnifeRequest {
ImageKnifeRequestCallback: ImageKnifeRequestCallback ImageKnifeRequestCallback: ImageKnifeRequestCallback
componentVersion: number = 0 componentVersion: number = 0
headers: Map<string,Object> = new Map<string,Object>() headers: Map<string,Object> = new Map<string,Object>()
private imageCallBackData: ImageKnifeData | undefined = undefined; imageKnifeData?: ImageKnifeData
constructor(option: ImageKnifeOption, constructor(option: ImageKnifeOption,
uIAbilityContext: common.UIAbilityContext, uIAbilityContext: common.UIAbilityContext,
width: number, width: number,
@ -54,14 +54,6 @@ export class ImageKnifeRequest {
} }
}) })
} }
setImageKnifeData(data: ImageKnifeData) {
this.imageCallBackData = data;
}
getImageKnifeData(): ImageKnifeData | undefined {
return this.imageCallBackData
}
} }
export enum ImageKnifeRequestState { export enum ImageKnifeRequestState {