mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 12:51:06 +00:00
98e394c703
This telemetry was trying to measure three things: * The time spent during style / layout in a tick. This is useful. * The times SetNeed{Style,Layout} flush have been called. This is not a particularly useful metric, there's not much to learn or change from it. Any call is basically free as long as they're consecutive / there's no flush in between. * The number of times layout / style has been flushed during a tick. This is more useful than the above but, similarly, there's not too much to be learned here. Number of flushes can be completely orthogonal to how expensive it has been. It also had a number of flaws: * It is recorded per-PresShell, so we get multiple pings per tick. * Similarly, if a sub-frame dies before the tick, we just never report that time. Instead, refactor it to make it simpler, and just record the first metric reliably. This simplifies the code substantially, and I don't think we're losing much. The histograms are also expired. We might want to renew this, I'll file a follow-up to either properly renew this if we plan to look at it, or remove the code entirely from the tree. Differential Revision: https://phabricator.services.mozilla.com/D210907
85 lines
2.3 KiB
C++
85 lines
2.3 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_PresShellInlines_h
|
|
#define mozilla_PresShellInlines_h
|
|
|
|
#include "nsDocShell.h"
|
|
#include "GeckoProfiler.h"
|
|
#include "mozilla/PresShell.h"
|
|
#include "mozilla/dom/Document.h"
|
|
#include "mozilla/dom/Element.h"
|
|
|
|
namespace mozilla {
|
|
|
|
void PresShell::SetNeedLayoutFlush() {
|
|
mNeedLayoutFlush = true;
|
|
if (dom::Document* doc = mDocument->GetDisplayDocument()) {
|
|
if (PresShell* presShell = doc->GetPresShell()) {
|
|
presShell->mNeedLayoutFlush = true;
|
|
}
|
|
}
|
|
|
|
if (!mReflowCause) {
|
|
mReflowCause = profiler_capture_backtrace();
|
|
}
|
|
}
|
|
|
|
void PresShell::SetNeedStyleFlush() {
|
|
mNeedStyleFlush = true;
|
|
PROFILER_MARKER_UNTYPED(
|
|
"SetNeedStyleFlush", LAYOUT,
|
|
MarkerOptions(MarkerStack::Capture(StackCaptureOptions::NonNative),
|
|
mPresContext ? MarkerInnerWindowIdFromDocShell(
|
|
mPresContext->GetDocShell())
|
|
: MarkerInnerWindowId::NoId()));
|
|
|
|
if (dom::Document* doc = mDocument->GetDisplayDocument()) {
|
|
if (PresShell* presShell = doc->GetPresShell()) {
|
|
presShell->mNeedStyleFlush = true;
|
|
}
|
|
}
|
|
|
|
if (!mStyleCause) {
|
|
mStyleCause = profiler_capture_backtrace();
|
|
}
|
|
}
|
|
|
|
void PresShell::EnsureStyleFlush() {
|
|
SetNeedStyleFlush();
|
|
ObserveStyleFlushes();
|
|
}
|
|
|
|
void PresShell::EnsureLayoutFlush() {
|
|
SetNeedLayoutFlush();
|
|
ObserveStyleFlushes();
|
|
}
|
|
|
|
void PresShell::SetNeedThrottledAnimationFlush() {
|
|
mNeedThrottledAnimationFlush = true;
|
|
if (dom::Document* doc = mDocument->GetDisplayDocument()) {
|
|
if (PresShell* presShell = doc->GetPresShell()) {
|
|
presShell->mNeedThrottledAnimationFlush = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
ServoStyleSet* PresShell::StyleSet() const {
|
|
return mDocument->StyleSetForPresShell();
|
|
}
|
|
|
|
/* static */
|
|
inline void PresShell::EventHandler::OnPresShellDestroy(Document* aDocument) {
|
|
if (sLastKeyDownEventTargetElement &&
|
|
sLastKeyDownEventTargetElement->OwnerDoc() == aDocument) {
|
|
sLastKeyDownEventTargetElement = nullptr;
|
|
}
|
|
}
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_PresShellInlines_h
|