From 69ad74ed737fd9d784dcdc27a8542cb607fb344c Mon Sep 17 00:00:00 2001 From: schmelczerandras Date: Tue, 27 Oct 2020 11:08:31 +0100 Subject: [PATCH] Expose context lost simulator --- src/compile.ts | 4 ++++ .../helper/enable-context-lost-simulator.ts | 6 ++++-- src/graphics/graphics-library/parallel-compiler.ts | 10 +++++++--- .../rendering/renderer/context-aware-renderer.ts | 9 +++------ .../rendering/settings/default-startup-settings.ts | 1 + src/graphics/rendering/settings/startup-settings.ts | 7 +++++++ src/helper/format-log.ts | 6 ++++++ src/run-animation.ts | 4 ++++ 8 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 src/helper/format-log.ts diff --git a/src/compile.ts b/src/compile.ts index 8fa78ff..72b8bd5 100644 --- a/src/compile.ts +++ b/src/compile.ts @@ -1,3 +1,4 @@ +import { enableContextLostSimulator } from './graphics/graphics-library/helper/enable-context-lost-simulator'; import { ContextAwareRenderer } from './graphics/rendering/renderer/context-aware-renderer'; import { StartupSettings } from './graphics/rendering/settings/startup-settings'; import { DrawableDescriptor, Renderer } from './main'; @@ -31,6 +32,9 @@ export async function compile( descriptors: Array, settingsOverrides: Partial = {} ): Promise { + if (settingsOverrides.enableContextLostSimulator) { + enableContextLostSimulator(canvas); + } const renderer = new ContextAwareRenderer(canvas, descriptors, settingsOverrides); await renderer.initializedPromise; return renderer; diff --git a/src/graphics/graphics-library/helper/enable-context-lost-simulator.ts b/src/graphics/graphics-library/helper/enable-context-lost-simulator.ts index 2b0fdbb..139f858 100644 --- a/src/graphics/graphics-library/helper/enable-context-lost-simulator.ts +++ b/src/graphics/graphics-library/helper/enable-context-lost-simulator.ts @@ -1,3 +1,5 @@ +import { formatLog } from '../../../helper/format-log'; + /** @internal */ let isEnabled = false; @@ -14,12 +16,12 @@ export const enableContextLostSimulator = (canvas: HTMLCanvasElement) => { const simulateContextLost = () => { ext.loseContext(); - console.log('lost'); + console.info(formatLog('context-lost-simulator', 'lost')); const restoreTimeout = Math.random() * 500; setTimeout(() => { ext.restoreContext(); - console.log('restored'); + console.info(formatLog('context-lost-simulator', 'restored')); }, restoreTimeout); setTimeout(() => simulateContextLost(), restoreTimeout + Math.random() * 500); diff --git a/src/graphics/graphics-library/parallel-compiler.ts b/src/graphics/graphics-library/parallel-compiler.ts index d2c743f..08998c4 100644 --- a/src/graphics/graphics-library/parallel-compiler.ts +++ b/src/graphics/graphics-library/parallel-compiler.ts @@ -1,3 +1,4 @@ +import { formatLog } from '../../helper/format-log'; import { numberToGlslFloat } from '../../helper/number-to-glsl-float'; import { wait } from '../../helper/wait'; import { tryEnableExtension } from './helper/enable-extension'; @@ -138,9 +139,12 @@ export class ParallelCompiler { const line = Number.parseInt(match[1]); const error = match[2]; console.error( - `Error: ${error}\nSource (line ${line}):\n${ - shader.source.split('\n')[line - 1] - }` + formatLog( + 'parallel-compiler', + `Error: ${error}\nSource (line ${line}):\n${ + shader.source.split('\n')[line - 1] + }` + ) ); } throw new Error('Error while compiling shader'); diff --git a/src/graphics/rendering/renderer/context-aware-renderer.ts b/src/graphics/rendering/renderer/context-aware-renderer.ts index 954191c..5f3e771 100644 --- a/src/graphics/rendering/renderer/context-aware-renderer.ts +++ b/src/graphics/rendering/renderer/context-aware-renderer.ts @@ -1,6 +1,7 @@ import { ReadonlyVec2, vec2 } from 'gl-matrix'; import { Drawable } from '../../../drawables/drawable'; import { DrawableDescriptor } from '../../../drawables/drawable-descriptor'; +import { formatLog } from '../../../helper/format-log'; import { RuntimeSettings } from '../settings/runtime-settings'; import { StartupSettings } from '../settings/startup-settings'; import { Renderer } from './renderer'; @@ -51,7 +52,6 @@ export class ContextAwareRenderer implements Renderer { if (!e.message.includes('Context lost')) { throw e; } - console.warn(e.message); } } @@ -63,7 +63,6 @@ export class ContextAwareRenderer implements Renderer { if (!e.message.includes('Context lost')) { throw e; } - console.warn(e.message); } this.setRuntimeSettings(this.runtimeOverrides); @@ -75,13 +74,12 @@ export class ContextAwareRenderer implements Renderer { private handleContextLost(event: Event) { this.isRendererReady = false; event.preventDefault(); - console.warn('Context lost'); + console.warn(formatLog('context-aware-renderer', 'Context lost')); } private handleContextRestored(event: Event) { event.preventDefault(); - console.info('Context restored'); - + console.info(formatLog('context-aware-renderer', 'Context restored')); this.createRenderer(); } @@ -92,7 +90,6 @@ export class ContextAwareRenderer implements Renderer { } catch (e) { if (e.message.includes('Context lost')) { this.isRendererReady = false; - console.warn(e.message); return defaultValue; } throw e; diff --git a/src/graphics/rendering/settings/default-startup-settings.ts b/src/graphics/rendering/settings/default-startup-settings.ts index 42ffaa6..85b2a94 100644 --- a/src/graphics/rendering/settings/default-startup-settings.ts +++ b/src/graphics/rendering/settings/default-startup-settings.ts @@ -11,4 +11,5 @@ export const defaultStartupSettings: StartupSettings = { backgroundColor: vec4.fromValues(1, 1, 1, 1), lightPenetrationRatio: 0.75, enableStopwatch: false, + enableContextLostSimulator: false, }; diff --git a/src/graphics/rendering/settings/startup-settings.ts b/src/graphics/rendering/settings/startup-settings.ts index b5def2d..5cee633 100644 --- a/src/graphics/rendering/settings/startup-settings.ts +++ b/src/graphics/rendering/settings/startup-settings.ts @@ -41,6 +41,13 @@ export interface StartupSettings { */ paletteSize: number; + /** + * Many context lost event will be simulated when enabled. + * + * Useful for testing. + */ + enableContextLostSimulator: boolean; + /** * The default background color of the scene, can have transparency on every platform. */ diff --git a/src/helper/format-log.ts b/src/helper/format-log.ts new file mode 100644 index 0000000..2cb2e9f --- /dev/null +++ b/src/helper/format-log.ts @@ -0,0 +1,6 @@ +/** + * @internal + */ +export const formatLog = (originator: string, message: any): string => { + return `[SDF-2D][${originator}]: ${message}`; +}; diff --git a/src/run-animation.ts b/src/run-animation.ts index 94ad3a5..53d410c 100644 --- a/src/run-animation.ts +++ b/src/run-animation.ts @@ -1,3 +1,4 @@ +import { enableContextLostSimulator } from './graphics/graphics-library/helper/enable-context-lost-simulator'; import { FpsQualityAutoscaler } from './graphics/rendering/fps-quality-autoscaler'; import { ContextAwareRenderer } from './graphics/rendering/renderer/context-aware-renderer'; import { RuntimeSettings } from './graphics/rendering/settings/runtime-settings'; @@ -53,6 +54,9 @@ export async function runAnimation( startupSettingOverrides: Partial = {}, initialRuntimeSettingOverrides: Partial = {} ): Promise { + if (startupSettingOverrides.enableContextLostSimulator) { + enableContextLostSimulator(canvas); + } const renderer = new ContextAwareRenderer(canvas, descriptors, startupSettingOverrides); const deltaTimeCalculator = new DeltaTimeCalculator();