tools/profiler/public/ProfilerBacktrace.h
author Nicholas Nethercote <nnethercote@mozilla.com>
Mon, 27 Feb 2017 12:56:42 +1100
changeset 374570 7becdd5d601a803789f817c7ae7d41b6f2d2c0d2
parent 374569 6de72f3b7f8abb27024a34faac7fbde24ee6ec8f
child 375031 bd730342c51508fd903a657030ae281163bf2c90
permissions -rw-r--r--
Bug 1328378 (part 6) - Eliminate SyncProfile. r=mstange. It's now a very thin wrapper around ThreadInfo, and so can be removed. The patch also has the bonus of setting mIsMainThread correctly for the ThreadInfos that used to be SyncProfiles (i.e. the ones created in profiler_get_backtrace()). As far as I can tell this has only one very minor effect, because that field is only used for those objects to determine how ThreadResponsiveness::Update() dispatches its runnables.

/* -*- 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/. */

#ifndef __PROFILER_BACKTRACE_H
#define __PROFILER_BACKTRACE_H

class ProfileBuffer;
class SpliceableJSONWriter;
class ThreadInfo;
class UniqueStacks;

class ProfilerBacktrace
{
public:
  explicit ProfilerBacktrace(ProfileBuffer* aBuffer, ThreadInfo* aThreadInfo);
  ~ProfilerBacktrace();

  // ProfilerBacktraces' stacks are deduplicated in the context of the
  // profile that contains the backtrace as a marker payload.
  //
  // That is, markers that contain backtraces should not need their own stack,
  // frame, and string tables. They should instead reuse their parent
  // profile's tables.
  void StreamJSON(SpliceableJSONWriter& aWriter, UniqueStacks& aUniqueStacks);

private:
  ProfilerBacktrace(const ProfilerBacktrace&);
  ProfilerBacktrace& operator=(const ProfilerBacktrace&);

  ProfileBuffer* mBuffer;
  ThreadInfo* mThreadInfo;
};

#endif // __PROFILER_BACKTRACE_H