1.Code optimization

Signed-off-by: zhoulisheng <635547767@qq.com>
This commit is contained in:
zhoulisheng 2022-04-13 14:50:14 +08:00
parent aa015129d2
commit 8803de9ec0
6 changed files with 36 additions and 130 deletions

View File

@ -17,53 +17,5 @@ import {handler} from '@ohos/imageknife/src/main/ets/components/imageknife/pngj/
arkWorker.parentPort.onmessage = handler arkWorker.parentPort.onmessage = handler
//import arkWorker from '@ohos.worker';
//import {UPNG} from '@ohos/imageknife/src/main/ets/components/imageknife/pngj/UPNG'
//
//arkWorker.parentPort.onmessage = function (e) {
// var data = e.data;
// switch (data.type) {
// case 'readPngImageAsync':
// console.log('readPngImageAsync worker start 1')
// var png = UPNG.decode(data.data);
// let array = png.data;
// let arrayData = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset)
// png.data = arrayData;
// let dataObj = { type: 'readPngImageAsync', data: png, receiver: data.data}
// arkWorker.parentPort.postMessage(dataObj, [png.data, data.data]);
// console.log('readPngImageAsync worker to main 1')
// break;
// case 'writePngWithStringAsync':
// console.log('writePngWithStringAsync worker start 1')
// let addInfo = data.info;
// let pngDecode = UPNG.decode(data.data);
// let newPng = UPNG.encodeWithString(addInfo, UPNG.toRGBA8(pngDecode), pngDecode.width, pngDecode.height, 0)
// let dataObj2 = { type: 'writePngWithStringAsync', data: newPng, receiver: data.data}
// arkWorker.parentPort.postMessage(dataObj2, [newPng, data.data]);
// console.log('writePngWithStringAsync worker to main 1')
// break;
// case 'writePngAsync':
// console.log('writePngAsync worker start 1')
// let pngDecode3 = UPNG.decode(data.data);
// let newPng3 = UPNG.encode(UPNG.toRGBA8(pngDecode3), pngDecode3.width, pngDecode3.height, 0)
// let dataObj3 = { type: 'writePngAsync', data: newPng3, receiver: data.data}
// arkWorker.parentPort.postMessage(dataObj3, [newPng3, data.data]);
// console.log('writePngAsync worker to main 1')
// break;
// case 'normal':
// arkWorker.parentPort.postMessage(data);
// break;
// case 'error':
// throw new Error('123');
// break;
// case 'buffer':
// let uint8Array = new Uint8Array(data.data);
// arkWorker.parentPort.postMessage(data, [data.data]);
//
// break;
// default:
//
// break
// }
//}

View File

@ -28,11 +28,11 @@ export class EngineKey implements Key {
// 内存缓存 缓存生成规则:是否会影响图片内容,不影响则通用(strategy onlyRetrieveFromCache isCacheable)为通用项目 // 内存缓存 缓存生成规则:是否会影响图片内容,不影响则通用(strategy onlyRetrieveFromCache isCacheable)为通用项目
// 生成规则 加载数据原 各类参数(排除监听 排除 占位图 失败占位图) // 生成规则 加载数据原 各类参数(排除监听 排除 占位图 失败占位图)
generateCacheKey(): string{ generateCacheKey(): string{
console.log('generateCacheKey 1');
let loadSrc = JSON.stringify(this.request.loadSrc); let loadSrc = JSON.stringify(this.request.loadSrc);
console.log('generateCacheKey 2');
let size = JSON.stringify(this.request.size); let size = JSON.stringify(this.request.size);
console.log('generateCacheKey 3');
let transformationsStr; let transformationsStr;
if(this.request && this.request.transformations) { if(this.request && this.request.transformations) {
for (let i = 0; i < this.request.transformations.length; i++) { for (let i = 0; i < this.request.transformations.length; i++) {
@ -43,24 +43,24 @@ export class EngineKey implements Key {
} }
} }
} }
console.log('generateCacheKey 4');
let dontAnimateFlag = JSON.stringify(this.request.dontAnimateFlag); let dontAnimateFlag = JSON.stringify(this.request.dontAnimateFlag);
console.log('generateCacheKey 5');
let key = "loadSrc=" + loadSrc + ";" + let key = "loadSrc=" + loadSrc + ";" +
"size=" + size + ";" + "size=" + size + ";" +
"transformations=" + transformationsStr + ";" + "transformations=" + transformationsStr + ";" +
"dontAnimateFlag=" + dontAnimateFlag + ";" "dontAnimateFlag=" + dontAnimateFlag + ";"
console.log('generateCacheKey 6');
return key; return key;
} }
// 磁盘缓存 缓存生成规则:是否会影响图片内容,不影响则通用(strategy onlyRetrieveFromCache isCacheable)为通用项目 // 磁盘缓存 缓存生成规则:是否会影响图片内容,不影响则通用(strategy onlyRetrieveFromCache isCacheable)为通用项目
// 生成规则 加载数据原 各类参数(排除监听 排除 占位图 失败占位图) // 生成规则 加载数据原 各类参数(排除监听 排除 占位图 失败占位图)
generateResourceKey(): string{ generateResourceKey(): string{
console.log('generateResourceKey 1');
let loadSrc = JSON.stringify(this.request.loadSrc); let loadSrc = JSON.stringify(this.request.loadSrc);
console.log('generateResourceKey 2');
let size = JSON.stringify(this.request.size); let size = JSON.stringify(this.request.size);
console.log('generateResourceKey 3');
let transformationsStr; let transformationsStr;
if(this.request && this.request.transformations) { if(this.request && this.request.transformations) {
for (let i = 0; i < this.request.transformations.length; i++) { for (let i = 0; i < this.request.transformations.length; i++) {
@ -71,14 +71,14 @@ export class EngineKey implements Key {
} }
} }
} }
console.log('generateResourceKey 4');
let dontAnimateFlag = JSON.stringify(this.request.dontAnimateFlag); let dontAnimateFlag = JSON.stringify(this.request.dontAnimateFlag);
console.log('generateResourceKey 5');
let key = "loadSrc=" + loadSrc + ";" + let key = "loadSrc=" + loadSrc + ";" +
"size=" + size + ";" + "size=" + size + ";" +
"transformations=" + transformationsStr + ";" + "transformations=" + transformationsStr + ";" +
"dontAnimateFlag=" + dontAnimateFlag + ";" "dontAnimateFlag=" + dontAnimateFlag + ";"
console.log('generateResourceKey 6');
return key; return key;
} }

