mozglue/misc/AutoProfilerLabel.cpp
author Gerald Squelart <gsquelart@mozilla.com>
Thu, 04 Jul 2019 04:38:16 +0000
changeset 481213 8fed7bc35767fdfab4bac0908ae9b21c08f49e1f
parent 448947 6f3709b3878117466168c40affa7bca0b60cf75b
child 481214 c9da4cd2c6f56a3b6034c41fb208e583ba0cbcd3
permissions -rw-r--r--
Bug 1559000 - mozglue's AutoProfilerLabel doesn't need to know about ProfilingStack - r=mstange `ProfilingStack*` happens to be the information that the current Gecko Profiler entry function wants to forward to the exit function, but AutoProfilerLabel does not really need to know about that. Changing it to `void*`, so that we can later use different entry/exit functions that use different context types. Differential Revision: https://phabricator.services.mozilla.com/D34806

/* -*- Mode: C++; tab-width: 2; 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 "mozilla/AutoProfilerLabel.h"

namespace mozilla {

static ProfilerLabelEnter sEnter = nullptr;
static ProfilerLabelExit sExit = nullptr;

void RegisterProfilerLabelEnterExit(ProfilerLabelEnter aEnter,
                                    ProfilerLabelExit aExit) {
  sEnter = aEnter;
  sExit = aExit;
}

AutoProfilerLabel::AutoProfilerLabel(
    const char* aLabel,
    const char* aDynamicString MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL) {
  MOZ_GUARD_OBJECT_NOTIFIER_INIT;

  mEntryContext = sEnter ? sEnter(aLabel, aDynamicString, this) : nullptr;
}

AutoProfilerLabel::~AutoProfilerLabel() {
  if (sExit && mEntryContext) {
    sExit(mEntryContext);
  }
}

}  // namespace mozilla