Skip to content

Commit

Permalink
perf: some uncertain modifications
Browse files Browse the repository at this point in the history
  • Loading branch information
hongfaqiu committed Jun 26, 2023
1 parent 80d8597 commit a53c115
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 39 deletions.
39 changes: 11 additions & 28 deletions packages/TIFFImageryProvider/src/TIFFImageryProvider.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Event, GeographicTilingScheme, Credit, Rectangle, ImageryLayerFeatureInfo, Math as CMath, DeveloperError, defined } from "cesium";
import { Event, GeographicTilingScheme, Credit, Rectangle, ImageryLayerFeatureInfo, Math as CMath, DeveloperError, defined, ImageryProvider } from "cesium";
import GeoTIFF, { Pool, fromUrl, fromBlob, GeoTIFFImage } from 'geotiff';

import { addColorScale, plot } from './plotty'
Expand Down Expand Up @@ -132,7 +132,7 @@ function getWorkerPool() {
return workerPool;
}

export class TIFFImageryProvider {
export class TIFFImageryProvider extends ImageryProvider {
ready: boolean;
tilingScheme: GeographicTilingScheme;
rectangle: Rectangle;
Expand All @@ -142,15 +142,15 @@ export class TIFFImageryProvider {
maximumLevel: number;
minimumLevel: number;
credit: Credit;
private _error: Event;
errorEvent: Event;
readyPromise: Promise<boolean>;
private _destroyed = false;
_source!: GeoTIFF;
private _imageCount!: number;
_images: (GeoTIFFImage | null)[] = [];
_imagesCache: Record<string, {
time: number;
data: ImageData | HTMLCanvasElement | HTMLImageElement;
data: ImageBitmap | HTMLCanvasElement | HTMLImageElement;
}> = {};
bands: Record<number, {
min: number;
Expand All @@ -169,11 +169,12 @@ export class TIFFImageryProvider {
/** Deprecated */
url?: string | File | Blob;
}) {
super();
this.hasAlphaChannel = options.hasAlphaChannel ?? true;
this.maximumLevel = options.maximumLevel ?? 18;
this.minimumLevel = options.minimumLevel ?? 0;
this.credit = new Credit(options.credit || "", false);
this._error = new Event();
this.errorEvent = new Event();

this._workerFarm = new WorkerFarm();
this._cacheTime = options.cache ?? 60 * 1000;
Expand All @@ -186,15 +187,6 @@ export class TIFFImageryProvider {
}
}

/**
* Gets an event that will be raised if an error is encountered during processing.
* @memberof GeoJsonDataSource.prototype
* @type {Event}
*/
get errorEvent() {
return this._error
}

get isDestroyed() {
return this._destroyed
}
Expand Down Expand Up @@ -361,7 +353,7 @@ export class TIFFImageryProvider {
}
} catch (e) {
console.error(e);
this._error.raiseEvent(e);
this.errorEvent.raiseEvent(e);
}
this.readyPromise = Promise.resolve(true);
this.ready = true;
Expand Down Expand Up @@ -456,7 +448,7 @@ export class TIFFImageryProvider {
height: this.tileHeight
};
} catch(error) {
this._error.raiseEvent(error);
this.errorEvent.raiseEvent(error);
throw error;
}
}
Expand All @@ -483,7 +475,7 @@ export class TIFFImageryProvider {
return undefined;
}

let result: ImageData | HTMLImageElement
let result: ImageBitmap | HTMLImageElement

