1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
/* -*- 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_PerformanceInteractionMetrics_h__
#define mozilla_dom_PerformanceInteractionMetrics_h__
#include "PerformanceEventTiming.h"
#include "nsHashtablesFwd.h"
namespace mozilla::dom {
class PerformanceInteractionMetrics final {
public:
PerformanceInteractionMetrics();
PerformanceInteractionMetrics(const PerformanceInteractionMetrics& aCopy) =
delete;
PerformanceInteractionMetrics& operator=(
const PerformanceInteractionMetrics& aCopy) = delete;
Maybe<uint64_t> ComputeInteractionId(PerformanceEventTiming* aEventTiming,
const WidgetEvent* aEvent);
nsTHashMap<uint32_t, RefPtr<PerformanceEventTiming>>& PendingKeyDowns() {
return mPendingKeyDowns;
}
nsTHashMap<uint32_t, RefPtr<PerformanceEventTiming>>& PendingPointerDowns() {
return mPendingPointerDowns;
}
uint64_t InteractionCount() { return mInteractionCount; }
uint64_t IncreaseInteractionValueAndCount();
virtual ~PerformanceInteractionMetrics() = default;
private:
// A map of integers to PerformanceEventTimings which is initially empty.
// https://w3c.github.io/event-timing/#pending-key-downs
nsTHashMap<uint32_t, RefPtr<PerformanceEventTiming>> mPendingKeyDowns;
// A map of integers to PerformanceEventTimings which is initially empty.
// https://w3c.github.io/event-timing/#pending-pointer-downs
nsTHashMap<uint32_t, RefPtr<PerformanceEventTiming>> mPendingPointerDowns;
// https://w3c.github.io/event-timing/#pointer-interaction-value-map
nsTHashMap<uint32_t, uint32_t> mPointerInteractionValueMap;
// An integer which counts the total number of distinct user interactions,
// for which there was a unique interactionId computed via computing
// interactionId.
// https://w3c.github.io/event-timing/#window-interactioncount
uint64_t mInteractionCount = 0;
uint64_t mCurrentInteractionValue;
Maybe<uint64_t> mLastKeydownInteractionValue;
bool mContextMenuTriggered = false;
};
inline void ImplCycleCollectionTraverse(
nsCycleCollectionTraversalCallback& aCallback,
PerformanceInteractionMetrics& aMetrics, const char* aName,
uint32_t aFlags = 0) {
ImplCycleCollectionTraverse(aCallback, aMetrics.PendingKeyDowns(), aName,
aFlags);
ImplCycleCollectionTraverse(aCallback, aMetrics.PendingPointerDowns(), aName,
aFlags);
}
inline void ImplCycleCollectionUnlink(PerformanceInteractionMetrics& aMetrics) {
aMetrics.PendingKeyDowns().Clear();
aMetrics.PendingPointerDowns().Clear();
}
} // namespace mozilla::dom
#endif // mozilla_dom_PerformanceInteractionMetrics_h__
|