13
0

We were 2 more debug "bits" away from overflow, so recast PBD::DEBUG mechanism away from a 64bit integer and toward std::bitset.

Clean up a few minor related PBD::DEBUG issues along the way
This commit is contained in:
Paul Davis 2015-06-12 18:14:09 -04:00
parent 10643779b6
commit cc543280d9
18 changed files with 178 additions and 185 deletions

View File

@ -25,7 +25,7 @@
using namespace std;
uint64_t PBD::DEBUG::Drags = PBD::new_debug_bit ("drags");
uint64_t PBD::DEBUG::CutNPaste = PBD::new_debug_bit ("cutnpaste");
uint64_t PBD::DEBUG::Accelerators = PBD::new_debug_bit ("accelerators");
uint64_t PBD::DEBUG::GUITiming = PBD::new_debug_bit ("guitiming");
PBD::DebugBits PBD::DEBUG::Drags = PBD::new_debug_bit ("drags");
PBD::DebugBits PBD::DEBUG::CutNPaste = PBD::new_debug_bit ("cutnpaste");
PBD::DebugBits PBD::DEBUG::Accelerators = PBD::new_debug_bit ("accelerators");
PBD::DebugBits PBD::DEBUG::GUITiming = PBD::new_debug_bit ("guitiming");

View File

@ -26,10 +26,10 @@
namespace PBD {
namespace DEBUG {
extern uint64_t Drags;
extern uint64_t CutNPaste;
extern uint64_t Accelerators;
extern uint64_t GUITiming;
extern DebugBits Drags;
extern DebugBits CutNPaste;
extern DebugBits Accelerators;
extern DebugBits GUITiming;
}
}

View File

