forked from mirrors/gecko-dev
The current implementation of TimelineConsumers contains some unnecessary complexity due to how it is initialized as a singleton, and the need for it to be initialized and used in a threadsafe way. This patch attempts to simplify it by making all members static, and removing the need to explicitly observe shutdown for cleanup. In addition, this approach avoids the risk of the type being accessed from off-main-thread during initialization or shutdown. Depends on D150442 Differential Revision: https://phabricator.services.mozilla.com/D150443
39 lines
1.1 KiB
C++
39 lines
1.1 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/. */
|
|
|
|
#include "AutoGlobalTimelineMarker.h"
|
|
|
|
#include "TimelineConsumers.h"
|
|
#include "MainThreadUtils.h"
|
|
|
|
namespace mozilla {
|
|
|
|
AutoGlobalTimelineMarker::AutoGlobalTimelineMarker(
|
|
const char* aName, MarkerStackRequest aStackRequest /* = STACK */
|
|
)
|
|
: mName(aName), mStackRequest(aStackRequest) {
|
|
MOZ_ASSERT(NS_IsMainThread());
|
|
|
|
if (TimelineConsumers::IsEmpty()) {
|
|
return;
|
|
}
|
|
|
|
TimelineConsumers::AddMarkerForAllObservedDocShells(
|
|
mName, MarkerTracingType::START, mStackRequest);
|
|
}
|
|
|
|
AutoGlobalTimelineMarker::~AutoGlobalTimelineMarker() {
|
|
MOZ_ASSERT(NS_IsMainThread());
|
|
|
|
if (TimelineConsumers::IsEmpty()) {
|
|
return;
|
|
}
|
|
|
|
TimelineConsumers::AddMarkerForAllObservedDocShells(
|
|
mName, MarkerTracingType::END, mStackRequest);
|
|
}
|
|
|
|
} // namespace mozilla
|