mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 11:15:34 +00:00
b5a2513e31
We move the check of important rule and animation level into KeyframeEffect::ShouldBlockAsyncTransformAnimations(), and add a new warning for it. Note: 1. ShouldBlockAsyncTransformAnimations() only cares about transforms. And for other compositor animation properties, we count on HasEffectiveAnimationOfPropertySet() (in IsMatchForCompositor()). 2. If we check the important rules in both EffectCompositor::HasAnimationsForCompositor() and ActiveLayerTracker::IsTransformMaybeAnimated(), we may get the incorrect animation warnings (i.e. TransformFrameInactive). In most cases, we check these two functions together, so perhaps move the check of important rules outside HasEffectiveAnimationOfPropertySet() is fine. Besides, ActiveLayerTracker just tracks if there is a style change on this property (or display item) on the active layers, so should be OK to not check important rules in it. So IsMatchForCompositor() should check all transform-like properties, instead of each one, to get the correct result. (That's why we have to refactor KeyframeEffect::GetPropertiesForCompositor() as well.) Differential Revision: https://phabricator.services.mozilla.com/D34432 --HG-- extra : moz-landing-system : lando
82 lines
3.0 KiB
C++
82 lines
3.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "AnimationPerformanceWarning.h"
|
|
|
|
#include "nsContentUtils.h"
|
|
|
|
namespace mozilla {
|
|
|
|
template <uint32_t N>
|
|
nsresult AnimationPerformanceWarning::ToLocalizedStringWithIntParams(
|
|
const char* aKey, nsAString& aLocalizedString) const {
|
|
AutoTArray<nsString, N> strings;
|
|
|
|
MOZ_DIAGNOSTIC_ASSERT(mParams->Length() == N);
|
|
for (size_t i = 0, n = mParams->Length(); i < n; i++) {
|
|
strings.AppendElement()->AppendInt((*mParams)[i]);
|
|
}
|
|
|
|
return nsContentUtils::FormatLocalizedString(
|
|
nsContentUtils::eLAYOUT_PROPERTIES, aKey, strings, aLocalizedString);
|
|
}
|
|
|
|
bool AnimationPerformanceWarning::ToLocalizedString(
|
|
nsAString& aLocalizedString) const {
|
|
const char* key = nullptr;
|
|
|
|
switch (mType) {
|
|
case Type::ContentTooLarge:
|
|
MOZ_ASSERT(mParams && mParams->Length() == 6,
|
|
"Parameter's length should be 6 for ContentTooLarge2");
|
|
|
|
return NS_SUCCEEDED(ToLocalizedStringWithIntParams<6>(
|
|
"CompositorAnimationWarningContentTooLarge2", aLocalizedString));
|
|
case Type::ContentTooLargeArea:
|
|
MOZ_ASSERT(mParams && mParams->Length() == 2,
|
|
"Parameter's length should be 2 for ContentTooLargeArea");
|
|
|
|
return NS_SUCCEEDED(ToLocalizedStringWithIntParams<2>(
|
|
"CompositorAnimationWarningContentTooLargeArea", aLocalizedString));
|
|
case Type::TransformBackfaceVisibilityHidden:
|
|
key = "CompositorAnimationWarningTransformBackfaceVisibilityHidden";
|
|
break;
|
|
case Type::TransformPreserve3D:
|
|
key = "CompositorAnimationWarningTransformPreserve3D";
|
|
break;
|
|
case Type::TransformSVG:
|
|
key = "CompositorAnimationWarningTransformSVG";
|
|
break;
|
|
case Type::TransformWithGeometricProperties:
|
|
key = "CompositorAnimationWarningTransformWithGeometricProperties";
|
|
break;
|
|
case Type::TransformWithSyncGeometricAnimations:
|
|
key = "CompositorAnimationWarningTransformWithSyncGeometricAnimations";
|
|
break;
|
|
case Type::TransformFrameInactive:
|
|
key = "CompositorAnimationWarningTransformFrameInactive";
|
|
break;
|
|
case Type::TransformIsBlockedByImportantRules:
|
|
key = "CompositorAnimationWarningTransformIsBlockedByImportantRules";
|
|
break;
|
|
case Type::OpacityFrameInactive:
|
|
key = "CompositorAnimationWarningOpacityFrameInactive";
|
|
break;
|
|
case Type::HasRenderingObserver:
|
|
key = "CompositorAnimationWarningHasRenderingObserver";
|
|
break;
|
|
case Type::None:
|
|
MOZ_ASSERT_UNREACHABLE("Uninitialized type shouldn't be used");
|
|
return false;
|
|
}
|
|
|
|
nsresult rv = nsContentUtils::GetLocalizedString(
|
|
nsContentUtils::eLAYOUT_PROPERTIES, key, aLocalizedString);
|
|
return NS_SUCCEEDED(rv);
|
|
}
|
|
|
|
} // namespace mozilla
|