View File

@ -204,7 +204,6 @@ export class ImageKnife {
// 正常加载 // 正常加载
call(request: RequestOption) { call(request: RequestOption) {
console.log("ImageKnife call")
// 添加全局监听 // 添加全局监听
if(this.defaultListener) { if(this.defaultListener) {
request.addListener(this.defaultListener) request.addListener(this.defaultListener)
@ -230,48 +229,32 @@ export class ImageKnife {
} }
loadResources(request: RequestOption) { loadResources(request: RequestOption) {
console.log("ImageKnife loadResources")
let factories; let factories;
let cacheKey; let cacheKey;
let transferKey; let transferKey;
let dataKey; let dataKey;
try { factories = new EngineKeyFactories();
factories = new EngineKeyFactories(); // 生成内存缓存key 内存 变换后磁盘
}catch(err){
console.log('ImageKnife loadResources1 err='+ err); cacheKey = factories.buildCacheKey(request);
}
// 生成内存缓存key 内存 变换后磁盘 // 生成磁盘缓存变换后数据key 变换后数据保存在磁盘
try {
cacheKey = factories.buildCacheKey(request); transferKey = factories.buildResourceKey(request);
}catch(err){
console.log('ImageKnife loadResources2 err='+ err); // 生成磁盘缓存源数据key 原始数据保存在磁盘
}
// 生成磁盘缓存变换后数据key 变换后数据保存在磁盘 dataKey = factories.buildDataKey(request);
try{
transferKey = factories.buildResourceKey(request); request.generateCacheKey = cacheKey;
}catch(err){ request.generateResourceKey = transferKey;
console.log('ImageKnife loadResources3 err='+ err); request.generateDataKey = dataKey;
}
// 生成磁盘缓存源数据key 原始数据保存在磁盘
try{
dataKey = factories.buildDataKey(request);
}catch(err){
console.log('ImageKnife loadResources4 err='+ err);
}
request.generateCacheKey = cacheKey;
request.generateResourceKey = transferKey;
request.generateDataKey = dataKey;
this.loadCacheManager(request); this.loadCacheManager(request);
} }
// 删除执行结束的running // 删除执行结束的running
removeRunning(request: RequestOption) { removeRunning(request: RequestOption) {
console.log('removeRunning request key='+
'request.generateCacheKey =' + request.generateCacheKey+
'request.generateResourceKey =' + request.generateResourceKey+
'request.generateDataKey =' + request.generateDataKey
)
let index = -1; let index = -1;
for (let i = 0; i < this.runningRequest.length; i++) { for (let i = 0; i < this.runningRequest.length; i++) {
let tempRunning = this.runningRequest[i]; let tempRunning = this.runningRequest[i];
@ -342,8 +325,6 @@ export class ImageKnife {
// 启动新线程 去磁盘取 去网络取 // 启动新线程 去磁盘取 去网络取
loadCacheManager(request: RequestOption) { loadCacheManager(request: RequestOption) {
console.log("ImageKnife loadCacheManager")
console.log("ImageKnife request ="+JSON.stringify(request))
if (this.keyNotEmpty(request)) { if (this.keyNotEmpty(request)) {
let hasRunningRequest = false; let hasRunningRequest = false;
for (let i = 0; i < this.runningRequest.length; i++) { for (let i = 0; i < this.runningRequest.length; i++) {
@ -357,20 +338,8 @@ export class ImageKnife {
} }
if (hasRunningRequest) { if (hasRunningRequest) {
this.pendingRequest.push(request); this.pendingRequest.push(request);
console.log('pendingRequest +1 !')
console.log('pendingRequest request key='+
'request.generateCacheKey =' + request.generateCacheKey+
'request.generateResourceKey =' + request.generateResourceKey+
'request.generateDataKey =' + request.generateDataKey
)
} else { } else {
this.runningRequest.push(request); this.runningRequest.push(request);
console.log('runningRequest +1 ! RequestManager.execute')
console.log('runningRequest request key='+
'request.generateCacheKey =' + request.generateCacheKey+
'request.generateResourceKey =' + request.generateResourceKey+
'request.generateDataKey =' + request.generateDataKey
)
// 不存在相同key的 任务可以并行 // 不存在相同key的 任务可以并行
RequestManager.execute(request, this.memoryCache, this.diskMemoryCache, this.dataFetch, this.resourceFetch) RequestManager.execute(request, this.memoryCache, this.diskMemoryCache, this.dataFetch, this.resourceFetch)
} }
@ -405,10 +374,7 @@ export class ImageKnife {
} }
parseSource(request: RequestOption) { parseSource(request: RequestOption) {
console.log("ImageKnife parseSource")
if ((typeof (request.loadSrc as image.PixelMap).isEditable) == 'boolean') { if ((typeof (request.loadSrc as image.PixelMap).isEditable) == 'boolean') {
console.log("ImageKnife parseSource PixelMap")
let imageKnifeData = new ImageKnifeData(); let imageKnifeData = new ImageKnifeData();
imageKnifeData.imageKnifeType = ImageKnifeData.PIXELMAP imageKnifeData.imageKnifeType = ImageKnifeData.PIXELMAP
imageKnifeData.imageKnifeValue = request.loadSrc as PixelMap imageKnifeData.imageKnifeValue = request.loadSrc as PixelMap
@ -416,12 +382,9 @@ export class ImageKnife {
} else } else
if (typeof request.loadSrc == 'string') { if (typeof request.loadSrc == 'string') {
// 进入三级缓存模型 // 进入三级缓存模型
console.log("ImageKnife parseSource string")
return this.loadResources(request); return this.loadResources(request);
} else { } else {
console.log("ImageKnife parseSource Resource")
let res = request.loadSrc as Resource; let res = request.loadSrc as Resource;
console.log("ImageKnife parseSource res="+JSON.stringify(res))
if (typeof res.id != 'undefined' && typeof res.type != 'undefined') { if (typeof res.id != 'undefined' && typeof res.type != 'undefined') {
//进入三级缓存模型 本地资源不参与磁盘缓存 //进入三级缓存模型 本地资源不参与磁盘缓存
let none = new NONE(); let none = new NONE();

View File

@ -19,31 +19,25 @@ export function handler (e) {
var data = e.data; var data = e.data;
switch (data.type) { switch (data.type) {
case 'readPngImageAsync': case 'readPngImageAsync':
console.log('readPngImageAsync worker start')
var png = UPNG.decode(data.data); var png = UPNG.decode(data.data);
let array = png.data; let array = png.data;
let arrayData = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset) let arrayData = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset)
png.data = arrayData; png.data = arrayData;
let dataObj = { type: 'readPngImageAsync', data: png, receiver: data.data} let dataObj = { type: 'readPngImageAsync', data: png, receiver: data.data}
arkWorker.parentPort.postMessage(dataObj, [png.data, data.data]); arkWorker.parentPort.postMessage(dataObj, [png.data, data.data]);
console.log('readPngImageAsync worker to main')
break; break;
case 'writePngWithStringAsync': case 'writePngWithStringAsync':
console.log('writePngWithStringAsync worker start')
let addInfo = data.info; let addInfo = data.info;
let pngDecode = UPNG.decode(data.data); let pngDecode = UPNG.decode(data.data);
let newPng = UPNG.encodeWithString(addInfo, UPNG.toRGBA8(pngDecode), pngDecode.width, pngDecode.height, 0) let newPng = UPNG.encodeWithString(addInfo, UPNG.toRGBA8(pngDecode), pngDecode.width, pngDecode.height, 0)
let dataObj2 = { type: 'writePngWithStringAsync', data: newPng, receiver: data.data} let dataObj2 = { type: 'writePngWithStringAsync', data: newPng, receiver: data.data}
arkWorker.parentPort.postMessage(dataObj2, [newPng, data.data]); arkWorker.parentPort.postMessage(dataObj2, [newPng, data.data]);
console.log('writePngWithStringAsync worker to main')
break; break;
case 'writePngAsync': case 'writePngAsync':
console.log('writePngAsync worker start')
let pngDecode3 = UPNG.decode(data.data); let pngDecode3 = UPNG.decode(data.data);
let newPng3 = UPNG.encode(UPNG.toRGBA8(pngDecode3), pngDecode3.width, pngDecode3.height, 0) let newPng3 = UPNG.encode(UPNG.toRGBA8(pngDecode3), pngDecode3.width, pngDecode3.height, 0)
let dataObj3 = { type: 'writePngAsync', data: newPng3, receiver: data.data} let dataObj3 = { type: 'writePngAsync', data: newPng3, receiver: data.data}
arkWorker.parentPort.postMessage(dataObj3, [newPng3, data.data]); arkWorker.parentPort.postMessage(dataObj3, [newPng3, data.data]);
console.log('writePngAsync worker to main')
break; break;
case 'normal': case 'normal':
arkWorker.parentPort.postMessage(data); arkWorker.parentPort.postMessage(data);

View File

@ -61,8 +61,7 @@ export class Pngj {
} }
readPngImageAsync(worker:ArkWorker.Worker, pngBuffer: ArrayBuffer, callback:PngCallback<ArrayBuffer, any>){ readPngImageAsync(worker:ArkWorker.Worker, pngBuffer: ArrayBuffer, callback:PngCallback<ArrayBuffer, any>){
console.log('readPngImageAsync start')
// let worker = new ArkWorker.Worker('workers/worker1.js', { type: 'classic', name: 'readPngImageAsync'})
worker.onerror = function(data){ worker.onerror = function(data){
} }
@ -89,13 +88,12 @@ export class Pngj {
var obj = { type: 'readPngImageAsync', data:pngBuffer} var obj = { type: 'readPngImageAsync', data:pngBuffer}
worker.postMessage(obj, [pngBuffer]) worker.postMessage(obj, [pngBuffer])
console.log('readPngImageAsync to worker')
} }
writePngWithStringAsync(worker:ArkWorker.Worker,addInfo:string, pngBuffer:ArrayBuffer, callback:PngCallback<ArrayBuffer,any>) { writePngWithStringAsync(worker:ArkWorker.Worker,addInfo:string, pngBuffer:ArrayBuffer, callback:PngCallback<ArrayBuffer,any>) {
console.log('writePngWithStringAsync start')
// let worker = new ArkWorker.Worker('workers/worker1.js', { type: 'classic', name: 'writePngWithStringAsync'})
worker.onerror = function(data){ worker.onerror = function(data){
} }
@ -122,13 +120,12 @@ export class Pngj {
var obj = { type: 'writePngWithStringAsync', data:pngBuffer, info: addInfo} var obj = { type: 'writePngWithStringAsync', data:pngBuffer, info: addInfo}
worker.postMessage(obj, [pngBuffer]) worker.postMessage(obj, [pngBuffer])
console.log('writePngWithStringAsync to worker')
} }
writePngAsync(worker:ArkWorker.Worker,pngBuffer:ArrayBuffer, callback:PngCallback<ArrayBuffer,any>) { writePngAsync(worker:ArkWorker.Worker,pngBuffer:ArrayBuffer, callback:PngCallback<ArrayBuffer,any>) {
console.log('writePngAsync start')
// let worker = new ArkWorker.Worker('workers/worker1.js', { type: 'classic', name: 'writePngAsync'})
worker.onerror = function(data){ worker.onerror = function(data){
} }
@ -155,7 +152,7 @@ export class Pngj {
var obj = { type: 'writePngAsync', data:pngBuffer} var obj = { type: 'writePngAsync', data:pngBuffer}
worker.postMessage(obj, [pngBuffer]) worker.postMessage(obj, [pngBuffer])
console.log('writePngAsync to worker')
} }
} }

View File

@ -489,7 +489,7 @@ export class RequestManager {
this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer)
}) })
.catch((err) => { .catch((err) => {
console.log("err=" + err); console.log("save diskLruCache error=" + err);
}) })
} else { } else {
// 进行变换 // 进行变换