X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace.hpp;h=228c81352e979046ece2e8040d2f885ef7b27051;hb=65ba497caca56134f9b4f18658d104ce89092c11;hp=c1e556a97fbb03d726be09de3cb92540de88e5fc;hpb=9d27a54b0381610c30964880a5fdd4c27bb6e732;p=apitrace diff --git a/retrace/retrace.hpp b/retrace/retrace.hpp index c1e556a..228c813 100644 --- a/retrace/retrace.hpp +++ b/retrace/retrace.hpp @@ -36,54 +36,19 @@ #include "trace_model.hpp" #include "trace_parser.hpp" +#include "trace_profiler.hpp" -namespace retrace { - +namespace image { + class Image; +} -extern trace::Parser parser; +namespace retrace { -/** - * Handle map. - * - * It is just like a regular std::map container, but lookups of missing - * keys return the key instead of default constructor. - * - * This is necessary for several GL named objects, where one can either request - * the implementation to generate an unique name, or pick a value never used - * before. - * - * XXX: In some cases, instead of returning the key, it would make more sense - * to return an unused data value (e.g., container count). - */ -template -class map -{ -private: - typedef std::map base_type; - base_type base; - -public: - T & operator[] (const T &key) { - typename base_type::iterator it; - it = base.find(key); - if (it == base.end()) { - return (base[key] = key); - } - return it->second; - } - - const T & operator[] (const T &key) const { - typename base_type::const_iterator it; - it = base.find(key); - if (it == base.end()) { - return (base[key] = key); - } - return it->second; - } -}; +extern trace::Parser parser; +extern trace::Profiler profiler; /** @@ -95,15 +60,15 @@ private: uintptr_t next; public: + inline ScopedAllocator() : next(0) { } inline void * alloc(size_t size) { - if (!size) { - return NULL; - } + /* Always return valid address, even when size is zero */ + size = std::max(size, sizeof(uintptr_t)); uintptr_t * buf = static_cast(malloc(sizeof(uintptr_t) + size)); if (!buf) { @@ -117,21 +82,14 @@ public: return static_cast(&buf[1]); } - template< class T > - inline T * - alloc(size_t n = 1) { - return static_cast(alloc(sizeof(T) * n)); - } - /** * Allocate an array with the same dimensions as the specified value. */ - template< class T > - inline T * - alloc(const trace::Value *value) { + inline void * + alloc(const trace::Value *value, size_t size) { const trace::Array *array = dynamic_cast(value); if (array) { - return alloc(array->size()); + return alloc(array->size() * size); } const trace::Null *null = dynamic_cast(value); if (null) { @@ -170,25 +128,47 @@ public: }; -void -addRegion(unsigned long long address, void *buffer, unsigned long long size); - -void -delRegionByPointer(void *ptr); - -void * -toPointer(trace::Value &value, bool bind = false); - - /** * Output verbosity when retracing files. */ extern int verbosity; +/** + * Debugging checks. + */ +extern bool debug; + /** * Add profiling data to the dump when retracing. */ extern bool profiling; +extern bool profilingCpuTimes; +extern bool profilingGpuTimes; +extern bool profilingPixelsDrawn; + +/** + * State dumping. + */ +extern bool dumpingState; + + +enum Driver { + DRIVER_DEFAULT, + DRIVER_HARDWARE, // force hardware + DRIVER_SOFTWARE, + DRIVER_REFERENCE, + DRIVER_NULL, + DRIVER_MODULE, +}; + +extern Driver driver; +extern const char *driverModule; + +extern bool doubleBuffer; +extern bool coreProfile; + +extern unsigned frameNo; +extern unsigned callNo; std::ostream &warning(trace::Call &call); @@ -237,6 +217,45 @@ public: }; +class Dumper +{ +public: + virtual image::Image * + getSnapshot(void) { + return NULL; + } + + virtual bool + dumpState(std::ostream &os) { + return false; + } +}; + + +extern Dumper *dumper; + + +void +setUp(void); + +void +addCallbacks(retrace::Retracer &retracer); + +void +frameComplete(trace::Call &call); + + + +void +flushRendering(void); + +void +waitForInput(void); + +void +cleanUp(void); + + } /* namespace retrace */ #endif /* _RETRACE_HPP_ */