up
This commit is contained in:
+37
-2
@@ -1,5 +1,5 @@
|
||||
const assert = require('node:assert/strict')
|
||||
const { app, BrowserWindow, screen, nativeImage } = require('electron')
|
||||
const { app, BrowserWindow, screen, nativeImage, powerSaveBlocker } = require('electron')
|
||||
const { join, resolve } = require('node:path')
|
||||
const { mkdtempSync, readFileSync, writeFileSync } = require('node:fs')
|
||||
const root = resolve(__dirname, '..')
|
||||
@@ -11,8 +11,26 @@ let targetDisplay
|
||||
let isSyntheticDisplay = false
|
||||
const boundsBeforeFullscreen = new Map()
|
||||
const fullscreenEntered = new Set()
|
||||
const powerBlocks = { active: new Set(), starts: 0, stops: 0 }
|
||||
const startBlocker = powerSaveBlocker.start.bind(powerSaveBlocker)
|
||||
const stopBlocker = powerSaveBlocker.stop.bind(powerSaveBlocker)
|
||||
powerSaveBlocker.start = (type) => {
|
||||
assert.equal(type, 'prevent-display-sleep')
|
||||
const id = startBlocker(type)
|
||||
powerBlocks.active.add(id)
|
||||
powerBlocks.starts++
|
||||
return id
|
||||
}
|
||||
powerSaveBlocker.stop = (id) => {
|
||||
assert.ok(powerBlocks.active.delete(id), 'blocker released exactly once')
|
||||
powerBlocks.stops++
|
||||
return stopBlocker(id)
|
||||
}
|
||||
const captures = []
|
||||
app.on('browser-window-created', (_event, window) => {
|
||||
window.webContents.on('render-process-gone', (_event, details) =>
|
||||
console.log('SMOKE_RENDERER_GONE', window.id, details.reason),
|
||||
)
|
||||
const capturePage = window.webContents.capturePage.bind(window.webContents)
|
||||
window.webContents.capturePage = (...args) => {
|
||||
captures.push({ id: window.id, time: performance.now() })
|
||||
@@ -28,6 +46,13 @@ app.on('browser-window-created', (_event, window) => {
|
||||
const setFullScreen = window.setFullScreen.bind(window)
|
||||
window.setFullScreen = (flag) => {
|
||||
if (flag) boundsBeforeFullscreen.set(window.id, requestedBounds)
|
||||
// WM не знает синтетический монитор: native fullscreen проверяем только на реальном.
|
||||
if (isSyntheticDisplay) {
|
||||
queueMicrotask(() => {
|
||||
if (!window.isDestroyed()) window.emit(flag ? 'enter-full-screen' : 'leave-full-screen')
|
||||
})
|
||||
return
|
||||
}
|
||||
return setFullScreen(flag)
|
||||
}
|
||||
})
|
||||
@@ -562,6 +587,16 @@ app.whenReady().then(async () => {
|
||||
displayId: targetDisplay.id,
|
||||
root,
|
||||
})
|
||||
await require('./venue-smoke.cjs')({
|
||||
control,
|
||||
evaluate,
|
||||
state,
|
||||
command,
|
||||
poll,
|
||||
targetDisplay,
|
||||
offlinePackage,
|
||||
powerBlocks,
|
||||
})
|
||||
console.log(
|
||||
'SCREEN_SMOKE_PASS',
|
||||
JSON.stringify({
|
||||
@@ -587,7 +622,7 @@ app.whenReady().then(async () => {
|
||||
'SMOKE_DIAGNOSTIC',
|
||||
window.webContents.getURL(),
|
||||
await window.webContents.executeJavaScript(
|
||||
"(async () => ({ state: await window.screenBridge.state(), media: Array.from(document.querySelectorAll('audio,video')).map(m => ({channel:m.dataset.channel,src:m.src,paused:m.paused,ready:m.readyState,time:m.currentTime,duration:m.duration,error:m.error?.message})) }))()",
|
||||
"(async () => ({ state: await window.screenBridge.state(), host: await window.screenBridge.host().catch(() => null), media: Array.from(document.querySelectorAll('audio,video')).map(m => ({channel:m.dataset.channel,src:m.src,paused:m.paused,ready:m.readyState,time:m.currentTime,duration:m.duration,error:m.error?.message})) }))()",
|
||||
),
|
||||
)
|
||||
} catch {}
|
||||
|
||||
Reference in New Issue
Block a user