Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit b7373774 authored by Simon Chan's avatar Simon Chan
Browse files

feat(scrcpy-decoder): record skipped frame count

parent 0df4c85a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
        "allowlist",
        "arraybuffer",
        "autorun",
        "Bframes",
        "brotli",
        "Callout",
        "Cascadia",
+1 −0
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ export interface H264Decoder extends Disposable {

    readonly renderer: HTMLElement;
    readonly frameRendered: number;
    readonly frameSkipped: number;
    readonly writable: WritableStream<ScrcpyVideoStreamPacket>;
}

+16 −5
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ export class ScrcpyPageState {
    decoder: H264Decoder | undefined = undefined;
    configuration: ScrcpyVideoStreamConfigurationPacket | undefined = undefined;
    fpsCounterIntervalId: any = undefined;
    fps = 0;
    fps = "0";

    connecting = false;
    serverTotalSize = 0;
@@ -199,11 +199,22 @@ export class ScrcpyPageState {
            runInAction(() => {
                this.decoder = decoder;

                let lastFrameCount = 0;
                let lastFrameRendered = 0;
                let lastFrameSkipped = 0;
                this.fpsCounterIntervalId = setInterval(
                    action(() => {
                        this.fps = decoder.frameRendered - lastFrameCount;
                        lastFrameCount = decoder.frameRendered;
                        const deltaRendered =
                            decoder.frameRendered - lastFrameRendered;
                        const deltaSkipped =
                            decoder.frameSkipped - lastFrameSkipped;
                        // prettier-ignore
                        this.fps = `${
                            deltaRendered
                        }${
                            deltaSkipped ? `+${deltaSkipped} skipped` : ""
                        }`;
                        lastFrameRendered = decoder.frameRendered;
                        lastFrameSkipped = decoder.frameSkipped;
                    }),
                    1000
                );
@@ -328,7 +339,7 @@ export class ScrcpyPageState {
            RECORD_STATE.recording = false;
        }

        this.fps = 0;
        this.fps = "0";
        clearTimeout(this.fpsCounterIntervalId);

        this.client = undefined;
+5 −0
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ export class TinyH264Decoder {
        return this._frameRendered;
    }

    private _frameSkipped = 0;
    public get frameSkipped() {
        return this._frameSkipped;
    }

    private _writable: WritableStream<ScrcpyVideoStreamPacket>;
    public get writable() {
        return this._writable;
+6 −0
Original line number Diff line number Diff line
@@ -29,6 +29,11 @@ export class WebCodecsDecoder {
        return this._frameRendered;
    }

    private _frameSkipped = 0;
    public get frameSkipped() {
        return this._frameSkipped;
    }

    private context: CanvasRenderingContext2D;
    private decoder: VideoDecoder;

@@ -43,6 +48,7 @@ export class WebCodecsDecoder {
        this.decoder = new VideoDecoder({
            output: (frame) => {
                if (this.lastFrame) {
                    this._frameSkipped += 1;
                    this.lastFrame.close();
                }
                this.lastFrame = frame;
Loading