Bug 1251612 - Sanitize layer transforms before computing stddev. r=botond

Depends on D86017

Differential Revision: https://phabricator.services.mozilla.com/D86018
This commit is contained in:
Kartikaya Gupta 2020-08-05 20:48:56 +00:00
Родитель a76f7ee9a1
Коммит 65de9cd97f
2 изменённых файлов: 20 добавлений и 1 удалений

Просмотреть файл

@ -63,6 +63,24 @@ Point LayerTransforms::GetStdDev() {
return stdDev;
}
bool LayerTransforms::Sanitize() {
// Remove leading and trailing zeros to isolate the composites that actually
// changed the transform
for (size_t i = 1; i < mTransforms.Length(); i++) {
if (mTransforms[i] != mTransforms[i - 1]) {
mTransforms.RemoveElementsAt(0, i - 1);
break;
}
}
for (size_t i = mTransforms.Length() - 1; i > 0; i--) {
if (mTransforms[i - 1] != mTransforms[i]) {
mTransforms.SetLength(i + 1);
break;
}
}
return !mTransforms.IsEmpty();
}
LayerTransformRecorder::~LayerTransformRecorder() { Reset(); }
void LayerTransformRecorder::RecordTransform(Layer* aLayer,
@ -96,7 +114,7 @@ void LayerTransformRecorder::Reset() { mFrameTransforms.clear(); }
float LayerTransformRecorder::CalculateFrameUniformity(uintptr_t aLayer) {
LayerTransforms* layerTransform = GetLayerTransforms(aLayer);
float yUniformity = -1;
if (!layerTransform->mTransforms.IsEmpty()) {
if (layerTransform->Sanitize()) {
Point stdDev = layerTransform->GetStdDev();
yUniformity = stdDev.y;
}

Просмотреть файл

@ -30,6 +30,7 @@ struct LayerTransforms {
gfx::Point GetAverage();
gfx::Point GetStdDev();
bool Sanitize();
// 60 fps * 5 seconds worth of data
AutoTArray<gfx::Point, 300> mTransforms;