diff options
| author | MenTaLguY <mental@rydia.net> | 2008-07-08 19:16:01 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2008-07-08 19:16:01 +0000 |
| commit | 5621aed042ec29e9606b2bdce44a1f42f61c8e6b (patch) | |
| tree | bc37f3fce13514460ab4f87a9aaad8862beeced3 /src/debug/gdk-event-latency-tracker.cpp | |
| parent | disable motion hints again; still some subtle issues to work out (diff) | |
| download | inkscape-5621aed042ec29e9606b2bdce44a1f42f61c8e6b.tar.gz inkscape-5621aed042ec29e9606b2bdce44a1f42f61c8e6b.zip | |
instrument event latency
(bzr r6231)
Diffstat (limited to 'src/debug/gdk-event-latency-tracker.cpp')
| -rw-r--r-- | src/debug/gdk-event-latency-tracker.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/debug/gdk-event-latency-tracker.cpp b/src/debug/gdk-event-latency-tracker.cpp new file mode 100644 index 000000000..8e34d2fc2 --- /dev/null +++ b/src/debug/gdk-event-latency-tracker.cpp @@ -0,0 +1,65 @@ +/* + * Inkscape::Debug::GdkEventLatencyTracker - tracks backlog of GDK events + * + * Authors: + * MenTaLguY <mental@rydia.net> + * + * Copyright (C) 2008 MenTaLguY + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "debug/gdk-event-latency-tracker.h" + +namespace Inkscape { +namespace Debug { + +GdkEventLatencyTracker::GdkEventLatencyTracker() +: start_seconds(0.0), max_latency(0.0) +{ + elapsed.stop(); + elapsed.reset(); +} + +boost::optional<double> GdkEventLatencyTracker::process(GdkEvent const *event) { + guint32 const timestamp=gdk_event_get_time(const_cast<GdkEvent *>(event)); + if (timestamp == GDK_CURRENT_TIME) { + return boost::optional<double>(); + } + double const timestamp_seconds = timestamp / 1000.0; + + if (start_seconds == 0.0) { + elapsed.start(); + start_seconds = timestamp_seconds; + return boost::optional<double>(0.0); + } else { + double const current_seconds = elapsed.elapsed() + start_seconds; + double delta = current_seconds - timestamp_seconds; + if (delta < 0.0) { + start_seconds += -delta; + delta = 0.0; + } else if (delta > max_latency) { + max_latency = delta; + } + return boost::optional<double>(delta); + } +} + +GdkEventLatencyTracker &GdkEventLatencyTracker::default_tracker() { + static GdkEventLatencyTracker tracker; + return tracker; +} + +} +} + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : |
