mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 22:32:46 +00:00
fab887e2db
This should be easier to read and provide us a convenient place to check for other cases where we need to synchronize with the main thread (such as the change introduced in this bug where we synchronize with other animations started at the same time). MozReview-Commit-ID: 8iuA7P4ycwM --HG-- extra : rebase_source : 60a706d51897a0522794cd140734ad7158f4ccd6 extra : histedit_source : cbd0849fcb9077afaf3d2cd3f168201ddb2bf7a4
84 lines
2.6 KiB
C++
84 lines
2.6 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 "nsTArray.h"
|
|
|
|
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,
|
|
TransformWithSyncGeometricAnimations,
|
|
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
|