1.Code optimization
Signed-off-by: zhoulisheng <635547767@qq.com>
This commit is contained in:
parent
aa015129d2
commit
8803de9ec0
|
@ -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
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,34 +229,23 @@ 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();
|
||||||
}catch(err){
|
|
||||||
console.log('ImageKnife loadResources1 err='+ err);
|
|
||||||
}
|
|
||||||
// 生成内存缓存key 内存 变换后磁盘
|
// 生成内存缓存key 内存 变换后磁盘
|
||||||
try {
|
|
||||||
cacheKey = factories.buildCacheKey(request);
|
cacheKey = factories.buildCacheKey(request);
|
||||||
}catch(err){
|
|
||||||
console.log('ImageKnife loadResources2 err='+ err);
|
|
||||||
}
|
|
||||||
// 生成磁盘缓存变换后数据key 变换后数据保存在磁盘
|
// 生成磁盘缓存变换后数据key 变换后数据保存在磁盘
|
||||||
try{
|
|
||||||
transferKey = factories.buildResourceKey(request);
|
transferKey = factories.buildResourceKey(request);
|
||||||
}catch(err){
|
|
||||||
console.log('ImageKnife loadResources3 err='+ err);
|
|
||||||
}
|
|
||||||
// 生成磁盘缓存源数据key 原始数据保存在磁盘
|
// 生成磁盘缓存源数据key 原始数据保存在磁盘
|
||||||
try{
|
|
||||||
dataKey = factories.buildDataKey(request);
|
dataKey = factories.buildDataKey(request);
|
||||||
}catch(err){
|
|
||||||
console.log('ImageKnife loadResources4 err='+ err);
|
|
||||||
}
|
|
||||||
request.generateCacheKey = cacheKey;
|
request.generateCacheKey = cacheKey;
|
||||||
request.generateResourceKey = transferKey;
|
request.generateResourceKey = transferKey;
|
||||||
request.generateDataKey = dataKey;
|
request.generateDataKey = dataKey;
|
||||||
|
@ -267,11 +255,6 @@ export class ImageKnife {
|
||||||
|
|
||||||
// 删除执行结束的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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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 {
|
||||||
// 进行变换
|
// 进行变换
|
||||||
|
|
Loading…
Reference in New Issue