if (multi || convertToRGB) {
const opts = {
Expand Down Expand Up @@ -520,16 +512,7 @@ export class TIFFImageryProvider {
}

const image = new Image();
if (this.plot.canvas instanceof HTMLCanvasElement) {
image.src = this.plot.canvas.toDataURL();
} else {
const imgBitmap = this.plot.canvas.transferToImageBitmap();
canvas.width = imgBitmap.width;
canvas.height = imgBitmap.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(imgBitmap, 0, 0);
image.src = canvas.toDataURL();
}
image.src = this.plot.canvas.toDataURL();
result = image;
}

Expand All @@ -548,7 +531,7 @@ export class TIFFImageryProvider {
return result;
} catch (e) {
console.error(e);
this._error.raiseEvent(e);
this.errorEvent.raiseEvent(e);
throw e;
}
}
Expand Down
18 changes: 9 additions & 9 deletions packages/TIFFImageryProvider/src/plotty/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ function hasOwnProperty(obj: any, prop: string) {

function defaultFor(arg: any, val: any) { return typeof arg !== 'undefined' ? arg : val; }

function create3DContext(canvas: HTMLCanvasElement | OffscreenCanvas, optAttribs: { premultipliedAlpha: boolean; }) {
function create3DContext(canvas: HTMLCanvasElement, optAttribs: { premultipliedAlpha: boolean; }) {
const names = ['webgl', 'experimental-webgl'];
let context: WebGLRenderingContext | null= null;
for (let ii = 0; ii < names.length; ++ii) {
Expand Down Expand Up @@ -251,13 +251,13 @@ void main() {
*
*/
class plot {
canvas: HTMLCanvasElement | OffscreenCanvas;
canvas: HTMLCanvasElement;
currentDataset: DataSet;
datasetCollection: Record<string, DataSet>;
gl: WebGLRenderingContext | null;
program: WebGLProgram;
texCoordBuffer: WebGLBuffer;
ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
ctx: CanvasRenderingContext2D;
displayRange: number[];
applyDisplayRange: boolean;
matrix: number[];
Expand All @@ -282,8 +282,8 @@ class plot {
if (defaultFor(options.useWebGL, true)) {
// Try to create a webgl context in a temporary canvas to see if webgl and
// required OES_texture_float is supported
if (create3DContext(new OffscreenCanvas(512, 512), {premultipliedAlpha: false}) !== null) {
const gl = create3DContext(this.canvas, {premultipliedAlpha: false});
const gl = create3DContext(this.canvas, { premultipliedAlpha: false });
if (gl !== null) {
this.gl = gl;
this.program = createProgram(gl, vertexShaderSource, fragmentShaderSource);
gl.useProgram(this.program);
Expand Down Expand Up @@ -466,9 +466,9 @@ class plot {
/**
* Set the canvas to draw to. When no canvas is supplied, a new canvas element
* is created.
* @param {HTMLCanvasElement | OffscreenCanvas} [canvas] the canvas element to render to.
* @param {HTMLCanvasElement} [canvas] the canvas element to render to.
*/
setCanvas(canvas: HTMLCanvasElement | OffscreenCanvas) {
setCanvas(canvas: HTMLCanvasElement) {
this.canvas = canvas || document.createElement('canvas');
}

Expand Down Expand Up @@ -503,9 +503,9 @@ class plot {

/**
* Get the canvas that is currently rendered to.
* @returns {HTMLCanvasElement | OffscreenCanvas} the canvas that is currently rendered to.
* @returns {HTMLCanvasElement} the canvas that is currently rendered to.
*/
getCanvas(): HTMLCanvasElement | OffscreenCanvas {
getCanvas(): HTMLCanvasElement {
return this.canvas;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/TIFFImageryProvider/src/plotty/typing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type PlotOptions = {
/**
* The canvas to render to.
*/
canvas?: HTMLCanvasElement | OffscreenCanvas;
canvas?: HTMLCanvasElement;

/**
* The raster data to render.
Expand Down
2 changes: 1 addition & 1 deletion packages/TIFFImageryProvider/src/worker-farm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ async function sendMessage(worker: Worker, payload: { data: TypedArray[], opts:
id: msgId,
payload,
};
return new Promise<ImageData>(function (resolve, reject) {
return new Promise<ImageBitmap>(function (resolve, reject) {
// save callbacks for later
resolves[msgId] = resolve;
rejects[msgId] = reject;
Expand Down

0 comments on commit a53c115

Please sign in to comment.