Updates to Click Interaction Events Histogram

* add one more enum value to identify case where neither PointerId nor
  LastPointerId exist in map
* move last_pointer_id update earlier to fix for the issue when orphan
  pointerup handling feature is turned on, the last_pointer_id wasn't
  updated correctly.

NO_IFTTT=We believe IFTTT is reporting false negative.

Bug: 40891709
Change-Id: I7f5d52b53cd89c8f545128580cb90a8e44756ae9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5653780
Commit-Queue: Aoyuan Zuo <zuoaoyuan@chromium.org>
Reviewed-by: Michal Mocny <mmocny@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1319439}
diff --git a/third_party/blink/renderer/core/timing/responsiveness_metrics.cc b/third_party/blink/renderer/core/timing/responsiveness_metrics.cc
index 7d4490a..851896a 100644
--- a/third_party/blink/renderer/core/timing/responsiveness_metrics.cc
+++ b/third_party/blink/renderer/core/timing/responsiveness_metrics.cc
@@ -77,9 +77,10 @@
   kPointerClickWithMissingPointerdownOnly = 2,
   kPointerClickWithMissingPointerupOnly = 3,
   kPointerClickWithMissingPointerdownAndPointerup = 4,
-  kPointerClickPointerIdDifferFromLastPointerIdButExistInMap = 5,
-  kPointerClickPointerIdDifferFromLastPointerIdAndNotInMap = 6,
-  kKeyboardClick = 7,
+  kPointerClickPointerIdDifferFromLastPointerIdAndPointerIdExistInMap = 5,
+  kPointerClickPointerIdDifferFromLastPointerIdAndOnlyLastPointerIdInMap = 6,
+  kPointerClickPointerIdDifferFromLastPointerIdAndNeitherInMap = 7,
+  kKeyboardClick = 8,
   kMaxValue = kKeyboardClick,
 };
 // LINT.ThenChange(/tools/metrics/histograms/enums.xml:EventTimingClickInteractionEvents)
@@ -338,6 +339,7 @@
     FlushPointerup();
 
     is_last_pointerup_orphan_ = false;
+    last_pointer_id_ = pointer_id;
 
     // Platforms like Android would create ever-increasing pointer_id for
     // interactions, whereas platforms like linux could reuse the same id for
@@ -380,7 +382,6 @@
     }
     // Start the timer to flush the entry just created later, if needed.
     pointer_flush_timer_.StartOneShot(kFlushTimerLength, FROM_HERE);
-    last_pointer_id_ = pointer_id;
   } else if (event_type == event_type_names::kClick) {
     base::UmaHistogramEnumeration(
         kPageLoadInternalEventTimingClickInteractionEvents,
@@ -405,12 +406,19 @@
         base::UmaHistogramEnumeration(
             kPageLoadInternalEventTimingClickInteractionEvents,
             ClickInteractionEvents::
-                kPointerClickPointerIdDifferFromLastPointerIdButExistInMap);
+                kPointerClickPointerIdDifferFromLastPointerIdAndPointerIdExistInMap);
       } else {
-        base::UmaHistogramEnumeration(
-            kPageLoadInternalEventTimingClickInteractionEvents,
-            ClickInteractionEvents::
-                kPointerClickPointerIdDifferFromLastPointerIdAndNotInMap);
+        if (pointer_id_entry_map_.Contains(*last_pointer_id_)) {
+          base::UmaHistogramEnumeration(
+              kPageLoadInternalEventTimingClickInteractionEvents,
+              ClickInteractionEvents::
+                  kPointerClickPointerIdDifferFromLastPointerIdAndOnlyLastPointerIdInMap);
+        } else {
+          base::UmaHistogramEnumeration(
+              kPageLoadInternalEventTimingClickInteractionEvents,
+              ClickInteractionEvents::
+                  kPointerClickPointerIdDifferFromLastPointerIdAndNeitherInMap);
+        }
       }
     }
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 06d4582b..8f30fc4 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -5642,12 +5642,15 @@
   <int value="3" label="Pointer click with missing pointerup only"/>
   <int value="4" label="Pointer click with missing pointerdown and pointerup"/>
   <int value="5"
-      label="Pointer click PointerId differ from LastPointerId but exist in
-             the map"/>
+      label="Pointer click PointerId differ from LastPointerId and PointerId
+             exist in the map"/>
   <int value="6"
-      label="Pointer click PointerId differ from LastPointerId and not in the
-             map"/>
-  <int value="7" label="Keyboard click"/>
+      label="Pointer click PointerId differ from LastPointerId and only
+             LastPointerId in the map"/>
+  <int value="7"
+      label="Pointer click PointerId differ from LastPointerId and neither in
+             the map"/>
+  <int value="8" label="Keyboard click"/>
 </enum>
 
 <enum name="Experiment3pcBlockStatus">