mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
e69fbe4b0d
This value is computed directly from the longest frame length using the vsync interval. MozReview-Commit-ID: 9ALXBqAVyb8 --HG-- extra : rebase_source : 4798fa4e5734db98338fa9fcccb5e64b2c3354c4
92 lines
3.0 KiB
C++
92 lines
3.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* 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_layers_AnimationMetricsTracker_h
|
|
#define mozilla_layers_AnimationMetricsTracker_h
|
|
|
|
#include "mozilla/Telemetry.h"
|
|
#include "mozilla/TimeStamp.h"
|
|
#include "mozilla/TypedEnumBits.h"
|
|
|
|
namespace mozilla {
|
|
namespace layers {
|
|
|
|
enum class AnimationProcessTypes {
|
|
eNone = 0x0,
|
|
eContent = 0x1,
|
|
eChrome = 0x2
|
|
};
|
|
|
|
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(AnimationProcessTypes)
|
|
|
|
/**
|
|
* Tracks the start and end of compositor animations.
|
|
*/
|
|
class AnimationMetricsTracker {
|
|
public:
|
|
AnimationMetricsTracker();
|
|
~AnimationMetricsTracker();
|
|
|
|
/**
|
|
* This function should be called per composite, to inform the metrics
|
|
* tracker which processes have active animations. If there is are animations
|
|
* in progress, the sum of their areas should also be provided, along with
|
|
* the vsync interval.
|
|
*/
|
|
void UpdateAnimationInProgress(AnimationProcessTypes aActive, uint64_t aLayerArea,
|
|
TimeDuration aVsyncInterval);
|
|
|
|
/**
|
|
* Similar to UpdateAnimationInProgress, but this is for APZ animations. Again,
|
|
* this should be called per composite.
|
|
*/
|
|
void UpdateApzAnimationInProgress(bool aInProgress, TimeDuration aVsyncInterval);
|
|
|
|
private:
|
|
// A struct to group data that we need for each type of compositor animation.
|
|
struct AnimationData {
|
|
// The start time of the current animation.
|
|
TimeStamp mStart;
|
|
// The timestamp of the most recent animation frame.
|
|
TimeStamp mLastFrameTime;
|
|
// The longest animation frame length encountered so far.
|
|
TimeDuration mLongestFrame;
|
|
// The number of frames composited for the current animation.
|
|
uint32_t mFrameCount;
|
|
|
|
AnimationData()
|
|
: mFrameCount(0)
|
|
{
|
|
}
|
|
};
|
|
|
|
void AnimationStarted();
|
|
void AnimationEnded();
|
|
void UpdateAnimationThroughput(const char* aLabel,
|
|
bool aInProgress,
|
|
AnimationData& aAnimationData,
|
|
TimeDuration aVsyncInterval,
|
|
Telemetry::HistogramID aThroughputHistogram,
|
|
Telemetry::HistogramID aMaxDropsHistogram);
|
|
|
|
// The start time of the current compositor animation. This just tracks
|
|
// whether the compositor is running an animation, without regard to which
|
|
// process the animation is coming from.
|
|
TimeStamp mCurrentAnimationStart;
|
|
// The max area (in layer pixels) that the current compositor animation
|
|
// has touched on any given animation frame.
|
|
uint64_t mMaxLayerAreaAnimated;
|
|
|
|
// We keep an instance of the struct for each type of compositor animation.
|
|
AnimationData mChromeAnimation;
|
|
AnimationData mContentAnimation;
|
|
AnimationData mApzAnimation;
|
|
};
|
|
|
|
} // namespace layers
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_layers_AnimationMetricsTracker_h
|