X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace.hpp;h=f37f2494d7ca05b2acc27eb03791bdbecbcc6e5a;hb=edea899194c441353943c22577bc22bf0e64d187;hp=228c81352e979046ece2e8040d2f885ef7b27051;hpb=77373c35010d89e5ab3f030e4c60f8f6e3fdbe82;p=apitrace diff --git a/retrace/retrace.hpp b/retrace/retrace.hpp index 228c813..f37f249 100644 --- a/retrace/retrace.hpp +++ b/retrace/retrace.hpp @@ -1,6 +1,8 @@ /************************************************************************** * * Copyright 2011-2012 Jose Fonseca + * Copyright (C) 2013 Intel Corporation. All rights reversed. + * Author: Shuang He * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -28,7 +30,6 @@ #include #include -#include #include #include @@ -37,6 +38,9 @@ #include "trace_model.hpp" #include "trace_parser.hpp" #include "trace_profiler.hpp" +#include "trace_dump.hpp" + +#include "scoped_allocator.hpp" namespace image { @@ -51,37 +55,9 @@ extern trace::Parser parser; extern trace::Profiler profiler; -/** - * Similar to alloca(), but implemented with malloc. - */ -class ScopedAllocator +class ScopedAllocator : public ::ScopedAllocator { -private: - uintptr_t next; - public: - inline - ScopedAllocator() : - next(0) { - } - - inline void * - alloc(size_t size) { - /* 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) { - return NULL; - } - - *buf = next; - next = reinterpret_cast(buf); - assert((next & 1) == 0); - - return static_cast(&buf[1]); - } - /** * Allocate an array with the same dimensions as the specified value. */ @@ -89,7 +65,7 @@ public: alloc(const trace::Value *value, size_t size) { const trace::Array *array = dynamic_cast(value); if (array) { - return alloc(array->size() * size); + return ::ScopedAllocator::alloc(array->size() * size); } const trace::Null *null = dynamic_cast(value); if (null) { @@ -99,32 +75,6 @@ public: return NULL; } - /** - * Prevent this pointer from being automatically freed. - */ - template< class T > - inline void - bind(T *ptr) { - if (ptr) { - reinterpret_cast(ptr)[-1] |= 1; - } - } - - inline - ~ScopedAllocator() { - while (next) { - uintptr_t temp = *reinterpret_cast(next); - - bool bind = temp & 1; - temp &= ~1; - - if (!bind) { - free(reinterpret_cast(next)); - } - - next = temp; - } - } }; @@ -145,6 +95,7 @@ extern bool profiling; extern bool profilingCpuTimes; extern bool profilingGpuTimes; extern bool profilingPixelsDrawn; +extern bool profilingMemoryUsage; /** * State dumping. @@ -170,6 +121,7 @@ extern bool coreProfile; extern unsigned frameNo; extern unsigned callNo; +extern trace::DumpFlags dumpFlags; std::ostream &warning(trace::Call &call);