Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,107 @@
'use strict';
/* global dump, MediaUtils */
/* exported VideoStats */
//
// VideoStats records video playback statistics and
// dumps them to the native console
//
var VideoStats = (function() {
var startQuality;
var startTime;
var endQuality;
var endTime;
var video;
// Start recording stats
function start(v) {
video = v;
if (!video.getVideoPlaybackQuality) {
// This API is needed to record stats.
// It is enabled in gecko by setting
// the media.mediasource.enabled pref to true.
return;
}
startQuality = video.getVideoPlaybackQuality();
startTime = video.currentTime;
endQuality = null;
endTime = null;
}
// Stop recording stats
function stop() {
if (!video) {
dump('Warning: no stats have been recorded. ' +
'Make sure start() has been called');
return;
}
if (!video.getVideoPlaybackQuality) {
// This API is needed to record stats.
// It is enabled in gecko by setting
// the media.mediasource.enabled pref to true.
return;
}
endQuality = video.getVideoPlaybackQuality();
endTime = video.currentTime;
}
// Dump stats to the native console
function print() {
if (!video) {
dump('Warning: no stats have been recorded. ' +
'Make sure start() has been called');
return;
}
if (!video.getVideoPlaybackQuality) {
// This API is needed to record stats.
// It is enabled in gecko by setting
// the media.mediasource.enabled pref to true.
return;
}
if (!startQuality || !endQuality) {
dump('Warning: no stats have been recorded. ' +
'Make sure start() and stop() have been called');
return;
}
// Playback segment duration in seconds
var segmentDuration =
(endQuality.creationTime - startQuality.creationTime) / 1000;
var startRendered =
startQuality.totalVideoFrames - startQuality.droppedVideoFrames;
var endRendered =
endQuality.totalVideoFrames - endQuality.droppedVideoFrames;
var segmentRendered = endRendered - startRendered;
var fps = segmentRendered / segmentDuration;
dump('Video statistics start');
dump('Dimensions: ' + video.videoWidth + 'x' + video.videoHeight);
dump('Complete duration: ' + MediaUtils.formatDuration(video.duration));
dump('Start time: ' + MediaUtils.formatDuration(startTime));
dump('End time: ' + MediaUtils.formatDuration(endTime));
dump('Total frames: ' + endQuality.totalVideoFrames);
dump('Decoded frames: ' +
(endQuality.totalVideoFrames - endQuality.corruptedVideoFrames));
dump('Corrupted frames: ' + endQuality.corruptedVideoFrames);
dump('Rendered frames: ' +
(endQuality.totalVideoFrames - endQuality.droppedVideoFrames));
dump('Dropped frames: ' + endQuality.droppedVideoFrames);
dump('Average rendered FPS: ' + fps.toFixed(2));
dump('Video statistics end');
}
return {
start: start,
stop: stop,
dump: print
};
})();