Add bytes interface to LogEvent for pulled atoms

This adds a writeBytes interface to LogEvent for native pulled atoms,
which have been using write(string). The function still takes in a
string, but instead uses the write_char_array interface to avoid
stopping on null termination.

Test: modified tests and ran statsd_test
Test: statsd_testdrive 10055 to test against gpu app stats
Bug: 141965020
Change-Id: Iaedfb73310769165d8b61affb55e784f109355cf
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp
index c79b0ca..cb27325 100644
--- a/cmds/statsd/Android.bp
+++ b/cmds/statsd/Android.bp
@@ -138,6 +138,7 @@
         "libprotoutil",
         "libservices",
         "libstatslog",
+        "libstatssocket",
         "libsysutils",
         "libtimestats_proto",
         "libutils",
diff --git a/cmds/statsd/src/external/GpuStatsPuller.cpp b/cmds/statsd/src/external/GpuStatsPuller.cpp
index bbdb540..d38b87f 100644
--- a/cmds/statsd/src/external/GpuStatsPuller.cpp
+++ b/cmds/statsd/src/external/GpuStatsPuller.cpp
@@ -92,9 +92,15 @@
                 android::util::GPU_STATS_APP_INFO, getWallClockNs(), getElapsedRealtimeNs());
         if (!event->write(info.appPackageName)) return false;
         if (!event->write((int64_t)info.driverVersionCode)) return false;
-        if (!event->write(int64VectorToProtoByteString(info.glDriverLoadingTime))) return false;
-        if (!event->write(int64VectorToProtoByteString(info.vkDriverLoadingTime))) return false;
-        if (!event->write(int64VectorToProtoByteString(info.angleDriverLoadingTime))) return false;
+        if (!event->writeBytes(int64VectorToProtoByteString(info.glDriverLoadingTime)))  {
+            return false;
+        }
+        if (!event->writeBytes(int64VectorToProtoByteString(info.vkDriverLoadingTime))) {
+            return false;
+        }
+        if (!event->writeBytes(int64VectorToProtoByteString(info.angleDriverLoadingTime))) {
+            return false;
+        }
         if (!event->write(info.cpuVulkanInUse)) return false;
         if (!event->write(info.falsePrerotation)) return false;
         event->init();
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index 0ade5311..fd19c9d 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -332,6 +332,13 @@
     return false;
 }
 
+bool LogEvent::writeBytes(const string& value) {
+    if (mContext) {
+        return android_log_write_char_array(mContext, value.c_str(), value.length()) >= 0;
+    }
+    return false;
+}
+
 bool LogEvent::writeKeyValuePairs(int32_t uid,
                                   const std::map<int32_t, int32_t>& int_map,
                                   const std::map<int32_t, int64_t>& long_map,
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index 531ce29..f1f45a2 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -21,9 +21,9 @@
 #include <android/frameworks/stats/1.0/types.h>
 #include <android/os/StatsLogEventWrapper.h>
 #include <android/util/ProtoOutputStream.h>
-#include <log/log_event_list.h>
 #include <log/log_read.h>
 #include <private/android_logger.h>
+#include <stats_event_list.h>
 #include <utils/Errors.h>
 
 #include <string>
@@ -157,6 +157,7 @@
     bool write(float value);
     bool write(const std::vector<AttributionNodeInternal>& nodes);
     bool write(const AttributionNodeInternal& node);
+    bool writeBytes(const std::string& value);
     bool writeKeyValuePairs(int32_t uid,
                             const std::map<int32_t, int32_t>& int_map,
                             const std::map<int32_t, int64_t>& long_map,
diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp
index 504ee22..0743480 100644
--- a/cmds/statsd/tests/LogEvent_test.cpp
+++ b/cmds/statsd/tests/LogEvent_test.cpp
@@ -582,7 +582,7 @@
     event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS);
     event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW);
     event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS);
-    event1.write(extension_str);
+    event1.writeBytes(extension_str);
     event1.init();
 
     ProtoOutputStream proto;
@@ -621,7 +621,7 @@
     event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS);
     event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW);
     event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS);
-    event1.write(extension_str);
+    event1.writeBytes(extension_str);
     event1.init();
 
     ProtoOutputStream proto;