diff options
Diffstat (limited to 'dom/animation/AnimationPerformanceWarning.h')
-rw-r--r-- | dom/animation/AnimationPerformanceWarning.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/dom/animation/AnimationPerformanceWarning.h b/dom/animation/AnimationPerformanceWarning.h new file mode 100644 index 000000000..025857e0c --- /dev/null +++ b/dom/animation/AnimationPerformanceWarning.h @@ -0,0 +1,79 @@ +/* -*- 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> + +class nsXPIDLString; + +namespace mozilla { + +// Represents the reason why we can't run the CSS property on the compositor. +struct AnimationPerformanceWarning +{ + enum class Type : uint8_t { + ContentTooSmall, + ContentTooLarge, + TransformBackfaceVisibilityHidden, + TransformPreserve3D, + TransformSVG, + TransformWithGeometricProperties, + TransformFrameInactive, + OpacityFrameInactive, + HasRenderingObserver, + }; + + explicit AnimationPerformanceWarning(Type aType) + : mType(aType) { } + + AnimationPerformanceWarning(Type aType, + std::initializer_list<int32_t> aParams) + : mType(aType) + { + // 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(nsXPIDLString& aLocalizedString) const; + template<uint32_t N> + nsresult ToLocalizedStringWithIntParams( + const char* aKey, nsXPIDLString& 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 |