⛏️ index : haiku.git

/*
 * Copyright 2008-2010, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef BASIC_PROFILE_RESULT_H
#define BASIC_PROFILE_RESULT_H


#include "ProfileResult.h"


class BasicImageProfileResult : public ImageProfileResult,
	public DoublyLinkedListLinkImpl<BasicImageProfileResult> {
public:
								BasicImageProfileResult(SharedImage* image,
									image_id id);
	virtual						~BasicImageProfileResult();

			status_t			Init();

	inline	bool				AddHit(addr_t address);
	inline	void				AddUnknownHit();
	inline	void				AddSymbolHit(int32 symbolIndex);
	inline	void				AddImageHit();

	inline	const int64*		SymbolHits() const;
	inline	int64				UnknownHits() const;

private:
			int64*				fSymbolHits;
			int64				fUnknownHits;
};


class BasicProfileResult : public ProfileResult {
public:
								BasicProfileResult();

	virtual	void				AddExpectedTicks(int32 expected);
	virtual	void				AddDroppedTicks(int32 dropped);
	virtual	void				PrintResults(
									ImageProfileResultContainer* container);

	virtual status_t			GetImageProfileResult(SharedImage* image,
									image_id id,
									ImageProfileResult*& _imageResult);

protected:
			int64				fTotalTicks;
			int64				fUnkownTicks;
			int64				fExpectedTicks;
			int64				fDroppedTicks;
			int64				fTotalSampleCount;
};


class InclusiveProfileResult : public BasicProfileResult {
public:
	virtual	void				AddSamples(
									ImageProfileResultContainer* container,
									addr_t* samples, int32 sampleCount);
};


class ExclusiveProfileResult : public BasicProfileResult {
public:
	virtual	void				AddSamples(
									ImageProfileResultContainer* container,
									addr_t* samples, int32 sampleCount);
};


#endif	// BASIC_PROFILE_RESULT_H