@ -42,7 +42,7 @@ class LIBARDOUR_API CycleTimer {
public:
CycleTimer(const std::string& name) {
#ifndef NDEBUG
if (PBD::debug_bits & PBD::DEBUG::CycleTimers) {
if (DEBUG_ENABLED (PBD::DEBUG::CycleTimers)) {
_name = name;
if (cycles_per_usec == 0) {
cycles_per_usec = get_mhz ();
@ -56,7 +56,7 @@ class LIBARDOUR_API CycleTimer {
~CycleTimer() {
#ifndef NDEBUG
if (PBD::debug_bits & PBD::DEBUG::CycleTimers) {
if (DEBUG_ENABLED (PBD::DEBUG::CycleTimers)) {
_exit = get_cycles();
std::cerr << _name << ": " << (float) (_exit - _entry) / cycles_per_usec << " (" << _entry << ", " << _exit << ')' << std::endl;
}

View File

@ -29,46 +29,46 @@
namespace PBD {
namespace DEBUG {
LIBARDOUR_API extern uint64_t MidiSourceIO;
LIBARDOUR_API extern uint64_t MidiPlaylistIO;
LIBARDOUR_API extern uint64_t MidiDiskstreamIO;
LIBARDOUR_API extern uint64_t SnapBBT;
LIBARDOUR_API extern uint64_t Latency;
LIBARDOUR_API extern uint64_t LatencyCompensation;
LIBARDOUR_API extern uint64_t Peaks;
LIBARDOUR_API extern uint64_t Processors;
LIBARDOUR_API extern uint64_t ProcessThreads;
LIBARDOUR_API extern uint64_t Graph;
LIBARDOUR_API extern uint64_t Destruction;
LIBARDOUR_API extern uint64_t MTC;
LIBARDOUR_API extern uint64_t LTC;
LIBARDOUR_API extern uint64_t Transport;
LIBARDOUR_API extern uint64_t Slave;
LIBARDOUR_API extern uint64_t SessionEvents;
LIBARDOUR_API extern uint64_t MidiIO;
LIBARDOUR_API extern uint64_t MackieControl;
LIBARDOUR_API extern uint64_t MidiClock;
LIBARDOUR_API extern uint64_t Monitor;
LIBARDOUR_API extern uint64_t Solo;
LIBARDOUR_API extern uint64_t AudioPlayback;
LIBARDOUR_API extern uint64_t Panning;
LIBARDOUR_API extern uint64_t LV2;
LIBARDOUR_API extern uint64_t CaptureAlignment;
LIBARDOUR_API extern uint64_t PluginManager;
LIBARDOUR_API extern uint64_t AudioUnits;
LIBARDOUR_API extern uint64_t ControlProtocols;
LIBARDOUR_API extern uint64_t CycleTimers;
LIBARDOUR_API extern uint64_t MidiTrackers;
LIBARDOUR_API extern uint64_t Layering;
LIBARDOUR_API extern uint64_t TempoMath;
LIBARDOUR_API extern uint64_t TempoMap;
LIBARDOUR_API extern uint64_t OrderKeys;
LIBARDOUR_API extern uint64_t Automation;
LIBARDOUR_API extern uint64_t WiimoteControl;
LIBARDOUR_API extern uint64_t Ports;
LIBARDOUR_API extern uint64_t AudioEngine;
LIBARDOUR_API extern uint64_t Soundcloud;
LIBARDOUR_API extern uint64_t Butler;
LIBARDOUR_API extern DebugBits MidiSourceIO;
LIBARDOUR_API extern DebugBits MidiPlaylistIO;
LIBARDOUR_API extern DebugBits MidiDiskstreamIO;
LIBARDOUR_API extern DebugBits SnapBBT;
LIBARDOUR_API extern DebugBits Latency;
LIBARDOUR_API extern DebugBits LatencyCompensation;
LIBARDOUR_API extern DebugBits Peaks;
LIBARDOUR_API extern DebugBits Processors;
LIBARDOUR_API extern DebugBits ProcessThreads;
LIBARDOUR_API extern DebugBits Graph;
LIBARDOUR_API extern DebugBits Destruction;
LIBARDOUR_API extern DebugBits MTC;
LIBARDOUR_API extern DebugBits LTC;
LIBARDOUR_API extern DebugBits Transport;
LIBARDOUR_API extern DebugBits Slave;
LIBARDOUR_API extern DebugBits SessionEvents;
LIBARDOUR_API extern DebugBits MidiIO;
LIBARDOUR_API extern DebugBits MackieControl;
LIBARDOUR_API extern DebugBits MidiClock;
LIBARDOUR_API extern DebugBits Monitor;
LIBARDOUR_API extern DebugBits Solo;
LIBARDOUR_API extern DebugBits AudioPlayback;
LIBARDOUR_API extern DebugBits Panning;
LIBARDOUR_API extern DebugBits LV2;
LIBARDOUR_API extern DebugBits CaptureAlignment;
LIBARDOUR_API extern DebugBits PluginManager;
LIBARDOUR_API extern DebugBits AudioUnits;
LIBARDOUR_API extern DebugBits ControlProtocols;
LIBARDOUR_API extern DebugBits CycleTimers;
LIBARDOUR_API extern DebugBits MidiTrackers;
LIBARDOUR_API extern DebugBits Layering;
LIBARDOUR_API extern DebugBits TempoMath;
LIBARDOUR_API extern DebugBits TempoMap;
LIBARDOUR_API extern DebugBits OrderKeys;
LIBARDOUR_API extern DebugBits Automation;
LIBARDOUR_API extern DebugBits WiimoteControl;
LIBARDOUR_API extern DebugBits Ports;
LIBARDOUR_API extern DebugBits AudioEngine;
LIBARDOUR_API extern DebugBits Soundcloud;
LIBARDOUR_API extern DebugBits Butler;
}
}

View File

@ -25,45 +25,45 @@
using namespace std;
uint64_t PBD::DEBUG::MidiSourceIO = PBD::new_debug_bit ("midisourceio");
uint64_t PBD::DEBUG::MidiPlaylistIO = PBD::new_debug_bit ("midiplaylistio");
uint64_t PBD::DEBUG::MidiDiskstreamIO = PBD::new_debug_bit ("mididiskstreamio");
uint64_t PBD::DEBUG::SnapBBT = PBD::new_debug_bit ("snapbbt");
uint64_t PBD::DEBUG::Latency = PBD::new_debug_bit ("latency");
uint64_t PBD::DEBUG::LatencyCompensation = PBD::new_debug_bit ("latencycompensation");
uint64_t PBD::DEBUG::Peaks = PBD::new_debug_bit ("peaks");
uint64_t PBD::DEBUG::Processors = PBD::new_debug_bit ("processors");
uint64_t PBD::DEBUG::ProcessThreads = PBD::new_debug_bit ("processthreads");
uint64_t PBD::DEBUG::Graph = PBD::new_debug_bit ("graph");
uint64_t PBD::DEBUG::Destruction = PBD::new_debug_bit ("destruction");
uint64_t PBD::DEBUG::MTC = PBD::new_debug_bit ("mtc");
uint64_t PBD::DEBUG::LTC = PBD::new_debug_bit ("ltc");
uint64_t PBD::DEBUG::Transport = PBD::new_debug_bit ("transport");
uint64_t PBD::DEBUG::Slave = PBD::new_debug_bit ("slave");
uint64_t PBD::DEBUG::SessionEvents = PBD::new_debug_bit ("sessionevents");
uint64_t PBD::DEBUG::MidiIO = PBD::new_debug_bit ("midiio");
uint64_t PBD::DEBUG::MackieControl = PBD::new_debug_bit ("mackiecontrol");
uint64_t PBD::DEBUG::MidiClock = PBD::new_debug_bit ("midiclock");
uint64_t PBD::DEBUG::Monitor = PBD::new_debug_bit ("monitor");
uint64_t PBD::DEBUG::Solo = PBD::new_debug_bit ("solo");
uint64_t PBD::DEBUG::AudioPlayback = PBD::new_debug_bit ("audioplayback");
uint64_t PBD::DEBUG::Panning = PBD::new_debug_bit ("panning");
uint64_t PBD::DEBUG::LV2 = PBD::new_debug_bit ("lv2");
uint64_t PBD::DEBUG::CaptureAlignment = PBD::new_debug_bit ("capturealignment");
uint64_t PBD::DEBUG::PluginManager = PBD::new_debug_bit ("pluginmanager");
uint64_t PBD::DEBUG::AudioUnits = PBD::new_debug_bit ("audiounits");
uint64_t PBD::DEBUG::ControlProtocols = PBD::new_debug_bit ("controlprotocols");
uint64_t PBD::DEBUG::CycleTimers = PBD::new_debug_bit ("cycletimers");
uint64_t PBD::DEBUG::MidiTrackers = PBD::new_debug_bit ("miditrackers");
uint64_t PBD::DEBUG::Layering = PBD::new_debug_bit ("layering");
uint64_t PBD::DEBUG::TempoMath = PBD::new_debug_bit ("tempomath");
uint64_t PBD::DEBUG::TempoMap = PBD::new_debug_bit ("tempomap");
uint64_t PBD::DEBUG::OrderKeys = PBD::new_debug_bit ("orderkeys");
uint64_t PBD::DEBUG::Automation = PBD::new_debug_bit ("automation");
uint64_t PBD::DEBUG::WiimoteControl = PBD::new_debug_bit ("wiimotecontrol");
uint64_t PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports");
uint64_t PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine");
uint64_t PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud");
uint64_t PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler");
PBD::DebugBits PBD::DEBUG::MidiSourceIO = PBD::new_debug_bit ("midisourceio");
PBD::DebugBits PBD::DEBUG::MidiPlaylistIO = PBD::new_debug_bit ("midiplaylistio");
PBD::DebugBits PBD::DEBUG::MidiDiskstreamIO = PBD::new_debug_bit ("mididiskstreamio");
PBD::DebugBits PBD::DEBUG::SnapBBT = PBD::new_debug_bit ("snapbbt");
PBD::DebugBits PBD::DEBUG::Latency = PBD::new_debug_bit ("latency");
PBD::DebugBits PBD::DEBUG::LatencyCompensation = PBD::new_debug_bit ("latencycompensation");
PBD::DebugBits PBD::DEBUG::Peaks = PBD::new_debug_bit ("peaks");
PBD::DebugBits PBD::DEBUG::Processors = PBD::new_debug_bit ("processors");
PBD::DebugBits PBD::DEBUG::ProcessThreads = PBD::new_debug_bit ("processthreads");
PBD::DebugBits PBD::DEBUG::Graph = PBD::new_debug_bit ("graph");
PBD::DebugBits PBD::DEBUG::Destruction = PBD::new_debug_bit ("destruction");
PBD::DebugBits PBD::DEBUG::MTC = PBD::new_debug_bit ("mtc");
PBD::DebugBits PBD::DEBUG::LTC = PBD::new_debug_bit ("ltc");
PBD::DebugBits PBD::DEBUG::Transport = PBD::new_debug_bit ("transport");
PBD::DebugBits PBD::DEBUG::Slave = PBD::new_debug_bit ("slave");
PBD::DebugBits PBD::DEBUG::SessionEvents = PBD::new_debug_bit ("sessionevents");
PBD::DebugBits PBD::DEBUG::MidiIO = PBD::new_debug_bit ("midiio");
PBD::DebugBits PBD::DEBUG::MackieControl = PBD::new_debug_bit ("mackiecontrol");
PBD::DebugBits PBD::DEBUG::MidiClock = PBD::new_debug_bit ("midiclock");
PBD::DebugBits PBD::DEBUG::Monitor = PBD::new_debug_bit ("monitor");
PBD::DebugBits PBD::DEBUG::Solo = PBD::new_debug_bit ("solo");
PBD::DebugBits PBD::DEBUG::AudioPlayback = PBD::new_debug_bit ("audioplayback");
PBD::DebugBits PBD::DEBUG::Panning = PBD::new_debug_bit ("panning");
PBD::DebugBits PBD::DEBUG::LV2 = PBD::new_debug_bit ("lv2");
PBD::DebugBits PBD::DEBUG::CaptureAlignment = PBD::new_debug_bit ("capturealignment");
PBD::DebugBits PBD::DEBUG::PluginManager = PBD::new_debug_bit ("pluginmanager");
PBD::DebugBits PBD::DEBUG::AudioUnits = PBD::new_debug_bit ("audiounits");
PBD::DebugBits PBD::DEBUG::ControlProtocols = PBD::new_debug_bit ("controlprotocols");
PBD::DebugBits PBD::DEBUG::CycleTimers = PBD::new_debug_bit ("cycletimers");
PBD::DebugBits PBD::DEBUG::MidiTrackers = PBD::new_debug_bit ("miditrackers");
PBD::DebugBits PBD::DEBUG::Layering = PBD::new_debug_bit ("layering");
PBD::DebugBits PBD::DEBUG::TempoMath = PBD::new_debug_bit ("tempomath");
PBD::DebugBits PBD::DEBUG::TempoMap = PBD::new_debug_bit ("tempomap");
PBD::DebugBits PBD::DEBUG::OrderKeys = PBD::new_debug_bit ("orderkeys");
PBD::DebugBits PBD::DEBUG::Automation = PBD::new_debug_bit ("automation");
PBD::DebugBits PBD::DEBUG::WiimoteControl = PBD::new_debug_bit ("wiimotecontrol");
PBD::DebugBits PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports");
PBD::DebugBits PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine");
PBD::DebugBits PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud");
PBD::DebugBits PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler");

View File

@ -163,7 +163,7 @@ MidiBuffer::push_back(TimeType time, size_t size, const uint8_t* data)
const size_t stamp_size = sizeof(TimeType);
#ifndef NDEBUG
if (DEBUG::MidiIO & PBD::debug_bits) {
if (DEBUG_ENABLED(DEBUG::MidiIO)) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("midibuffer %1 push event @ %2 sz %3 ", this, time, size));
for (size_t i=0; i < size; ++i) {

View File

@ -414,7 +414,7 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
break;
}
#ifndef NDEBUG
if (DEBUG::MidiIO & PBD::debug_bits) {
if (DEBUG_ENABLED(DEBUG::MidiIO)) {
const uint8_t* __data = ev.buffer();
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("mididiskstream %1 capture event @ %2 + %3 sz %4 ", this, ev.time(), transport_frame, ev.size()));

View File

@ -231,18 +231,18 @@ MidiPort::flush_buffers (pframes_t nframes)
// event times are in frames, relative to cycle start
#ifndef NDEBUG
if (DEBUG::MidiIO & PBD::debug_bits) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("MidiPort %1 pop event @ %2 sz %3 ", _buffer, ev.time(), ev.size()));
for (size_t i=0; i < ev.size(); ++i) {
DEBUG_STR_APPEND(a,hex);
DEBUG_STR_APPEND(a,"0x");
DEBUG_STR_APPEND(a,(int)(ev.buffer()[i]));
DEBUG_STR_APPEND(a,' ');
}
DEBUG_STR_APPEND(a,'\n');
DEBUG_TRACE (DEBUG::MidiIO, DEBUG_STR(a).str());
}
if (DEBUG_ENABLED (DEBUG::MidiIO)) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("MidiPort %1 pop event @ %2 sz %3 ", _buffer, ev.time(), ev.size()));
for (size_t i=0; i < ev.size(); ++i) {
DEBUG_STR_APPEND(a,hex);
DEBUG_STR_APPEND(a,"0x");
DEBUG_STR_APPEND(a,(int)(ev.buffer()[i]));
DEBUG_STR_APPEND(a,' ');
}
DEBUG_STR_APPEND(a,'\n');
DEBUG_TRACE (DEBUG::MidiIO, DEBUG_STR(a).str());
}
#endif
assert (ev.time() < (nframes + _global_port_buffer_offset + _port_buffer_offset));

View File

@ -103,7 +103,7 @@ MidiRingBuffer<T>::read(MidiBuffer& dst, framepos_t start, framepos_t end, frame
bool success = read_contents (ev_size, write_loc);
#ifndef NDEBUG
if (DEBUG::MidiDiskstreamIO && PBD::debug_bits) {
if (DEBUG_ENABLED (DEBUG::MidiDiskstreamIO)) {
DEBUG_STR_DECL(a);
DEBUG_STR_APPEND(a, string_compose ("wrote MidiEvent to Buffer (time=%1, start=%2 offset=%3)", ev_time, start, offset));
for (size_t i=0; i < ev_size; ++i) {

View File

@ -74,11 +74,6 @@ SessionEvent::operator new (size_t)
DEBUG_TRACE (DEBUG::SessionEvents, string_compose ("%1 Allocating SessionEvent from %2 ev @ %3 pool size %4 free %5 used %6\n", pthread_name(), p->name(), ev,
p->total(), p->available(), p->used()));
#ifndef NDEBUG
if (DEBUG::SessionEvents & PBD::debug_bits) {
// stacktrace (cerr, 40);
}
#endif
ev->own_pool = p;
return ev;
}
@ -94,12 +89,6 @@ SessionEvent::operator delete (void *ptr, size_t /*size*/)
pthread_name(), ev, enum_2_string (ev->type), enum_2_string (ev->action), p->name(), ev->own_pool->name(), ev->own_pool->total(), ev->own_pool->available(), ev->own_pool->used()
));
#ifndef NDEBUG
if (DEBUG::SessionEvents & PBD::debug_bits) {
// stacktrace (cerr, 40);
}
#endif
if (p && p == ev->own_pool) {
p->release (ptr);
} else {

View File

@ -28,12 +28,12 @@
namespace PBD {
namespace DEBUG {
LIBCANVAS_API extern uint64_t CanvasItems;
LIBCANVAS_API extern uint64_t CanvasItemsDirtied;
LIBCANVAS_API extern uint64_t CanvasEvents;
LIBCANVAS_API extern uint64_t CanvasRender;
LIBCANVAS_API extern uint64_t CanvasEnterLeave;
LIBCANVAS_API extern uint64_t WaveView;
LIBCANVAS_API extern DebugBits CanvasItems;
LIBCANVAS_API extern DebugBits CanvasItemsDirtied;
LIBCANVAS_API extern DebugBits CanvasEvents;
LIBCANVAS_API extern DebugBits CanvasRender;
LIBCANVAS_API extern DebugBits CanvasEnterLeave;
LIBCANVAS_API extern DebugBits WaveView;
}
}

View File

@ -24,12 +24,12 @@
using namespace std;
uint64_t PBD::DEBUG::CanvasItems = PBD::new_debug_bit ("canvasitems");
uint64_t PBD::DEBUG::CanvasItemsDirtied = PBD::new_debug_bit ("canvasitemsdirtied");
uint64_t PBD::DEBUG::CanvasEvents = PBD::new_debug_bit ("canvasevents");
uint64_t PBD::DEBUG::CanvasRender = PBD::new_debug_bit ("canvasrender");
uint64_t PBD::DEBUG::CanvasEnterLeave = PBD::new_debug_bit ("canvasenterleave");
uint64_t PBD::DEBUG::WaveView = PBD::new_debug_bit ("waveview");
PBD::DebugBits PBD::DEBUG::CanvasItems = PBD::new_debug_bit ("canvasitems");
PBD::DebugBits PBD::DEBUG::CanvasItemsDirtied = PBD::new_debug_bit ("canvasitemsdirtied");
PBD::DebugBits PBD::DEBUG::CanvasEvents = PBD::new_debug_bit ("canvasevents");
PBD::DebugBits PBD::DEBUG::CanvasRender = PBD::new_debug_bit ("canvasrender");
PBD::DebugBits PBD::DEBUG::CanvasEnterLeave = PBD::new_debug_bit ("canvasenterleave");
PBD::DebugBits PBD::DEBUG::WaveView = PBD::new_debug_bit ("waveview");
struct timeval ArdourCanvas::epoch;
map<string, struct timeval> ArdourCanvas::last_time;

View File

@ -27,6 +27,8 @@
#include <limits>
#include <list>
#include "pbd/debug.h"
#include "evoral/Beats.hpp"
#include "evoral/visibility.h"
@ -46,9 +48,9 @@ typedef uint32_t EventType;
namespace PBD {
namespace DEBUG {
LIBEVORAL_API extern uint64_t Sequence;
LIBEVORAL_API extern uint64_t Note;
LIBEVORAL_API extern uint64_t ControlList;
LIBEVORAL_API extern DebugBits Sequence;
LIBEVORAL_API extern DebugBits Note;
LIBEVORAL_API extern DebugBits ControlList;
}
}

View File

@ -1,6 +1,6 @@
#include "evoral/types.hpp"
uint64_t PBD::DEBUG::Sequence = PBD::new_debug_bit ("sequence");
uint64_t PBD::DEBUG::Note = PBD::new_debug_bit ("note");
uint64_t PBD::DEBUG::ControlList = PBD::new_debug_bit ("controllist");
PBD::DebugBits PBD::DEBUG::Sequence = PBD::new_debug_bit ("sequence");
PBD::DebugBits PBD::DEBUG::Note = PBD::new_debug_bit ("note");
PBD::DebugBits PBD::DEBUG::ControlList = PBD::new_debug_bit ("controllist");

View File

@ -20,5 +20,5 @@
#include "gtkmm2ext/debug.h"
#include "pbd/debug.h"
uint64_t Gtkmm2ext::DEBUG::Keyboard = PBD::new_debug_bit ("keyboard");
uint64_t Gtkmm2ext::DEBUG::Bindings = PBD::new_debug_bit ("bindings");
PBD::DebugBits PBD::DEBUG::Keyboard = PBD::new_debug_bit ("keyboard");
PBD::DebugBits PBD::DEBUG::Bindings = PBD::new_debug_bit ("bindings");

View File

@ -20,14 +20,16 @@
#ifndef __libgtkmm2ext_debug_h__
#define __libgtkmm2ext_debug_h__
#include "gtkmm2ext/visibility.h"
#include <stdint.h>
namespace Gtkmm2ext {
#include "pbd/debug.h"
#include "gtkmm2ext/visibility.h"
namespace PBD {
namespace DEBUG {
LIBGTKMM2EXT_API extern uint64_t Keyboard;
LIBGTKMM2EXT_API extern uint64_t Bindings;
LIBGTKMM2EXT_API extern DebugBits Keyboard;
LIBGTKMM2EXT_API extern DebugBits Bindings;
}
}

View File

@ -31,9 +31,11 @@
#include "i18n.h"
using namespace std;
static uint64_t _debug_bit = 1;
using PBD::DebugBits;
typedef std::map<const char*,uint64_t> DebugMap;
static uint64_t _debug_bit = 0;
typedef std::map<const char*,DebugBits> DebugMap;
namespace PBD {
DebugMap & _debug_bit_map()
@ -43,24 +45,23 @@ namespace PBD {
}
}
uint64_t PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful");
uint64_t PBD::DEBUG::Properties = PBD::new_debug_bit ("properties");
uint64_t PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager");
uint64_t PBD::DEBUG::Pool = PBD::new_debug_bit ("pool");
uint64_t PBD::DEBUG::EventLoop = PBD::new_debug_bit ("eventloop");
uint64_t PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui");
uint64_t PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils");
uint64_t PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration");
DebugBits PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful");
DebugBits PBD::DEBUG::Properties = PBD::new_debug_bit ("properties");
DebugBits PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager");
DebugBits PBD::DEBUG::Pool = PBD::new_debug_bit ("pool");
DebugBits PBD::DEBUG::EventLoop = PBD::new_debug_bit ("eventloop");
DebugBits PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui");
DebugBits PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils");
DebugBits PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration");
uint64_t PBD::debug_bits = 0x0;
DebugBits PBD::debug_bits;
uint64_t
DebugBits
PBD::new_debug_bit (const char* name)
{
uint64_t ret;
_debug_bit_map().insert (make_pair (name, _debug_bit));
ret = _debug_bit;
_debug_bit <<= 1;
DebugBits ret;
ret.set (_debug_bit++, 1);
_debug_bit_map().insert (make_pair (name, ret));
return ret;
}
@ -70,12 +71,6 @@ PBD::debug_print (const char* prefix, string str)
cerr << prefix << ": " << str;
}
void
PBD::set_debug_bits (uint64_t bits)
{
debug_bits = bits;
}
int
PBD::parse_debug_options (const char* str)
{
@ -83,7 +78,7 @@ PBD::parse_debug_options (const char* str)
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep (",");
tokenizer tokens (in_str, sep);
uint64_t bits = 0;
DebugBits bits;
for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) {
if (*tok_iter == "list") {
@ -92,20 +87,22 @@ PBD::parse_debug_options (const char* str)
}
if (*tok_iter == "all") {
PBD::set_debug_bits (~0ULL);
debug_bits.set (); /* sets all bits */
return 0;
}
for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
for (map<const char*,DebugBits>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
const char* cstr = (*tok_iter).c_str();
if (strncasecmp (cstr, i->first, strlen (cstr)) == 0) {
bits |= i->second;
bits |= i->second;
cerr << i->first << " set ... debug bits now set to " << bits << " using " << i->second << endl;
}
}
}
PBD::set_debug_bits (bits);
debug_bits = bits;
return 0;
}
@ -117,7 +114,7 @@ PBD::list_debug_options ()
vector<string> options;
for (map<const char*,uint64_t>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
for (map<const char*,DebugBits>::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) {
options.push_back (i->first);
}

View File

@ -20,6 +20,7 @@
#ifndef __libpbd_debug_h__
#define __libpbd_debug_h__
#include <bitset>
#include <stdint.h>
#include <sstream>
@ -29,10 +30,12 @@
namespace PBD {
LIBPBD_API extern uint64_t debug_bits;
LIBPBD_API uint64_t new_debug_bit (const char* name);
typedef std::bitset<64> DebugBits;
LIBPBD_API extern DebugBits debug_bits;
LIBPBD_API DebugBits new_debug_bit (const char* name);
LIBPBD_API void debug_print (const char* prefix, std::string str);
LIBPBD_API void set_debug_bits (uint64_t bits);
LIBPBD_API void set_debug_bits (DebugBits bits);
LIBPBD_API int parse_debug_options (const char* str);
LIBPBD_API void list_debug_options ();
@ -40,32 +43,32 @@ namespace PBD {
/* this namespace is so that we can write DEBUG::bit_name */
LIBPBD_API extern uint64_t Stateful;
LIBPBD_API extern uint64_t Properties;
LIBPBD_API extern uint64_t FileManager;
LIBPBD_API extern uint64_t Pool;
LIBPBD_API extern uint64_t EventLoop;
LIBPBD_API extern uint64_t AbstractUI;
LIBPBD_API extern uint64_t Configuration;
extern uint64_t FileUtils;
LIBPBD_API extern DebugBits Stateful;
LIBPBD_API extern DebugBits Properties;
LIBPBD_API extern DebugBits FileManager;
LIBPBD_API extern DebugBits Pool;
LIBPBD_API extern DebugBits EventLoop;
LIBPBD_API extern DebugBits AbstractUI;
LIBPBD_API extern DebugBits Configuration;
LIBPBD_API extern DebugBits FileUtils;
}
}
#ifndef NDEBUG
#define DEBUG_TRACE(bits,str) if ((bits) & PBD::debug_bits) { PBD::debug_print (# bits, str); }
#define DEBUG_TRACE(bits,str) if (((bits) & PBD::debug_bits).any()) { PBD::debug_print (# bits, str); }
#define DEBUG_STR_DECL(id) std::stringstream __debug_str ## id;
#define DEBUG_STR(id) __debug_str ## id
#define DEBUG_STR_APPEND(id,s) __debug_str ## id << s;
#define DEBUG_ENABLED(bits) ((bits) & PBD::debug_bits)
#define DEBUG_ENABLED(bits) (((bits) & PBD::debug_bits).any())
#ifdef PTW32_VERSION
#define DEBUG_THREAD_SELF pthread_self().p
#else
#define DEBUG_THREAD_SELF pthread_self()
#endif
#define DEBUG_TIMING_START(bits,td) if ((bits) & PBD::debug_bits) { td.start_timing (); }
#define DEBUG_TIMING_ADD_ELAPSED(bits,td) if ((bits) & PBD::debug_bits) { td.add_elapsed (); }
#define DEBUG_TIMING_RESET(bits,td) if ((bits) & PBD::debug_bits) { td.reset (); }
#define DEBUG_TIMING_START(bits,td) if (DEBUG_ENABLED (bits)) { td.start_timing (); }
#define DEBUG_TIMING_ADD_ELAPSED(bits,td) if (DEBUG_ENABLED (bits)) { td.add_elapsed (); }
#define DEBUG_TIMING_RESET(bits,td) if (DEBUG_ENABLED (bits)) { td.reset (); }
#else
#define DEBUG_TRACE(bits,fmt,...) /*empty*/