mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 10:45:42 +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
2.8 KiB
C++
82 lines
2.8 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/. */
|
|
|
|
#ifndef mozilla_dom_AnimationPerformanceWarning_h
|
|
#define mozilla_dom_AnimationPerformanceWarning_h
|
|
|
|
#include <initializer_list>
|
|
|
|
#include "mozilla/Maybe.h"
|
|
#include "nsStringFwd.h"
|
|
#include "nsTArray.h"
|
|
|
|
namespace mozilla {
|
|
|
|
// Represents the reason why we can't run the CSS property on the compositor.
|
|
struct AnimationPerformanceWarning {
|
|
enum class Type : uint8_t {
|
|
None,
|
|
ContentTooLarge,
|
|
ContentTooLargeArea,
|
|
TransformBackfaceVisibilityHidden,
|
|
TransformPreserve3D,
|
|
TransformSVG,
|
|
TransformWithGeometricProperties,
|
|
TransformWithSyncGeometricAnimations,
|
|
TransformFrameInactive,
|
|
TransformIsBlockedByImportantRules,
|
|
OpacityFrameInactive,
|
|
HasRenderingObserver,
|
|
};
|
|
|
|
explicit AnimationPerformanceWarning(Type aType) : mType(aType) {
|
|
MOZ_ASSERT(mType != Type::None);
|
|
}
|
|
|
|
AnimationPerformanceWarning(Type aType,
|
|
std::initializer_list<int32_t> aParams)
|
|
: mType(aType) {
|
|
MOZ_ASSERT(mType != Type::None);
|
|
// FIXME: Once std::initializer_list::size() become a constexpr function,
|
|
// we should use static_assert here.
|
|
MOZ_ASSERT(aParams.size() <= kMaxParamsForLocalization,
|
|
"The length of parameters should be less than "
|
|
"kMaxParamsForLocalization");
|
|
mParams.emplace(aParams);
|
|
}
|
|
|
|
// Maximum number of parameters passed to
|
|
// nsContentUtils::FormatLocalizedString to localize warning messages.
|
|
//
|
|
// NOTE: This constexpr can't be forward declared, so if you want to use
|
|
// this variable, please include this header file directly.
|
|
// This value is the same as the limit of nsStringBundle::FormatString.
|
|
// See the implementation of nsStringBundle::FormatString.
|
|
static constexpr uint8_t kMaxParamsForLocalization = 10;
|
|
|
|
// Indicates why this property could not be animated on the compositor.
|
|
Type mType;
|
|
|
|
// Optional parameters that may be used for localization.
|
|
Maybe<nsTArray<int32_t>> mParams;
|
|
|
|
bool ToLocalizedString(nsAString& aLocalizedString) const;
|
|
template <uint32_t N>
|
|
nsresult ToLocalizedStringWithIntParams(const char* aKey,
|
|
nsAString& aLocalizedString) const;
|
|
|
|
bool operator==(const AnimationPerformanceWarning& aOther) const {
|
|
return mType == aOther.mType && mParams == aOther.mParams;
|
|
}
|
|
bool operator!=(const AnimationPerformanceWarning& aOther) const {
|
|
return !(*this == aOther);
|
|
}
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_AnimationPerformanceWarning_h
|