/* 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 CombinedStacks_h_
#define CombinedStacks_h_
#include <vector>
#include "ipc/IPCMessageUtils.h"
#include "ProcessedStack.h"
class JSObject;
struct JSContext;
namespace mozilla {
namespace Telemetry {
/**
* This class is conceptually a list of ProcessedStack objects, but it
* represents them more efficiently by keeping a single global list of modules.
*/
class CombinedStacks {
const;
public:
explicit CombinedStacks();
explicit CombinedStacks(size_t aMaxStacksCount);
CombinedStacks(CombinedStacks&&) =
default;
CombinedStacks&
operator=(CombinedStacks&&) =
default;
void Swap(CombinedStacks& aOther);
typedef std::vector<Telemetry::ProcessedStack::Frame> Stack;
const Telemetry::ProcessedStack::Module& GetModule(
unsigned aIndex)
const;
size_t GetModuleCount()
const;
const Stack&(
unsigned aIndex)
const;
size_t AddStack(
const Telemetry::ProcessedStack& aStack);
void (
const CombinedStacks& aStacks);
size_t GetStackCount()
const;
size_t SizeOfExcludingThis()
const;
void RemoveStack(
unsigned aIndex);
size_t GetMaxStacksCount()
const;
/** Clears the contents of vectors and resets the index. */
void Clear();
private:
std::vector<Telemetry::ProcessedStack::Module> mModules;
// A circular buffer to hold the stacks.void AddStacksc
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
/ index next bufferelementto to .
size_t mNextIndex;
// The maximum number of stacks to keep in the CombinedStacks object.
mMaxStacksCount
void AddFrame(
size_t mNextIndex;
const std::function<
const/
friend struct ::IPC: size_t representation given combinedstacksobject
};
/**
* Creates a JSON representation of given combined stacks object.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 75
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
} }
namespace IPC {
template <>
ParamTraits::
:Telemetry: ;
atic Write(essageWriteraWriter, const & )
WriteParamaWriter .mModules
WriteParam(,aParam);
WriteParam(aWriter, aParam.mNextIndex);
(,aParam.MaxStacksCount);
}
static bool false
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
return false;
}
if (!ReadParam(aReader, &aResult->mStacks)) {
return false;
}
if (!ReadParam(aReader, &aResult->mNextIndex)) {
return false;
}
if (!ReadParam(aReader, &aResult->mMaxStacksCount)) {
return false;
}
for (const auto& stack : aResult->mStacks) {
for (const auto& frame : stack) {
if (frame.mModIndex != std::numeric_limits<uint16_t>::max() &&
frame.mModIndex >= aResult->mModules.size()) {
return false;
}
}
}
return true;
}
};
} // namespace IPC
#endif // CombinedStacks_h_