summaryrefslogtreecommitdiff
path: root/include/activity_log.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/activity_log.h')
-rw-r--r--include/activity_log.h220
1 files changed, 197 insertions, 23 deletions
diff --git a/include/activity_log.h b/include/activity_log.h
index d5d6b43..a5ebde3 100644
--- a/include/activity_log.h
+++ b/include/activity_log.h
@@ -13,6 +13,11 @@
#include <gtest/gtest.h> // For FRIEND_TEST
#include <json/value.h>
+// This should be set by build system:
+#ifndef VCSID
+#define VCSID "Unknown"
+#endif // VCSID
+
// This is a class that circularly buffers all incoming and outgoing activity
// so that end users can report issues and engineers can reproduce them.
@@ -28,6 +33,10 @@ class ActivityLog {
FRIEND_TEST(ActivityLogTest, EncodePropChangeDoubleTest);
FRIEND_TEST(ActivityLogTest, EncodePropChangeIntTest);
FRIEND_TEST(ActivityLogTest, EncodePropChangeShortTest);
+ FRIEND_TEST(ActivityLogTest, GestureConsumeTest);
+ FRIEND_TEST(ActivityLogTest, GestureProduceTest);
+ FRIEND_TEST(ActivityLogTest, HardwareStatePreTest);
+ FRIEND_TEST(ActivityLogTest, HardwareStatePostTest);
FRIEND_TEST(LoggingFilterInterpreterTest, SimpleTest);
FRIEND_TEST(PropRegistryTest, PropChangeTest);
public:
@@ -38,19 +47,126 @@ class ActivityLog {
stime_t timestamp;
};
struct PropChangeEntry {
- const char* name;
+ std::string name;
// No string variant because string values can't change
std::variant<GesturesPropBool,
double,
int,
short> value;
};
+
+ struct HardwareStatePre {
+ std::string name;
+ HardwareState hwstate;
+ };
+ struct HardwareStatePost {
+ std::string name;
+ HardwareState hwstate;
+ };
+ struct GestureConsume {
+ std::string name;
+ Gesture gesture;
+ };
+ struct GestureProduce {
+ std::string name;
+ Gesture gesture;
+ };
+ struct HandleTimerPre {
+ std::string name;
+ bool timeout_is_present;
+ stime_t now;
+ stime_t timeout;
+ };
+ struct HandleTimerPost {
+ std::string name;
+ bool timeout_is_present;
+ stime_t now;
+ stime_t timeout;
+ };
+ struct AccelGestureDebug {
+ bool no_accel_for_gesture_type;
+ bool no_accel_for_small_dt;
+ bool no_accel_for_small_speed;
+ bool no_accel_for_bad_gain;
+ bool dropped_gesture;
+ bool x_y_are_velocity;
+ float x_scale, y_scale;
+ float dt;
+ float adjusted_dt;
+ float speed;
+ float smoothed_speed;
+ float gain_x, gain_y;
+ };
+ struct TimestampGestureDebug {
+ stime_t skew;
+ };
+ struct TimestampHardwareStateDebug {
+ bool is_using_fake;
+ union {
+ struct {
+ bool was_first_or_backward;
+ stime_t prev_msc_timestamp_in;
+ stime_t prev_msc_timestamp_out;
+ };
+ struct {
+ bool was_divergence_reset;
+ stime_t fake_timestamp_in;
+ stime_t fake_timestamp_delta;
+ stime_t fake_timestamp_out;
+ };
+ };
+ stime_t skew;
+ stime_t max_skew;
+ };
+
struct Entry {
std::variant<HardwareState,
TimerCallbackEntry,
CallbackRequestEntry,
Gesture,
- PropChangeEntry> details;
+ PropChangeEntry,
+ HardwareStatePre,
+ HardwareStatePost,
+ GestureConsume,
+ GestureProduce,
+ HandleTimerPre,
+ HandleTimerPost,
+ AccelGestureDebug,
+ TimestampGestureDebug,
+ TimestampHardwareStateDebug> details;
+ };
+
+ enum class EventDebug {
+ // Base Event Types
+ Gesture = 0,
+ HardwareState,
+ HandleTimer,
+ // FilterInterpreter Debug Detail Event Types
+ Accel,
+ Box,
+ ClickWiggle,
+ FingerMerge,
+ FlingStop,
+ HapticButtonGenerator,
+ Iir,
+ IntegratGesture,
+ Logging,
+ Lookahead,
+ Metrics,
+ NonLinearity,
+ PalmClassifying,
+ Scaling,
+ SensorJump,
+ SplitCorrecting,
+ StationaryWiggle,
+ StuckButtonInhibitor,
+ T5R2Correcting,
+ Timestamp,
+ TrendClassifying,
+ // Interpreter Debug Detail Event Types
+ ImmediateInterpreter,
+ MouseInterpreter,
+ MultitouchMouseInterpreter,
};
explicit ActivityLog(PropRegistry* prop_reg);
@@ -63,6 +179,24 @@ class ActivityLog {
void LogGesture(const Gesture& gesture);
void LogPropChange(const PropChangeEntry& prop_change);
+ // Debug extensions for Log*()
+ void LogGestureConsume(const std::string& name, const Gesture& gesture);
+ void LogGestureProduce(const std::string& name, const Gesture& gesture);
+ void LogHardwareStatePre(const std::string& name,
+ const HardwareState& hwstate);
+ void LogHardwareStatePost(const std::string& name,
+ const HardwareState& hwstate);
+ void LogHandleTimerPre(const std::string& name,
+ stime_t now, const stime_t* timeout);
+ void LogHandleTimerPost(const std::string& name,
+ stime_t now, const stime_t* timeout);
+
+ template<typename T>
+ void LogDebugData(const T& debug_data) {
+ Entry* entry = PushBack();
+ entry->details = debug_data;
+ }
+
// Dump allocates, and thus must not be called on a signal handler.
void Dump(const char* filename);
void Clear() { head_idx_ = size_ = 0; }
@@ -81,11 +215,18 @@ class ActivityLog {
static const char kKeyNext[];
static const char kKeyRoot[];
static const char kKeyType[];
+ static const char kKeyMethodName[];
static const char kKeyHardwareState[];
+ static const char kKeyHardwareStatePre[];
+ static const char kKeyHardwareStatePost[];
static const char kKeyTimerCallback[];
static const char kKeyCallbackRequest[];
static const char kKeyGesture[];
+ static const char kKeyGestureConsume[];
+ static const char kKeyGestureProduce[];
static const char kKeyPropChange[];
+ static const char kKeyHandleTimerPre[];
+ static const char kKeyHandleTimerPost[];
// HardwareState keys:
static const char kKeyHardwareStateTimestamp[];
static const char kKeyHardwareStateButtonsDown[];
@@ -106,9 +247,9 @@ class ActivityLog {
static const char kKeyFingerStatePositionY[];
static const char kKeyFingerStateTrackingId[];
static const char kKeyFingerStateFlags[];
- // TimerCallback keys:
- static const char kKeyTimerCallbackNow[];
- // CallbackRequest keys:
+ // Timer/Callback keys:
+ static const char kKeyTimerNow[];
+ static const char kKeyHandleTimerTimeout[];
static const char kKeyCallbackRequestWhen[];
// Gesture keys:
static const char kKeyGestureType[];
@@ -126,16 +267,10 @@ class ActivityLog {
static const char kValueGestureTypeMetrics[];
static const char kKeyGestureStartTime[];
static const char kKeyGestureEndTime[];
- static const char kKeyGestureMoveDX[];
- static const char kKeyGestureMoveDY[];
- static const char kKeyGestureMoveOrdinalDX[];
- static const char kKeyGestureMoveOrdinalDY[];
- static const char kKeyGestureScrollDX[];
- static const char kKeyGestureScrollDY[];
- static const char kKeyGestureScrollOrdinalDX[];
- static const char kKeyGestureScrollOrdinalDY[];
- static const char kKeyGestureMouseWheelDX[];
- static const char kKeyGestureMouseWheelDY[];
+ static const char kKeyGestureDX[];
+ static const char kKeyGestureDY[];
+ static const char kKeyGestureOrdinalDX[];
+ static const char kKeyGestureOrdinalDY[];
static const char kKeyGestureMouseWheelTicksDX[];
static const char kKeyGestureMouseWheelTicksDY[];
static const char kKeyGesturePinchDZ[];
@@ -148,14 +283,6 @@ class ActivityLog {
static const char kKeyGestureFlingOrdinalVX[];
static const char kKeyGestureFlingOrdinalVY[];
static const char kKeyGestureFlingState[];
- static const char kKeyGestureSwipeDX[];
- static const char kKeyGestureSwipeDY[];
- static const char kKeyGestureSwipeOrdinalDX[];
- static const char kKeyGestureSwipeOrdinalDY[];
- static const char kKeyGestureFourFingerSwipeDX[];
- static const char kKeyGestureFourFingerSwipeDY[];
- static const char kKeyGestureFourFingerSwipeOrdinalDX[];
- static const char kKeyGestureFourFingerSwipeOrdinalDY[];
static const char kKeyGestureMetricsType[];
static const char kKeyGestureMetricsData1[];
static const char kKeyGestureMetricsData2[];
@@ -189,6 +316,37 @@ class ActivityLog {
static const char kKeyProperties[];
+ // AccelFilterInterpreter Debug Data keys:
+ static const char kKeyAccelGestureDebug[];
+ static const char kKeyAccelDebugNoAccelBadGain[];
+ static const char kKeyAccelDebugNoAccelGestureType[];
+ static const char kKeyAccelDebugNoAccelSmallDt[];
+ static const char kKeyAccelDebugNoAccelSmallSpeed[];
+ static const char kKeyAccelDebugDroppedGesture[];
+ static const char kKeyAccelDebugXYAreVelocity[];
+ static const char kKeyAccelDebugXScale[];
+ static const char kKeyAccelDebugYScale[];
+ static const char kKeyAccelDebugDt[];
+ static const char kKeyAccelDebugAdjustedDt[];
+ static const char kKeyAccelDebugSpeed[];
+ static const char kKeyAccelDebugSmoothSpeed[];
+ static const char kKeyAccelDebugGainX[];
+ static const char kKeyAccelDebugGainY[];
+
+ // Timestamp Debug Data keys:
+ static const char kKeyTimestampGestureDebug[];
+ static const char kKeyTimestampHardwareStateDebug[];
+ static const char kKeyTimestampDebugIsUsingFake[];
+ static const char kKeyTimestampDebugWasFirstOrBackward[];
+ static const char kKeyTimestampDebugPrevMscTimestampIn[];
+ static const char kKeyTimestampDebugPrevMscTimestampOut[];
+ static const char kKeyTimestampDebugWasDivergenceReset[];
+ static const char kKeyTimestampDebugFakeTimestampIn[];
+ static const char kKeyTimestampDebugFakeTimestampDelta[];
+ static const char kKeyTimestampDebugFakeTimestampOut[];
+ static const char kKeyTimestampDebugSkew[];
+ static const char kKeyTimestampDebugMaxSkew[];
+
private:
// Extends the tail of the buffer by one element and returns that new element.
// This may cause an older element to be overwritten if the buffer is full.
@@ -198,10 +356,26 @@ class ActivityLog {
// JSON-encoders for various types
Json::Value EncodeHardwareProperties() const;
+
+ Json::Value EncodeHardwareStateCommon(const HardwareState& hwstate);
Json::Value EncodeHardwareState(const HardwareState& hwstate);
+ Json::Value EncodeHardwareState(const HardwareStatePre& hwstate);
+ Json::Value EncodeHardwareState(const HardwareStatePost& hwstate);
+ Json::Value EncodeHardwareStateDebug(
+ const TimestampHardwareStateDebug& debug_data);
+
Json::Value EncodeTimerCallback(stime_t timestamp);
+ Json::Value EncodeHandleTimer(const HandleTimerPre& handle);
+ Json::Value EncodeHandleTimer(const HandleTimerPost& handle);
Json::Value EncodeCallbackRequest(stime_t timestamp);
+
+ Json::Value EncodeGestureCommon(const Gesture& gesture);
Json::Value EncodeGesture(const Gesture& gesture);
+ Json::Value EncodeGesture(const GestureConsume& gesture);
+ Json::Value EncodeGesture(const GestureProduce& gesture);
+ Json::Value EncodeGestureDebug(const AccelGestureDebug& debug_data);
+ Json::Value EncodeGestureDebug(const TimestampGestureDebug& debug_data);
+
Json::Value EncodePropChange(const PropChangeEntry& prop_change);
// Encode user-configurable properties