@univerjs/engine-render
Advanced tools
Comparing version 0.2.11 to 0.2.12
@@ -103,1 +103,8 @@ import { BooleanNumber, GridType, IDocStyleBase, IDocumentLayout, IOffset, IParagraphStyle, IReferenceSource, IScale, ISectionBreakBase, ISize, ITextStyle, ITransformState, LocaleService } from '@univerjs/core'; | ||
} | ||
export interface IAfterRender$Info { | ||
frameTimeMetric: Record<string, number | number[]>; | ||
tags: { | ||
scrolling: boolean; | ||
} & Record<string, any>; | ||
} | ||
export type ITimeMetric = [string, number]; |
@@ -0,20 +1,27 @@ | ||
import { Disposable } from '@univerjs/core'; | ||
export declare const DEFAULT_FRAME_SAMPLE_SIZE = 60; | ||
export declare const DEFAULT_FRAME_LIST_SIZE: number; | ||
export interface IBasicFrameInfo { | ||
FPS: number; | ||
frameTime: number; | ||
elapsedTime: number; | ||
} | ||
export interface IExtendFrameInfo extends IBasicFrameInfo { | ||
[key: string]: any; | ||
scrolling: boolean; | ||
} | ||
export interface ISummaryFrameInfo { | ||
FPS: ISummaryMetric; | ||
frameTime: ISummaryMetric; | ||
[key: string]: ISummaryMetric; | ||
} | ||
export interface ISummaryMetric { | ||
avg: number; | ||
min: number; | ||
max: number; | ||
} | ||
/** | ||
* Copyright 2023-present DreamNum Inc. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
/** | ||
* Performance monitor tracks rolling average frame-time and frame-time variance over a user defined sliding-window | ||
*/ | ||
export declare class PerformanceMonitor { | ||
export declare class PerformanceMonitor extends Disposable { | ||
private _enabled; | ||
@@ -24,8 +31,20 @@ private _rollingFrameTime; | ||
/** | ||
* constructor | ||
* @param frameSampleSize The number of samples required to saturate the sliding window | ||
* Counting frame in a second. | ||
*/ | ||
private _frameCountInLastSecond; | ||
/** | ||
* The millisecond value of the last second. For counting frame in a second. | ||
*/ | ||
private _lastSecondTimeMs; | ||
/** | ||
* The FPS values recorded in the past 1 second. | ||
*/ | ||
private _recFPSValueLastSecond; | ||
/** | ||
* @param {number} frameSampleSize The number of samples required to saturate the sliding window | ||
*/ | ||
constructor(frameSampleSize?: number); | ||
dispose(): void; | ||
/** | ||
* Returns the average frame time in milliseconds over the sliding window (or the subset of frames sampled so far) | ||
* Returns the average frame time in milliseconds of the sliding window (or the subset of frames sampled so far) | ||
*/ | ||
@@ -38,3 +57,3 @@ get averageFrameTime(): number; | ||
/** | ||
* Returns the frame time of the most recent frame | ||
* Returns the frame time of the last recent frame. | ||
*/ | ||
@@ -59,7 +78,9 @@ get instantaneousFrameTime(): number; | ||
/** | ||
* Samples current frame | ||
* @param timeMs A timestamp in milliseconds of the current frame to compare with other frames | ||
* Samples current frame, set averageFPS instantaneousFrameTime | ||
* this method is called each frame by engine renderLoop --> endFrame. | ||
* @param timestamp A timestamp in milliseconds of the current frame to compare with other frames | ||
*/ | ||
sampleFrame(timeMs?: number): void; | ||
Now(): number; | ||
sampleFrame(timestamp?: number): void; | ||
endFrame(timestamp: number): void; | ||
now(): number; | ||
/** | ||
@@ -88,3 +109,3 @@ * Enables contributions to the sliding window sample set | ||
*/ | ||
average: number; | ||
averageFrameTime: number; | ||
/** | ||
@@ -95,2 +116,6 @@ * Current variance | ||
protected _samples: number[]; | ||
/** | ||
* for isStaturated | ||
* max value of _sampleCount is length of _samples | ||
*/ | ||
protected _sampleCount: number; | ||
@@ -105,6 +130,10 @@ protected _pos: number; | ||
/** | ||
* Calc average frameTime and variance. | ||
*/ | ||
calcAverageFrameTime(): void; | ||
/** | ||
* Adds a sample to the sample set | ||
* @param v The sample value | ||
* @param frameTime The sample value | ||
*/ | ||
add(v: number): void; | ||
addFrameTime(frameTime: number): void; | ||
/** | ||
@@ -111,0 +140,0 @@ * Returns previously added values or null if outside of history or outside the sliding window domain |
@@ -131,6 +131,7 @@ import { IRange, IRangeWithCoord, IScale, ISelectionCellWithMergeInfo, IStyleBase, LocaleService, Nullable } from '@univerjs/core'; | ||
/** | ||
* 如果 range 有相交, 那么扩展到第一组 range 中. | ||
* @param ranges | ||
* If there is an intersection in ranges to the mainRanges, extend it to the first set of ranges. | ||
* @param {IRange[]} mainRanges target ranges | ||
* @param {IRange[]} ranges | ||
*/ | ||
export declare function mergeRangeIfIntersects(mainRanges: IRange[], ranges: IRange[]): IRange[]; | ||
export declare function expandRangeIfIntersects(mainRanges: IRange[], ranges: IRange[]): IRange[]; | ||
export declare function clampRanges(range: IRange): { | ||
@@ -137,0 +138,0 @@ startRow: number; |
@@ -19,3 +19,4 @@ /** | ||
Mandatory = "Mandatory", | ||
Hyphen = "Hyphen" | ||
Hyphen = "Hyphen", | ||
Link = "Link" | ||
} | ||
@@ -22,0 +23,0 @@ export declare class Break { |
@@ -6,3 +6,2 @@ import { Nullable } from '@univerjs/core'; | ||
import { Lang } from '../../hyphenation/lang'; | ||
export declare function isLetter(char: string): boolean; | ||
export declare class LineBreakerHyphenEnhancer implements IBreakPoints { | ||
@@ -19,5 +18,5 @@ private _lineBreaker; | ||
private _hyphenSlice; | ||
private _content; | ||
content: string; | ||
constructor(_lineBreaker: LineBreaker, _hyphen: Hyphen, _lang: Lang, _doNotHyphenateCaps?: boolean); | ||
nextBreakPoint(): Nullable<Break>; | ||
} |
@@ -58,3 +58,3 @@ import { ICustomDecorationForInterceptor, ICustomRangeForInterceptor, IDisposable, IDocumentBody, ITextRun, Nullable, DocumentDataModel } from '@univerjs/core'; | ||
getTable(index: number): import('@univerjs/core').ITable | undefined; | ||
getCustomRangeRaw(index: number): import('@univerjs/core').ICustomRange | undefined; | ||
getCustomRangeRaw(index: number): import('@univerjs/core').ICustomRange<Record<string, any>> | undefined; | ||
getCustomRange(index: number): Nullable<ICustomRangeForInterceptor>; | ||
@@ -61,0 +61,0 @@ getCustomDecorationRaw(index: number): import('@univerjs/core').ICustomDecoration | undefined; |
@@ -11,3 +11,3 @@ import { IRange, IScale } from '@univerjs/core'; | ||
get zIndex(): number; | ||
draw(ctx: UniverRenderingContext, parentScale: IScale, spreadsheetSkeleton: SpreadsheetSkeleton, diffRanges: IRange[], { viewRanges, checkOutOfViewBound }: IDrawInfo): void; | ||
draw(ctx: UniverRenderingContext, _parentScale: IScale, spreadsheetSkeleton: SpreadsheetSkeleton, diffRanges: IRange[], { viewRanges, checkOutOfViewBound }: IDrawInfo): void; | ||
} |
@@ -8,4 +8,4 @@ import { IRange, IScale } from '@univerjs/core'; | ||
Z_INDEX: number; | ||
draw(ctx: UniverRenderingContext, parentScale: IScale, spreadsheetSkeleton: SpreadsheetSkeleton, diffRanges?: IRange[]): void; | ||
draw(ctx: UniverRenderingContext, _parentScale: IScale, spreadsheetSkeleton: SpreadsheetSkeleton, diffRanges: IRange[]): void; | ||
private _getOverflowExclusion; | ||
} |
@@ -8,3 +8,3 @@ import { IRange, IScale } from '@univerjs/core'; | ||
uKey: string; | ||
draw(ctx: UniverRenderingContext, parentScale: IScale, skeleton: SpreadsheetSkeleton, diffRanges?: IRange[] | undefined): void; | ||
draw(ctx: UniverRenderingContext, _parentScale: IScale, skeleton: SpreadsheetSkeleton, diffRanges: IRange[] | undefined): void; | ||
} |
import { IScale } from '@univerjs/core'; | ||
import { UniverRenderingContext } from '../../../context'; | ||
import { SpreadsheetSkeleton } from '../sheet-skeleton'; | ||
import { IARowCfg, IARowCfgObj, IColumnStyleCfg, IRowStyleCfg } from '../interfaces.ts'; | ||
import { IARowCfg, IARowCfgObj, IColumnStyleCfg, IRowStyleCfg } from '../interfaces'; | ||
import { SheetExtension } from './sheet-extension'; | ||
@@ -6,0 +6,0 @@ export interface IRowsHeaderCfgParam { |
@@ -7,2 +7,6 @@ import { IRange } from '@univerjs/core'; | ||
} | ||
/** | ||
* for distinguish doc & slides extensions, now only used when metric performance. | ||
*/ | ||
export declare const SHEET_EXTENSION_PREFIX = "sheet-ext-"; | ||
export declare class SheetExtension extends ComponentExtension<SpreadsheetSkeleton, SHEET_EXTENSION_TYPE, IRange[]> { | ||
@@ -9,0 +13,0 @@ type: SHEET_EXTENSION_TYPE; |
import { IRange } from '@univerjs/core'; | ||
import { IBoundRectNoAngle, IViewportInfo, Vector2 } from '../../basics/vector2'; | ||
import { Canvas } from '../../canvas'; | ||
import { UniverRenderingContext } from '../../context'; | ||
import { UniverRenderingContext2D } from '../../context'; | ||
import { Scene } from '../../scene'; | ||
import { Documents } from '../docs/document'; | ||
@@ -38,3 +39,10 @@ import { Background } from './extensions/background'; | ||
*/ | ||
draw(ctx: UniverRenderingContext, viewportInfo: IViewportInfo): void; | ||
draw(ctx: UniverRenderingContext2D, viewportInfo: IViewportInfo): void; | ||
addRenderFrameTimeMetricToScene(timeKey: string, val: number, scene: Scene): void; | ||
addRenderTagToScene(renderKey: string, val: any, scene?: Scene): void; | ||
/** | ||
* override for return type as Scene. | ||
* @returns Scene | ||
*/ | ||
getScene(): Scene; | ||
isHit(coord: Vector2): boolean; | ||
@@ -65,3 +73,3 @@ getNoMergeCellPositionByIndex(rowIndex: number, columnIndex: number): { | ||
setDirtyArea(dirtyBounds: IBoundRectNoAngle[]): void; | ||
renderByViewport(mainCtx: UniverRenderingContext, viewportInfo: IViewportInfo, spreadsheetSkeleton: SpreadsheetSkeleton): void; | ||
renderByViewport(mainCtx: UniverRenderingContext2D, viewportInfo: IViewportInfo, spreadsheetSkeleton: SpreadsheetSkeleton): void; | ||
paintNewAreaForScrolling(viewportInfo: IViewportInfo, param: IPaintForScrolling): void; | ||
@@ -72,3 +80,3 @@ /** | ||
refreshCacheCanvas(viewportInfo: IViewportInfo, param: IPaintForRefresh): void; | ||
render(mainCtx: UniverRenderingContext, viewportInfo: IViewportInfo): this | undefined; | ||
render(mainCtx: UniverRenderingContext2D, viewportInfo: IViewportInfo): this | undefined; | ||
/** | ||
@@ -87,4 +95,4 @@ * applyCache from cache canvas | ||
*/ | ||
protected _applyCache(cacheCanvas: Canvas, ctx: UniverRenderingContext, sx?: number, sy?: number, sw?: number, sh?: number, dx?: number, dy?: number, dw?: number, dh?: number): void; | ||
protected _draw(ctx: UniverRenderingContext, bounds?: IViewportInfo): void; | ||
protected _applyCache(cacheCanvas: Canvas, ctx: UniverRenderingContext2D, sx?: number, sy?: number, sw?: number, sh?: number, dx?: number, dy?: number, dw?: number, dh?: number): void; | ||
protected _draw(ctx: UniverRenderingContext2D, bounds?: IViewportInfo): void; | ||
private _getAncestorSize; | ||
@@ -105,4 +113,4 @@ private _getAncestorParent; | ||
sheetHeaderViewport(): SHEET_VIEWPORT_KEY[]; | ||
testShowRuler(cacheCtx: UniverRenderingContext, viewportInfo: IViewportInfo): void; | ||
testShowRuler(cacheCtx: UniverRenderingContext2D, viewportInfo: IViewportInfo): void; | ||
testGetRandomLightColor(): string; | ||
} |
@@ -1,3 +0,5 @@ | ||
import { Observable } from 'rxjs'; | ||
import { Observable, Subject } from 'rxjs'; | ||
import { CURSOR_TYPE } from './basics/const'; | ||
import { ITimeMetric } from './basics/interfaces'; | ||
import { IBasicFrameInfo } from './basics/performance-monitor'; | ||
import { Canvas, CanvasRenderMode } from './canvas'; | ||
@@ -9,5 +11,11 @@ import { Scene } from './scene'; | ||
private readonly _beginFrame$; | ||
readonly beginFrame$: Observable<void>; | ||
readonly beginFrame$: Observable<number>; | ||
private readonly _endFrame$; | ||
readonly endFrame$: Observable<void>; | ||
readonly endFrame$: Observable<IBasicFrameInfo>; | ||
readonly renderFrameTimeMetric$: Subject<ITimeMetric>; | ||
readonly renderFrameTags$: Subject<[string, any]>; | ||
/** | ||
* time when render start, for elapsedTime | ||
*/ | ||
private _renderStartTime; | ||
private _rect$; | ||
@@ -18,5 +26,8 @@ get clientRect$(): Observable<void>; | ||
private _renderingQueueLaunched; | ||
private _activeRenderLoops; | ||
private _renderFrameTasks; | ||
private _renderFunction; | ||
private _requestNewFrameHandler; | ||
/** | ||
* frameCount | ||
*/ | ||
private _frameId; | ||
@@ -49,2 +60,4 @@ private _usingSafari; | ||
constructor(elemWidth?: number, elemHeight?: number, pixelRatio?: number, mode?: CanvasRenderMode); | ||
_init(): void; | ||
get elapsedTime(): number; | ||
get width(): number; | ||
@@ -76,4 +89,6 @@ get height(): number; | ||
dispose(): void; | ||
addFunction2RenderLoop(renderFunction: () => void): void; | ||
startRenderLoop(): void; | ||
/** | ||
* Register and execute a render loop. The engine can have more than one render function | ||
* Register and execute a render loop. The engine could manage more than one render function | ||
* @param renderFunction defines the function to continuously execute | ||
@@ -90,7 +105,7 @@ */ | ||
*/ | ||
beginFrame(): void; | ||
_beginFrame(_timestamp: number): void; | ||
/** | ||
* End the current frame | ||
*/ | ||
endFrame(): void; | ||
_endFrame(timestamp: number): void; | ||
/** | ||
@@ -106,7 +121,13 @@ * Gets the current framerate | ||
getDeltaTime(): number; | ||
_renderFrame(): void; | ||
/** | ||
* Exec all function in _renderFrameTasks | ||
*/ | ||
private _renderFrame; | ||
private _cancelFrame; | ||
private _getHostWindow; | ||
private _renderLoop; | ||
private _measureFps; | ||
/** | ||
* call itself by raf | ||
* Exec all function in _renderFrameTasks in _renderFrame() | ||
*/ | ||
private _renderFunctionCore; | ||
private _handleKeyboardAction; | ||
@@ -113,0 +134,0 @@ private _handlePointerAction; |
@@ -1,3 +0,4 @@ | ||
import { Injector, Plugin } from '@univerjs/core'; | ||
import { IConfigService, Injector, Plugin } from '@univerjs/core'; | ||
import { Engine } from './engine'; | ||
import { IUniverEngineRenderConfig } from './controllers/config.schema'; | ||
/** | ||
@@ -8,5 +9,7 @@ * The global rendering engine. | ||
export declare class UniverRenderEnginePlugin extends Plugin { | ||
private readonly _config; | ||
readonly _injector: Injector; | ||
private readonly _configService; | ||
static pluginName: string; | ||
constructor(_config: undefined, _injector: Injector); | ||
constructor(_config: Partial<IUniverEngineRenderConfig>, _injector: Injector, _configService: IConfigService); | ||
} |
@@ -6,11 +6,11 @@ import { Nullable } from '@univerjs/core'; | ||
import { ISceneTransformState } from './basics/interfaces'; | ||
import { ITransformerConfig } from './basics/transformer-config'; | ||
import { Vector2 } from './basics/vector2'; | ||
import { UniverRenderingContext } from './context'; | ||
import { Layer } from './layer'; | ||
import { SceneViewer } from './scene-viewer'; | ||
import { Transformer } from './scene.transformer'; | ||
import { SceneViewer } from './scene-viewer'; | ||
import { ThinEngine } from './thin-engine'; | ||
import { ThinScene } from './thin-scene'; | ||
import { Viewport } from './viewport'; | ||
import { ITransformerConfig } from './basics/transformer-config'; | ||
import { Engine } from './engine'; | ||
@@ -72,2 +72,3 @@ export declare class Scene extends ThinScene { | ||
getLayer(zIndex?: number): Layer; | ||
findLayerByZIndex(zIndex?: number): Nullable<Layer>; | ||
getLayerMaxZIndex(): number; | ||
@@ -178,3 +179,8 @@ addLayer(...argument: Layer[]): void; | ||
dispose(): void; | ||
pick(vec: Vector2): Nullable<BaseObject | Scene | ThinScene>; | ||
/** | ||
* Get the object under the pointer, if scene.event is disabled, the object is null. | ||
* @param {Vector2} coord | ||
* @return {Nullable<BaseObject | Scene | ThinScene>} object under the pointer | ||
*/ | ||
pick(coord: Vector2): Nullable<BaseObject | Scene | ThinScene>; | ||
triggerKeyDown(evt: IKeyboardEvent): void; | ||
@@ -181,0 +187,0 @@ triggerKeyUp(evt: IKeyboardEvent): void; |
@@ -14,2 +14,3 @@ import { Disposable } from '@univerjs/core'; | ||
static ExclusiveDoubleClickMode: boolean; | ||
private _scene; | ||
/** This is a defensive check to not allow control attachment prior to an already active one. If already attached, previous control is unattached before attaching the new one. */ | ||
@@ -32,3 +33,2 @@ private _alreadyAttached; | ||
private _onDrop; | ||
private _scene; | ||
private _currentMouseEnterPicked; | ||
@@ -53,3 +53,9 @@ private _startingPosition; | ||
detachControl(): void; | ||
private _getCurrentObject; | ||
/** | ||
* Just call this._scene?.pick, nothing special. | ||
* @param offsetX | ||
* @param offsetY | ||
* @returns | ||
*/ | ||
private _getObjectAtPos; | ||
private _checkDirectSceneEventTrigger; | ||
@@ -56,0 +62,0 @@ /** |
@@ -22,2 +22,5 @@ import { IPaddingData } from '@univerjs/core'; | ||
private _scrollY; | ||
/** | ||
* Custmize scroll function. | ||
*/ | ||
private _scrollFunction; | ||
@@ -31,3 +34,3 @@ constructor(_scene: Scene, _scrollTimerType?: ScrollTimerType, _padding?: IPaddingData | undefined); | ||
startScroll(offsetX: number, offsetY: number, targetViewport?: any): void; | ||
private _scroll; | ||
private _autoScroll; | ||
scrolling(offsetX: number, offsetY: number, scrollFunction: (x?: number, y?: number) => void): void; | ||
@@ -34,0 +37,0 @@ stopScroll(): void; |
@@ -46,3 +46,3 @@ import { Nullable, Disposable, EventSubject } from '@univerjs/core'; | ||
get sceneKey(): string; | ||
get evented(): boolean; | ||
get objectsEvented(): boolean; | ||
set transform(trans: Transform); | ||
@@ -53,4 +53,9 @@ set width(num: number); | ||
set scaleY(scaleY: number); | ||
enableEvent(): void; | ||
disableEvent(): void; | ||
enableObjectsEvent(): void; | ||
/** | ||
* If scene.event is disabled, scene.pick(curosrPos) return null. | ||
* Then only scene itself can response to pointer event, all objects under the scene would not. | ||
* see sceneInputManager@_onPointerMove | ||
*/ | ||
disableObjectsEvent(): void; | ||
triggerKeyDown(evt: IKeyboardEvent): void; | ||
@@ -57,0 +62,0 @@ triggerKeyUp(evt: IKeyboardEvent): void; |
{ | ||
"name": "@univerjs/engine-render", | ||
"version": "0.2.11", | ||
"version": "0.2.12", | ||
"private": false, | ||
@@ -50,3 +50,3 @@ "description": "UniverSheet normal base-render", | ||
"rxjs": ">=7.0.0", | ||
"@univerjs/core": "0.2.11" | ||
"@univerjs/core": "0.2.12" | ||
}, | ||
@@ -66,4 +66,4 @@ "dependencies": { | ||
"vitest": "^2.0.5", | ||
"@univerjs/core": "0.2.11", | ||
"@univerjs/shared": "0.2.11" | ||
"@univerjs/core": "0.2.12", | ||
"@univerjs/shared": "0.2.12" | ||
}, | ||
@@ -70,0 +70,0 @@ "browser": { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
18820380
390
90204