trace_processor: Parse systrace counter events

Parsing systrace counter events, made tracker code generic
and added value delta.

Change-Id: I81bfce42ad3bba1f893d38cec4dc46aa0c5800ae
diff --git a/src/trace_processor/proto_trace_parser.cc b/src/trace_processor/proto_trace_parser.cc
index 78ee7ad..8593a26 100644
--- a/src/trace_processor/proto_trace_parser.cc
+++ b/src/trace_processor/proto_trace_parser.cc
@@ -71,10 +71,25 @@
       out->name = base::StringView(s + name_index, len - name_index);
       return true;
     }
-    case 'E':
+    case 'E': {
       return true;
-    case 'C':
+    }
+    case 'C': {
+      size_t name_index = 2 + pid_length + 1;
+      size_t name_length = 0;
+      for (size_t i = name_index; i < len; i++) {
+        if (s[i] == '|' || s[i] == '\n') {
+          name_length = i - name_index;
+          break;
+        }
+      }
+      out->name = base::StringView(s + name_index, name_length);
+      size_t value_index = name_index + name_length + 1;
+      char value_str[32];
+      std::strcpy(value_str, s + value_index);
+      out->value = std::stod(value_str);
       return true;
+    }
     default:
       return false;
   }
@@ -285,6 +300,12 @@
       context_->slice_tracker->End(timestamp, upid);
       break;
     }
+
+    case 'C': {
+      StringId name_id = context_->storage->InternString(point.name);
+      context_->sched_tracker->PushCounter(timestamp, point.value, name_id,
+                                           upid, RefType::kUPID);
+    }
   }
   PERFETTO_DCHECK(decoder.IsEndOfBuffer());
 }