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
This commit is contained in:
Tej Singh
2019-10-01 19:03:24 -07:00
parent 29f3a0b63d
commit a02bfab6cf
5 changed files with 21 additions and 6 deletions

View File

@@ -138,6 +138,7 @@ cc_defaults {
"libprotoutil",
"libservices",
"libstatslog",
"libstatssocket",
"libsysutils",
"libtimestats_proto",
"libutils",

View File

@@ -92,9 +92,15 @@ static bool pullGpuStatsAppInfo(const sp<IGpuService>& gpuService,
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();

View File

@@ -332,6 +332,13 @@ bool LogEvent::write(float value) {
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,

View File

@@ -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 @@ public:
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,

View File

@@ -582,7 +582,7 @@ TEST(LogEventTest, TestBinaryFieldAtom) {
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 @@ TEST(LogEventTest, TestBinaryFieldAtom_empty) {
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;