93 lines
3.4 KiB
Java
93 lines
3.4 KiB
Java
package com.limelight.binding.video;
|
|
|
|
import android.os.SystemClock;
|
|
|
|
class VideoStats {
|
|
|
|
long decoderTimeMs;
|
|
long totalTimeMs;
|
|
int totalFrames;
|
|
int totalFramesReceived;
|
|
int totalFramesRendered;
|
|
int frameLossEvents;
|
|
int framesLost;
|
|
char minHostProcessingLatency;
|
|
char maxHostProcessingLatency;
|
|
int totalHostProcessingLatency;
|
|
int framesWithHostProcessingLatency;
|
|
long measurementStartTimestamp;
|
|
|
|
void add(VideoStats other) {
|
|
this.decoderTimeMs += other.decoderTimeMs;
|
|
this.totalTimeMs += other.totalTimeMs;
|
|
this.totalFrames += other.totalFrames;
|
|
this.totalFramesReceived += other.totalFramesReceived;
|
|
this.totalFramesRendered += other.totalFramesRendered;
|
|
this.frameLossEvents += other.frameLossEvents;
|
|
this.framesLost += other.framesLost;
|
|
|
|
if (this.minHostProcessingLatency == 0) {
|
|
this.minHostProcessingLatency = other.minHostProcessingLatency;
|
|
} else {
|
|
this.minHostProcessingLatency = (char) Math.min(this.minHostProcessingLatency, other.minHostProcessingLatency);
|
|
}
|
|
this.maxHostProcessingLatency = (char) Math.max(this.maxHostProcessingLatency, other.maxHostProcessingLatency);
|
|
this.totalHostProcessingLatency += other.totalHostProcessingLatency;
|
|
this.framesWithHostProcessingLatency += other.framesWithHostProcessingLatency;
|
|
|
|
if (this.measurementStartTimestamp == 0) {
|
|
this.measurementStartTimestamp = other.measurementStartTimestamp;
|
|
}
|
|
|
|
assert other.measurementStartTimestamp >= this.measurementStartTimestamp;
|
|
}
|
|
|
|
void copy(VideoStats other) {
|
|
this.decoderTimeMs = other.decoderTimeMs;
|
|
this.totalTimeMs = other.totalTimeMs;
|
|
this.totalFrames = other.totalFrames;
|
|
this.totalFramesReceived = other.totalFramesReceived;
|
|
this.totalFramesRendered = other.totalFramesRendered;
|
|
this.frameLossEvents = other.frameLossEvents;
|
|
this.framesLost = other.framesLost;
|
|
this.minHostProcessingLatency = other.minHostProcessingLatency;
|
|
this.maxHostProcessingLatency = other.maxHostProcessingLatency;
|
|
this.totalHostProcessingLatency = other.totalHostProcessingLatency;
|
|
this.framesWithHostProcessingLatency = other.framesWithHostProcessingLatency;
|
|
this.measurementStartTimestamp = other.measurementStartTimestamp;
|
|
}
|
|
|
|
void clear() {
|
|
this.decoderTimeMs = 0;
|
|
this.totalTimeMs = 0;
|
|
this.totalFrames = 0;
|
|
this.totalFramesReceived = 0;
|
|
this.totalFramesRendered = 0;
|
|
this.frameLossEvents = 0;
|
|
this.framesLost = 0;
|
|
this.minHostProcessingLatency = 0;
|
|
this.maxHostProcessingLatency = 0;
|
|
this.totalHostProcessingLatency = 0;
|
|
this.framesWithHostProcessingLatency = 0;
|
|
this.measurementStartTimestamp = 0;
|
|
}
|
|
|
|
VideoStatsFps getFps() {
|
|
float elapsed = (SystemClock.uptimeMillis() - this.measurementStartTimestamp) / (float) 1000;
|
|
|
|
VideoStatsFps fps = new VideoStatsFps();
|
|
if (elapsed > 0) {
|
|
fps.totalFps = this.totalFrames / elapsed;
|
|
fps.receivedFps = this.totalFramesReceived / elapsed;
|
|
fps.renderedFps = this.totalFramesRendered / elapsed;
|
|
}
|
|
return fps;
|
|
}
|
|
}
|
|
|
|
class VideoStatsFps {
|
|
|
|
float totalFps;
|
|
float receivedFps;
|
|
float renderedFps;
|
|
} |