1.taskpool执行异常时,回调onLoadFailed
2.调整imageKnifeData为public作用域,以及命名 Signed-off-by: madixin <madixin@huawei.com>
This commit is contained in:
parent
a45fb6af7d
commit
328257bb96
|
@ -3,6 +3,7 @@
|
|||
- Dealing with exception scenarios where imageSource.getImageInfo return undefined
|
||||
- Fix inability to parse Resource format images of other modules
|
||||
- Improve the error logs
|
||||
- Fix callback onLoadFailed when taskpool exception occurs
|
||||
|
||||
## 3.2.0-rc.2
|
||||
- Added callback information for image loading
|
||||
|
|
|
@ -272,16 +272,16 @@ ImageKnifeComponent({ ImageKnifeOption: = {
|
|||
objectFit: ImageFit.Contain,
|
||||
onLoadListener: {
|
||||
onLoadStart: (req) => {
|
||||
let startCallBackData = JSON.stringify(req?.getImageKnifeData());
|
||||
let startCallBackData = JSON.stringify(req?.imageKnifeData);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
let failedBackData = res + ";" + JSON.stringify(req?.getImageKnifeData());
|
||||
let failedBackData = res + ";" + JSON.stringify(req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
let successBackData = JSON.stringify(req?.getImageKnifeData());
|
||||
let successBackData = JSON.stringify(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
let cancelBackData = res + ";" + JSON.stringify(req?.getImageKnifeData());
|
||||
let cancelBackData = res + ";" + JSON.stringify(req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
|
|
@ -94,13 +94,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -124,13 +124,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -153,13 +153,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -185,13 +185,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -215,13 +215,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -244,13 +244,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -276,13 +276,13 @@ struct TestImageKnifeCallbackPage {
|
|||
this.analyzeStartCallBackData(data);
|
||||
},
|
||||
onLoadFailed: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
},
|
||||
onLoadSuccess: (data, imageData, req) => {
|
||||
this.analyzeSuccessCallBackData(req?.getImageKnifeData());
|
||||
this.analyzeSuccessCallBackData(req?.imageKnifeData);
|
||||
},
|
||||
onLoadCancel: (res, req) => {
|
||||
this.analyzeFailedBackData(res, req?.getImageKnifeData());
|
||||
this.analyzeFailedBackData(res, req?.imageKnifeData);
|
||||
}
|
||||
},
|
||||
border: { radius: 50 },
|
||||
|
@ -331,7 +331,7 @@ struct TestImageKnifeCallbackPage {
|
|||
}
|
||||
|
||||
analyzeStartCallBackData(req: ImageKnifeRequest | undefined) {
|
||||
let data = req?.getImageKnifeData();
|
||||
let data = req?.imageKnifeData;
|
||||
if (data) {
|
||||
if (typeof req?.imageKnifeOption.loadSrc == 'string') {
|
||||
this.url = req?.imageKnifeOption.loadSrc;
|
||||
|
|
|
@ -81,16 +81,16 @@ struct TestListImageKnifeCallbackPage {
|
|||
console.log('listCache start:{ url:' + data?.imageKnifeOption.loadSrc +
|
||||
',componentWidth:' + data?.componentWidth +
|
||||
',componentHeight:' + data?.componentHeight +
|
||||
'},' + JSON.stringify(data?.getImageKnifeData()))
|
||||
'},' + JSON.stringify(data?.imageKnifeData))
|
||||
},
|
||||
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) => {
|
||||
console.log('listCache onLoadSuccess:' + JSON.stringify(req?.getImageKnifeData()))
|
||||
console.log('listCache onLoadSuccess:' + JSON.stringify(req?.imageKnifeData))
|
||||
},
|
||||
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 },
|
||||
|
|
|
@ -44,7 +44,7 @@ export default function ImageKnifeOptionTest() {
|
|||
imageWidth: 0,
|
||||
imageHeight: 0,
|
||||
}
|
||||
let imageKnifeOption: ImageKnifeOption = new ImageKnifeOption({
|
||||
let imageKnifeOption: ImageKnifeOption = {
|
||||
loadSrc: $r("app.media.rabbit"),
|
||||
onLoadListener: {
|
||||
onLoadFailed: (err) => {
|
||||
|
@ -58,7 +58,7 @@ export default function ImageKnifeOptionTest() {
|
|||
return data;
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
if (imageKnifeOption.onLoadListener && imageKnifeOption.onLoadListener.onLoadSuccess && imageKnifeOption.onLoadListener.onLoadFailed) {
|
||||
imageKnifeOption.onLoadListener.onLoadSuccess(a,imageData);
|
||||
imageKnifeOption.onLoadListener.onLoadFailed(a);
|
||||
|
|
|
@ -53,10 +53,10 @@ export default function loadCallBackData() {
|
|||
await new Promise<string>((resolve, reject) => {
|
||||
imageKnifeOption.onLoadListener = {
|
||||
onLoadStart: (data) => {
|
||||
startCallBack = data?.getImageKnifeData();
|
||||
startCallBack = data?.imageKnifeData;
|
||||
},
|
||||
onLoadSuccess: (data, imageknifeData,req) => {
|
||||
successCallBack = req?.getImageKnifeData();
|
||||
successCallBack = req?.imageKnifeData;
|
||||
resolve("")
|
||||
},
|
||||
onLoadFailed(err) {
|
||||
|
@ -93,7 +93,7 @@ export default function loadCallBackData() {
|
|||
onLoadSuccess: (data, imageknifeData) => {
|
||||
},
|
||||
onLoadFailed(res,req) {
|
||||
failedCallBack = req?.getImageKnifeData();
|
||||
failedCallBack = req?.imageKnifeData;
|
||||
resolve(res)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,8 +64,8 @@ export class ImageKnifeDispatcher {
|
|||
}
|
||||
|
||||
//记录ImageKnifeRequestSource.SRC 开始内存检查的时间点
|
||||
if (requestSource == ImageKnifeRequestSource.SRC && request.getImageKnifeData()) {
|
||||
let timeInfo = request.getImageKnifeData()?.timeInfo
|
||||
if (requestSource == ImageKnifeRequestSource.SRC && request.imageKnifeData) {
|
||||
let timeInfo = request.imageKnifeData?.timeInfo
|
||||
if (timeInfo) {
|
||||
timeInfo.memoryCheckStartTime = memoryCheckStartTime;
|
||||
timeInfo.memoryCheckEndTime = Date.now();
|
||||
|
@ -93,7 +93,7 @@ export class ImageKnifeDispatcher {
|
|||
request.requestState = ImageKnifeRequestState.COMPLETE
|
||||
// 回调请求开结束
|
||||
if (request.imageKnifeOption.onLoadListener?.onLoadSuccess !== undefined) {
|
||||
this.copyMemoryCacheInfo(memoryCache, request.getImageKnifeData());
|
||||
this.copyMemoryCacheInfo(memoryCache, request.imageKnifeData);
|
||||
request.imageKnifeOption.onLoadListener.onLoadSuccess(memoryCache.source, memoryCache, request)
|
||||
LogUtil.log('ImageKnife_DataTime_MemoryCache_onLoadSuccess:' + request.imageKnifeOption.loadSrc)
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ export class ImageKnifeDispatcher {
|
|||
afterCallData.timeInfo.memoryCheckEndTime = beforeCallData.timeInfo.memoryCheckEndTime;
|
||||
}
|
||||
}
|
||||
req.setImageKnifeData(afterCallData);
|
||||
req.imageKnifeData = afterCallData;
|
||||
}
|
||||
|
||||
private initCallData(request: ImageKnifeRequest) {
|
||||
|
@ -151,7 +151,7 @@ export class ImageKnifeDispatcher {
|
|||
callBackData.timeInfo = callBackTimeInfo;
|
||||
|
||||
//跟隨請求保存回調信息點
|
||||
request.setImageKnifeData(callBackData);
|
||||
request.imageKnifeData = callBackData;
|
||||
}
|
||||
|
||||
enqueue(request: ImageKnifeRequest,isAnimator?: boolean): void {
|
||||
|
@ -295,8 +295,23 @@ export class ImageKnifeDispatcher {
|
|||
if (isWatchProgress){
|
||||
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 { //主线程请求
|
||||
LogUtil.log('ImageKnife_DataTime_getAndShowImage_execute.start(mainthread):' + currentRequest.imageKnifeOption.loadSrc)
|
||||
|
@ -305,8 +320,23 @@ export class ImageKnifeDispatcher {
|
|||
emitter.off(Constants.CALLBACK_EMITTER + memoryKey)
|
||||
LogUtil.error('Fail to requestJob in main thread src=' + imageSrc + ' err=' + err)
|
||||
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 &&
|
||||
requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadFailed !== undefined &&
|
||||
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);
|
||||
LogUtil.log('ImageKnife_DataTime_getAndShowImage_onLoadFailed:'+currentRequest.imageKnifeOption.loadSrc)
|
||||
}
|
||||
|
@ -432,7 +462,7 @@ export class ImageKnifeDispatcher {
|
|||
if (requestWithSource.request.imageKnifeOption.onLoadListener &&
|
||||
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,
|
||||
saveCacheImageData, requestWithSource.request);
|
||||
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) {
|
||||
requestJobResult.imageKnifeData.timeInfo.requestCancelTime = Date.now();
|
||||
|
@ -484,7 +514,7 @@ export class ImageKnifeDispatcher {
|
|||
break
|
||||
}else if (request.requestState == ImageKnifeRequestState.DESTROY && request.imageKnifeOption.onLoadListener?.onLoadCancel) {
|
||||
//构建回调错误信息
|
||||
let callBackData = request.getImageKnifeData();
|
||||
let callBackData = request.imageKnifeData;
|
||||
if (callBackData) {
|
||||
let timeInfo: TimeInfo = ImageKnifeLoader.getTimeInfo(callBackData)
|
||||
timeInfo.requestCancelTime = Date.now();
|
||||
|
|
|
@ -27,7 +27,7 @@ export class ImageKnifeRequest {
|
|||
ImageKnifeRequestCallback: ImageKnifeRequestCallback
|
||||
componentVersion: number = 0
|
||||
headers: Map<string,Object> = new Map<string,Object>()
|
||||
private imageCallBackData: ImageKnifeData | undefined = undefined;
|
||||
imageKnifeData?: ImageKnifeData
|
||||
constructor(option: ImageKnifeOption,
|
||||
uIAbilityContext: common.UIAbilityContext,
|
||||
width: number,
|
||||
|
@ -54,14 +54,6 @@ export class ImageKnifeRequest {
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
setImageKnifeData(data: ImageKnifeData) {
|
||||
this.imageCallBackData = data;
|
||||
}
|
||||
|
||||
getImageKnifeData(): ImageKnifeData | undefined {
|
||||
return this.imageCallBackData
|
||||
}
|
||||
}
|
||||
|
||||
export enum ImageKnifeRequestState {
|
||||
|
|
Loading…
Reference in New Issue